我正在尝试将几个大的.csv文件导入HBase(总计> 1TB)。数据看起来像是来自关系数据库的转储,但没有UID。另外,我不想导入所有列。我决定首先运行一个自定义的MapReduce作业,使它们进入所需的格式(选择列+生成UID),这样我就可以使用标准的hbase importtsv批量导入来导入它们。
我的问题:我可以创建自己的复合行密钥,比如storeID:year:UID使用MapReduce,然后将其提供给tsv import吗?所以说,我的数据看起来像这样:
do {
// update card values
card1 = card.nextInt(14);
card2 = card.nextInt(14);
war1 = card.nextInt(14);
war2 = card.nextInt(14);
System.out.println("Turn " + t++ + " -- Player 1's card: " + card1 + " Player 2's card: " + card2);
根据我的理解,HBase将所有内容存储为字节,时间戳除外。它是否会理解这是一个复合键?!
任何提示都表示赞赏!
答案 0 :(得分:0)
我在Cloudera问了同样的问题,答案可以找到here.
基本上,答案是肯定的,不需要分隔符。我使用MapReduce作业将数据转换为以下格式:
A2012:1,0.99,1,001
A2012:2,0.99,2,012
使用importtsv和completebulkload,然后将数据正确加载到正确的HBase区域。我使用storeID(A,B,C,...)预分割表。