2017-05-08 6 views
1

hbaseテーブルに20kファイルをバルクロードしようとしています。平均ファイルサイズは400kbです。しかし、ファイルのいくつかは70MBもの大きさです。すべてのファイルの合計サイズは11GBです。 アプローチは標準であり、loadIncremenalFilesの呼び出しに続いてキー値のペアが発行されます。 10個のファイルのランダムサンプルのコードを実行すると、すべて動作します。私は生成されたhfilesのサイズがファイル自体の1.3倍であることに留意しました。 しかし、すべての20kファイルに対して同じコードを実行すると、hfilesが得られます.hfilesは400GBのサイズです。データそのものの36倍。 HFilesには、テーブルデータに加えてインデックスとメタデータが含まれていますが、このようなサイズの劇的な増加を説明できるものはありますか?hbaseバルクロードで異常な動作が発生する

答えて

1

私は宇宙の劇的な増加の背後にある理由を発見しました。

これは、私のマッパーがキーの値のペアを照合したものです(入力はシーケンスファイルでした)。

public void map(Text key, BytesWritable value, Context context) 
.... 
byte[] row = Bytes.toBytes(rowID); 
hKey.set(row); 
kv=getKV(familyRaw, Bytes.toBytes("content"), value.getBytes()); 

問題はvalue.getBytes()です。 0で埋められたバイト配列を返します。それをvalue.copyBytes()に変更すると、動作が修正されました。

これについては、HADOOP-6298

関連する問題