Amazon Elastic MapReduce - S3からDynamoDBへのマスインサートは信じられないほど遅いです

StackOverflow https://stackoverflow.com//questions/10683136

質問

1億1,000万アイテム(合計5+ GB)の初期アップロードを1つのDynamoDBテーブルにアップロードする必要があります。

ロングストーリーの短い、その非常に平均の(EMRのための)データ量の輸入は、最も強力なクラスターでも年齢がかかり、ほとんどほとんど何百時間かかりませんでした(2MBのデータビットを処理し、そしてしました。 'tを12時間後にテスト700MBファイルで終了することを管理します)。

私はすでにAmazon Premiumサポートに連絡していますが、これまでのところ、「何らかの理由でDynamoDBインポートが遅い」と言った。

私は私の対話型ハイブセッションの指示を試みました:

CREATE EXTERNAL TABLE test_medium (
  hash_key string,
  range_key bigint,
  field_1 string,
  field_2 string,
  field_3 string,
  field_4 bigint,
  field_5 bigint,
  field_6 string,
  field_7 bigint
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
LOCATION 's3://my-bucket/s3_import/'
;

CREATE EXTERNAL TABLE ddb_target (
  hash_key string,
  range_key bigint,
  field_1 bigint,
  field_2 bigint,
  field_3 bigint,
  field_4 bigint,
  field_5 bigint,
  field_6 string,
  field_7 bigint
)
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
TBLPROPERTIES (
  "dynamodb.table.name" = "my_ddb_table",
  "dynamodb.column.mapping" = "hash_key:hash_key,range_key:range_key,field_1:field_1,field_2:field_2,field_3:field_3,field_4:field_4,field_5:field_5,field_6:field_6,field_7:field_7"
)
;  

INSERT OVERWRITE TABLE ddb_target SELECT * FROM test_medium;
.

様々なフラグは、目に見える効果を持っていないようです。デフォルトのものの代わりに次の設定を試してみました:

SET dynamodb.throughput.write.percent = 1.0;
SET dynamodb.throughput.read.percent = 1.0;
SET dynamodb.endpoint=dynamodb.eu-west-1.amazonaws.com;
SET hive.base.inputformat=org.apache.hadoop.hive.ql.io.HiveInputFormat;
SET mapred.map.tasks = 100;
SET mapred.reduce.tasks=20;
SET hive.exec.reducers.max = 100;
SET hive.exec.reducers.min = 50;
.

DynamoDBターゲットの代わりにHDFSに対して実行されるのと同じコマンドが秒単位で完了しました。

それは簡単な仕事、非常に基本的なユースケースのようです、そして私は本当にここで何が悪いことが何ができるのか疑問に思います。

役に立ちましたか?

解決

最近AWSサポートから最後に得た答えです。同様の状況で誰かを助けることを願っています:

EMRワーカーは現在シングルスレッドワーカーとして実装されています。 各労働者は1つずつの項目を書いている(PUTを使用して、BatchWriteではありません)。 したがって、各書き込みは1の書き込み容量単位(IOP)を消費します。

これはあなたが多くの接続を確立していることを意味します ある程度のパフォーマンスを低下させます。バッチライトを使用した場合、IT 単一の操作で最大25行までコミットできることを意味します 費用がかかることは賢明ではない(私が理解していれば同じ価格 それは正しい)。これは私たちが知っているものであり、おそらくおそらく EMRで将来的に実装します。タイムラインを提供することはできません。

前述のように、ここでの主な問題はDynamoDBのテーブルがあるということです。 プロビジョニングされたスループットに達しているので、それを増やそう 輸入のために一時的にそれを減らすことを自由に感じます あなたが必要とするレベル。

これは少し便利に聞こえるかもしれませんが、問題がありました あなたがこれをしていたときの警告あなたが受け取ったことがない理由だった 警告する。問題は解決されています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top