2017-07-03 6 views
0

HIVEテーブルの長さが小さい(数KB)から非常に長い(< 400MB)ストリングフィールドを格納しています。現在、私たちは本番環境で実行しているものではないが、(条件や結合なしで)ある表から別の表にデータをコピーするときにOOMの問題に直面していますが、この問題が発生する最も単純な使用例です。だから、HQLは、基本的には次のとおりです。HIVE非常に長いフィールドはOOMヒープを与えます

INSERT INTO new_table 
SELECT * FROM old_table; 
コンテナやJavaヒープが16ギガバイトに設定した

、我々がしようとした、さまざまなファイル形式など、持つと圧縮せず(のrcfile、ORC)、異なるエンジン(MR、TEZ)、何も役立たず、私たちは常にOOMを実行します。

正確に何が起こっているのかわかりません。私たちは、Javaプロセスが単一レコードの最大長のわずか数倍のメモリしか必要としないことを期待していました。これは〜400Mですが、16GBヒープ全体ではありません。

私たちに試してみるべきことを教えてください。

使用バージョン:2.4.2 HDP

サンプルログRAMのTEZ + ORC + 8Gを使用して:https://pastebin.com/uza84t6F

+0

をエラーログやハイブを添付してくださいパラメーター。 – leftjoin

+0

TEZ + ORC + 8G RAMの編集済みサンプルログ – Martin

答えて

0
  1. はTEXTFILEの代わりに、ORCを使用してみてください。 ORCファイルを書くには、もっと多くのメモリが必要です。

  2. 並列性を上げ、マッパーを追加してください。 TEZのため、これらのパラメータと遊ぶとマッパーの数を増やすために試してみてください。

--minと最大分割サイズ:

set tez.grouping.min-size=16777216; 
set tez.grouping.max-size=1073741824; 

こちらをご覧ください:https://community.hortonworks.com/articles/14309/demystify-tez-tuning-step-by-step.html

+0

ありがとうございました。私は基礎となるストレージファイルのフォーマットをsequencefileに変更し、それが魅力的なように動作するようになりました。 ORCとRCFileは非常に長い文字列フィールドのような特定のユースケースのために構築されていないと思われます。 – Martin

+0

柱状ファイルを作成するには、データ処理用の特別なバッファのためにより多くのメモリが必要です。 – leftjoin

関連する問題