2016-08-29 17 views
0

MySQLデータベースからSqoopユーティリティを使用してHiveにデータをインポートしようとしました。私はテーブルを作成し、フェッチサイズを10にしました。コマンドを実行するたびに、Java Heap Size Errorが発生し、ジョブは4回試行した後に強制終了します。どうしたらいいですか?SqoopインポートでJavaヒープサイズのエラーが発生しました

次のように私のsqoopコマンドは次のとおりです。

sqoop import --connect jdbc:mysql://my_local_ip/mydatabase --fetch-size 10 --username root -P --table table_name --hive-import --compression-codec=snappy --as-parquetfile -m 1 

と私は取得しています:

16/08/29 07:06:24 INFO mapreduce.Job: The url to track the job: http://quickstart.cloudera:8088/proxy/application_1472465929944_0013/ 
16/08/29 07:06:24 INFO mapreduce.Job: Running job: job_1472465929944_0013 
16/08/29 07:06:47 INFO mapreduce.Job: Job job_1472465929944_0013 running in uber mode : false 
16/08/29 07:06:47 INFO mapreduce.Job: map 0% reduce 0% 
16/08/29 07:07:16 INFO mapreduce.Job: Task Id : attempt_1472465929944_0013_m_000000_0, Status : FAILED 
Error: Java heap space 
16/08/29 07:07:37 INFO mapreduce.Job: Task Id : attempt_1472465929944_0013_m_000000_1, Status : FAILED 
Error: Java heap space 
16/08/29 07:07:59 INFO mapreduce.Job: Task Id : attempt_1472465929944_0013_m_000000_2, Status : FAILED 
Error: Java heap space 
16/08/29 07:08:21 INFO mapreduce.Job: map 100% reduce 0% 
16/08/29 07:08:23 INFO mapreduce.Job: Job job_1472465929944_0013 failed with state FAILED due to: Task failed task_1472465929944_0013_m_000000 
+0

マップのサイズが大きくなると、 'mapreduce.map.java.opts'と' mapreduce.map.memory.mb'が役に立ちます。私の環境では、YARNコンテナのサイズ制限は32GBなので、 'mapreduce.map.java.opts = -Xmx30000m'と' mapreduce.map.memory.mb = 32000'をそれぞれ設定しました。 – abhiieor

+0

私はClouderaのみを使用しています。どうすればこの設定を変更できるのか教えてください。 –

+0

あなたは 'sqoop import -Dmapreduce.map.java.opts = -Xmx30000m -Dmapreduce.map.memory.mb = 32000 -connect jdbc:mysql:// my_local_ip/mydatabase --fetch-size 10 --usernameを実行する必要があります。 root -P --table table_name --hive-import --compression-codec = snappy --as-parquetfile -m 1'しかし、YARNコンテナの最大サイズを確認してください。 'mapreduce.map.memory.mb'には少し少なく、さらに' mapreduce.map.java.opts'にはそれほど少なくありません。 – abhiieor

答えて

0

は、私は10を処理するために10のマッパーを使用している、最初

sqoop import -Dmapreduce.map.memory.mb=1024 -Dmapreduce.map.java.opts=-Xmx7200m -Dmapreduce.task.io.sort.mb=2400 --connect jdbc:mysql://local.ip/database_name --username root -P --hive-import --table table_name --as-parquetfile --warehouse-dir=/home/cloudera/hadoop --split-by 'id' -m 100 

で試してみてください各チャンクのサイズは100万レコードです。これはエラーの原因となり、100のマッピングジョブを実行したときにデータを正常に処理しました。私が気づいたのは、仕事を完了するのにかかる時間だけです。 100マッパーのすべてのジョブを実行するのにほぼ1時間かかりました。

+0

は意味をなさない。それは確かにあなたのプロセスを遅らせるでしょう。あなたが単一ノードのハープと最大マッパーを使用しているのは、並列実行可能なものよりも、あなたのケースでは10未満です。各マッパーごとに100万レコードが少量です。 'Dmapreduce.map.memory.mb = 1024 -Dmapreduce.map.java.opts = -Xmx7200m'では、この作業を4つのマッパーで簡単に実行できるはずです。操作を大幅に高速化できます。ノードクラスタが1つであるため、4つ以上のマッパーを使用しないでください。メモリパラメータを管理するための作業 –

関連する問題