2017-01-19 1 views
0

sqoopジョブがhdfsディレクトリに増分インポートを書き込んでいるとします。 別の(非sqoop)ジョブは、定期的に処理のためにこのディレクトリから別の場所にデータを移動しています。 私はこの仕事が現在sqoopによって修正されているファイルを移動しないようにしたいと思います。彼らは一度移動することができたら、準備ができたファイルを特定のパターンにリネームする方法がありますか?sqoopがファイルへの書き込みを完了したことを確認する方法はありますか?

ファイルが移動されない場合、sqoopは毎回既存のpart-m-000xファイルに新しいコンテンツを追加するだけですか?

答えて

0

Ambari/HDFSアップロードプロセスの仕組みを見てください。ファイル "xxxx.txt"のアップロード中にhdfsにファイルをアップロードすると、Ambariはそれを "xxxx.txt._COPYING"としてアップロードします。アップロードが完了すると、ファイルの名前が正しい名前に変更されます。

他のsqoopプロセスが ".txt"ファイルを検索すると、名前が変更されて移動される前に表示されません。

これを過去に完了し、完全に機能します。

+0

はい、まさに私が欲しいものです。私はsqoopを同じ方法で動作させる方法があるかどうかを尋ねています(あるいはデフォルトでこの方法で動作するかどうか)。 – Art

+0

この方法ではデフォルトでは動作しません。スクリプトを作成する必要があります。それを行うスクリプトでsqoopユーティリティを単にラップすることもできます。 –

0

Sqoopがデフォルトストアによってフード及びM/Rジョブ_temporaryサブディレクトリ内の結果、進行中の一方の下のMapReduceを使用する:OutputCommitterである場合

Task Side-Effect Files

(...) FileOutputCommitterは、タスク試行の出力が格納されているFileSystemの各試行に対して、${mapreduce.task.output.dir}でアクセス可能な特別な${mapreduce.output.fileoutputformat.outputdir}/_temporary/_${taskid}サブディレクトリを保持します。タスクの試行が正常に完了すると、${mapreduce.output.fileoutputformat.outputdir}/_temporary/_${taskid}(のみ)のファイルは${mapreduce.output.fileoutputformat.outputdir}に昇格されます。もちろん、フレームワークは、失敗したタスクの試行のサブディレクトリを破棄します。このプロセスは、アプリケーションに対して完全に透過的です。

この情報を確認するためにSqoopインポートを実行したばかりであり、Sqoopは実際にこのように動作します。

関連する問題