1

HBase をインストールしましたが、データをロードするためのテーブルを作成していません。では、reduce() の出力を HBase テーブルにロードする場合、テーブルを明示的に作成して HBase シェルで列名を指定する必要がありますか、それとも MapReduce プログラムで行うことができますか?

4

1 に答える 1

1

事前にテーブルを用意する必要があります。シェルから作成するか、ジョブ自体にテーブルを作成するコードを追加します。これは、コードを使用して行う方法です。

HBaseConfiguration conf = HBaseConfiguration.get(); 
HBaseAdmin hbase = new HBaseAdmin(conf);
HTableDescriptor desc = new HTableDescriptor("TEST");
HColumnDescriptor meta = new HColumnDescriptor("cf".getBytes());
desc.addFamily(meta);
hbase.createTable(desc);

テーブルの作成時に列を指定する必要はありませんが、列ファミリーは必須です。データを入れるときに列名を追加できます。

RDBMS の列と HBase の列ファミリーの違いは、列は単にであるのに対し、列ファミリーはetc などa set of data values of a particular simple type, one for each row of the table、さらに多くのことを定義することです。compression, number of versions to maintain, time to live, maximum and minimum number of versions

本質的に、列ファミリーは類似した列の集まりに過ぎません。これは、データ間にセマンティックまたはトピックの境界を構築するのに役立ちます。

テーブルに 2 つの列が必要であると言う場合、これらの列の両方を 1 つのファミリに含めるか、両方を 2 つの異なるファミリに含めることができます。ただし、家族の数は少ない方がよいので、1 家族だけで行くことをお勧めします。

hbase(main):004:0> create 'demo', 'cf'

このテーブルには 2 つの列が必要です。

hbase(main):006:0> put 'demo', 'row1', 'cf:fld1', 'value1'

hbase(main):006:0> put 'demo', 'row1', 'cf:fld2', 'value2'

Put 時に列がどのように動的に指定されるかを確認します。また、 family は just であり、 orではcfないことに注意してください。コロン文字 (:) は、列名から列ファミリーを区切り、まとめて として呼び出されます。cf:fld1cf:fld2column qualifier

HTH

于 2013-06-13T15:21:57.297 に答える