2016-08-23 14 views
0

の下に私のプロセス&問題を参照してください:私は 「INCREMENTALアペンドチェック欄を使用して増分データをインポートするSQOOPを使用しています最初の増分fashion.Soに1つのMySQLのテーブルのデータをロードしたいSTEP1 -I 最後の値 ' これをHDFSフォルダ'/sqoopdir1 'に保存すると仮定します ステップ2 - 重複チェックのようなデータ検証を行うためにブタスクリプトを使用したいと思います。結果は'/user/root/pigdir 'に移動します ステップ3 - 私は豚の出力ディレクトリを "textfile location/user/root/pigdirとして保存"と指定したハイブ外部テーブル 'extsample'を作成します。ハイブ外部表増分ロード

私の問題はです(1)SQOOPは、HDFSのフォルダ/ sqoopdir1にpart-m-00001、part-m-00002などを作成しますが、インクリメンタルプロセスごとに、PIGプロセスが自動的に選択するための最新ファイルが必要です。 (2)別の問題点は、PIGがpart-r-00000ファイルを/ user/root/pigdirに作成することです。 2回目のジョブでファイルが既に存在すると言って失敗するので、PIGジョブを実行するためにファイルの名前を変更する必要があります。

要するに、最終的なハイブテーブルに最初に読み込まれたデータ+挿入された/更新されたレコードが必要です。私は初心者ですから、上記の問題を解決するか、より良いアプローチをアドバイスしてください。

答えて

0

1)私の理解によると、各インクリメンタルデータを同じフォルダに入れようとしていますか?しかしそれは真実ではない、sqoopは例外フォルダを既にスローするだろう。 part-m-00ファイルはsqoopから出力されるので、もしあなたがそれについて考えるならば、それらの "part"ファイルはすべて、シングルsqoop摂取によって生成されたインクリメンタルデータです。

私たちは動的出力場所(フォルダ名にタイムスタンプを追加する)を提供する必要がある各sqoopインクリメンタルな取り込みのように、コード内でこれを処理する必要があります...同じことがPigになります。シェルスクリプトを使用してsqoopと豚を呼び出す場合、動的な場所を渡すのは非常に簡単です。

+0

こんにちはSQOOP増分APPENDなので、同じフォルダにpart-m-00001、part-m-00002などのような複数のファイルを持つことができます – user6392682

+0

次に、特定のインクリメンタルデータを保持するステージングフォルダが必要な場合がありますそれをPigスクリプトに渡そうとするか、タイムスタンプに基づいたロジックを使って最新のインクリメンタルファイルを取得し、Pigスクリプトにフィードしてみてください。 –

+0

謝辞を書いてありがとうございます。 ?もしそうなら、あなたは豚を使っていくつかの有効なデータ検証の例を(重複除去のように)教えていただけますか?また、ステージングテーブルは、特定の日付のインクリメンタルデータだけを格納する外部テーブルでなければなりませんか?ステージングテーブルのデータを操作する必要がありますか、インクリメンタルデータを格納するためにのみ使用されますか? – user6392682

関連する問題