1

我安装了 HBase,但没有创建任何表来加载数据。现在,如果我们想将 reduce() 的输出加载到 HBase 表中,我们是否需要在 HBase shell 中显式创建表并提及列名,或者我们可以在 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 中的列族之间的区别在于,列只是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 列时,您可以将这两列都放在一个系列中,也可以同时将它们放在 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 时如何动态指定列。另外,请注意,家庭是公正的cf,而不是cf:fld1cf:fld2。冒号 (:) 将列族与列名分隔开来,它们一起称为column qualifier.

高温高压

于 2013-06-13T15:21:57.297 回答