2016-06-27 13 views
0

私は、6データノードと1 namenodeを持つHadoopクラスタを持っています。毎日稼働するHIVEには(4)のジョブはほとんどなく、sqoopを使ってログファイルからOLPTデータベースにデータをプッシュします。私は環境にぬっこをインストールしていません。すべてがHIVEスクリプトファイル(.sqlファイル)で書かれており、私はそれらをUNIXスクリプト(.shファイル)から実行します。それらのシェルスクリプトファイルは、異なる時間にそれらを実行するために、異なるOSのcronジョブでアタッチされます。HIVE-SQOOPベースのバッチジョブの例外、エラー、ログの取得方法は?

今の要件はこれです:

が日常的に個別に各ジョブのログ/ステータスを生成します。これらのログを調べると、どのジョブが正常に実行され、実行に時間がかかったのか、そのジョブが失敗したジョブをダンプ/スタックすることができます(機能計画は、メールサーバーとすべての失敗または成功のジョブシェルスクリプトは、それらのログ/ステータスファイルを添付してそれぞれのスタック所有者にメールを送信します)

私の問題は、これらのバッチジョブ/シェルスクリプトまた実行時間とともに成功ログを生成する方法は?

出力をリダイレクトすることによってHIVEに実行される各クエリの出力をテキストファイルで取得しようとしましたが、それは動作しません。例えば

Select * from staging_table;>>output.txt 

は一日一日に基づき、一人ひとりHIVEジョブのHIVEログを構成することによって、これを行う方法はありますか?

いずれかがこの問題に直面した場合は教えてください。どうすれば解決できますか?

+0

「ハイブ」では、外部システムコマンドを ''!''で実行することができますので、 'select'の出力には' tee'を使用してみてください – Vishrant

+0

didあなたは他の何かを見つけるか?IMHO私があなたに提案したもの以外には絶対に可能ではありません... –

+0

他に何かを見つけましたか? –

答えて

1
Select * from staging_table;>>output.txt 

このオプションは、このオプションを探している場合は出力をリダイレクトしています。次にコンソールからの出力です。

hive -e 'Select * from staging_table' > /home/user/output.txt 

これは単に出力をリダイレクトします。ジョブ固有のログ情報は表示されません。中に

しかし、私はあなたがthis

結果のログファイルの場所を参照してください。ログの特定のアプリケーション(ジョブ)を参照してください期待している場合は、糸上で実行されていると仮定しています実行時間にはすべてのコンテナログが表示されます

UIを使用すると、ジョブレベルとタスクレベルのログが表示されます。

他の方法は、コマンドラインからアプリケーション/ジョブ固有のログを調べてダンプすることです。

yarn logs -applicationId your_application_id 

yarn logs -applicationId <application_id>メソッドを使用することをお勧めしますが、ログ集約を最初に有効にする必要があります。 Also see much better explanation here

+0

ありがとう....はい、あなたは正しいリダイレクトは、SQLの出力だけではなく、ジョブの状態と実行時間の情報を与える....このアプローチの問題で "糸ログ-applicationId your_application_id"は、すべてがバックエンドで実行されているOSのcronジョブは1日の異なる時刻に(今は6時間ごとに)実行されますので、アプリケーションIDについてはわかりません(実行ごとに変更されます)。私はおっとの問題を解決できると思いますか?私はぞっとするほどの知識がありません。 Plsは助けます... – Sujoy

+0

私はおっとと考えていません。以前のすべてのジョブ・ログはジョブ履歴サーバーの権利で管理されています。それを見つけることができますか?最初に現在実行中のジョブから2つ目は、履歴ジョブである2つのものがあります。どのような場合でも、すべてのメトリックでジョブ/タスクトラッカーのログを見ることができます。 –

+0

同じcronスタイルのジョブが実行されています。ジョブ固有のログを見るための唯一の方法です。 –

関連する問題