2016-10-14 11 views
0

マッパーの数がソースのhdfsの場所のブロックの数よりも多い場合、sqoopのエクスポートは重複を作成しますか?Sqoopのエクスポートの重複

私のソースhdfsディレクトリには2400万レコードがあり、Postgresテーブルへのsqoopエクスポートを実行すると、何とか重複レコードが作成されます。マッパーの数を24に設定しました。ソースの場所には12個のブロックがあります。

なぜsqoopが重複を作成しているのでしょうか?

  • Sqoopバージョン:1.4.5.2.2.9.2-1
  • Hadoopのバージョン:Hadoopの2.6.0.2.2.9.2-1

SqoopコマンドUsed-

sqoop export -Dmapred.job.queue.name=queuename \ 
--connect jdbc:postgresql://ServerName/database_name \ 
--username USER --password PWD \ 
--table Tablename \ 
--input-fields-terminated-by "\001" --input-null-string "\\\\N" --input-null-non-string "\\\\N" \ 
--num-mappers 24 -m 24 \ 
--export-dir $3/penet_baseline.txt -- --schema public; 
+0

データをエクスポートした後のpostgresテーブルのレコード数は何ですか? –

+0

ターゲットテーブルに100万レコードが追加されています。約2,500万人。これは、実行ごとに異なります。 – Bagavathi

+0

100万のみがエクスポートされますか? –

答えて

0

No sqoopはレコードを2回エクスポートしません。マッパーの数とブロックの数とは関係ありません。


HDFSとpostgresの間で高速なデータ転送のためのsqoopのpg_bulkload connectorを見てください。

pg_bulkloadコネクタは、データをPostgreSQLにエクスポートするための直接コネクタです。このコネクタはpg_bulkloadを使用します。ユーザーは、共有バッファやWALを迂回する高速エクスポート、柔軟なエラーレコード処理、フィルタ機能を備えたETL機能など、pg_bulkloadの機能を利用できます。 デフォルトでは、sqoop-exportはテーブルに新しい行を追加します。各入力レコードは、ターゲット・データベース表に行を追加するINSERTステートメントに変換されます。表に制約(たとえば、値が一意でなければならない主キー列)があり、すでにデータが含まれている場合は、これらの制約に違反するレコードを挿入しないように注意する必要があります。 INSERT文が失敗した場合、エクスポート処理は失敗します。このモードは、主に、これらの結果を受け取るための新しい空のテーブルにレコードをエクスポートするためのものです。

+0

このシナリオをテストするために、ターゲットテーブルにPK制約を追加しました。仕事が途中で終わるとPK違反とは言わない。だからこそ、私はSqoopが重複を読み込むと言う。 – Bagavathi

+0

hdfsファイルに重複したデータがある場合。それでsqoopはこれで何もできません。 Sqoopは単にINSERT文を起動します –

+0

HDFSファイルに重複はありません。失敗したIDをログから取り出し、HDFSテーブルを照会しました。そのIDの – Bagavathi

関連する問題