我安装了 HBase,但没有创建任何表来加载数据。现在,如果我们想将 reduce() 的输出加载到 HBase 表中,我们是否需要在 HBase shell 中显式创建表并提及列名,或者我们可以在 MapReduce 程序中这样做吗?
user2391084
问问题
230 次
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:fld1
或cf:fld2
。冒号 (:) 将列族与列名分隔开来,它们一起称为column qualifier
.
高温高压
于 2013-06-13T15:21:57.297 回答