0

sqoop を使用して MySQL から HBase にデータをインポートしようとしています。MySQL テーブルには約 900 万件のレコードがあり、サイズはほぼ 1.2GB です。Hadoop クラスターのレプリケーション ファクターは 3 です。
私が直面している問題は次のとおりです。

  1. hbase にインポートした後のデータ サイズは 20 GB を超えています!!! 理想的には、たとえば 5GB (1.2G*3 + いくらかのオーバーヘッド) に近い値にする必要があります。

  2. HBase テーブルの VERSIONS は 1 として定義されています。MySQL から同じテーブルを再度インポートすると、/hbase/ のファイル サイズが増加します (ほぼ 2 倍になります)。HBase テーブルの行数は変わりませんが。HBase に同じ行を挿入しているため、これは奇妙に思えます。そのため、ファイルサイズは行カウント値と同様に同じままである必要があります。

私の理解では、同じ行セットをインポートする場合、2 番目のケースのファイル サイズは増加しないはずです。これは、各エントリに対して維持される最大バージョンが 1 つだけであるためです。

どんな助けでも大歓迎です。

4

2 に答える 2

3

このブログによると、それは依存します

したがって、レコード サイズを計算するには: KeyValue フォーマットに必要な固定部分 = キーの長さ + 値の長さ + 行の長さ + CF の長さ + タイムスタンプ + キーの値 = ( 4 + 4 + 2 + 1 + 8 + 1) = 20 バイト

KeyValue 形式で必要な変数部分 = 行 + 列ファミリー + 列修飾子 + 値

必要な総バイト数 = 固定部分 + 可変部分

上記の例では、レコード サイズを計算してみましょう。 最初の列 = 20 + (4 + 4 + 10 + 3) = 41 バイト 2 番目の列 = 20 + (4 + 4 + 9 + 3) = 40 バイト 3 番目の列 = 20 + (4 + 4 + 8 + 6) = 42 バイト

上記の例の行 1 の合計サイズ = 123 バイト

このようなレコードを 10 億個保存するには、必要なスペース = 123 * 10 億 = ~ 123 GB

あなたの計算はひどく間違っていると思います。おそらくあなたのスキーマ設計を私たちと共有してください。私たちは計算を行うことができます。

于 2013-09-06T11:23:24.610 に答える