1

HIVE (1.2.1) の「ORC」テーブルからデータを読み取り、そのデータを「TextInputFormat」でテーブルに入れようとしています。一部のエントリが元のデータでは大きすぎるため、操作中に次のエラーが発生します:

org.apache.hadoop.hive.ql.metadata.HiveException: org.apache.tez.runtime.library.common.sort.impl.ExternalSorter$MapBufferTooSmallException: メモリ内バッファーに対してレコードが大きすぎます。バッファ オーバーフロー制限を超えました。bufferOverflowRecursion=2、bufferList.size=1、blockSize=1610612736

問題を解決する方法はありますか?

クエリの実行には TEZ エンジンを使用していますが、単純な MR エンジンではエラーは発生しません。

実行するクエリ:

insert overwrite table visits_text_test_1m select * from visits where dt='2016-01-19' limit 1000000;

Upd: ORC から ORC ストレージにコピーするときの同じエラー。

Upd 2: ORC からの単純な「選択」は、どのエンジンでもうまく機能します。

4

2 に答える 2

0

サムソンのように、コンテナのサイズを大きくしたいと思うかもしれませんが、デフォルトではハイブが結合を MAPJOIN に変換するため、JOIN が問題を引き起こすこともあります。クエリで以下の設定を試して、役立つかどうかを確認してください。

set hive.auto.convert.join=false;
set hive.auto.convert.join.noconditionaltask=false;
于 2016-02-11T20:16:10.523 に答える
0

ヒント #1: クエリを実行する前に TEZ から MapReduce に切り替えるだけです。速度は遅くなりますが、回復力が高くなります。

set hive.execution.engine = mr ;

ヒント #2: 恐ろしい TEZ ExternalSortertez.runtime.sorter.classビーストから例外が発生するため、などの TEZ プロパティを掘り下げます。プロパティtez.runtime.io.sort.mbのワーキング セットを見つけるには (それらを に合わせて調整することについて話していなくてもhive.tez.container.size)、おそらく何らかの種類が必要になることに注意してください。ブードゥーの犠牲の。

参照。HortonWork のスターター向けの Tez の構成マニュアル。

于 2016-02-10T17:33:10.683 に答える