2016-04-29 29 views
0

使用Java API,我试图用Put()来HBase 1.1.x的某些文件的内容。为此,我创建了WholeFileInput类(ref:Using WholeFileInputFormat with Hadoop MapReduce still results in Mapper processing 1 line at a time),以使MapReduce读取整个文件而不是一行。但不幸的是,我无法弄清楚如何从给定的文件名组成我的rowkey。插入文件名为rowkey使用HBase MapReduce

实施例:

输入:

文件123.txt

文件524.txt

文件9577.txt

...

file-“anotherNumber”.txt

结果在我的HBase的表:

行-----------------价值

123 ---------- -------

524 -----------------

“第二个文件的内容” ...等

“一号文件内容”

如果有人已经面临这种情况来帮助我吧

在此先感谢。

+0

不知道我是否理解,你只是想把文件放入HBase?如果你想这样做,只需将该文件作为一个字节数组读取并放入Hbase – Whitefret

+0

@Whitefret是的,但不仅如此,我已经解决了如何将整个文件放入HBase的问题,现在,它是关于生成rowkey从文件名。我已经为此写了一个方法,将文件名作为输入并返回一个字符串(= myRowKey),但我无法想象如何从映射函数 – mttb12

+0

中调用此方法,您不需要此映射函数,除非有大文件,在这种情况下,您不应该使用HBase – Whitefret

回答

2

rowkey 

,可就是这样

rowkey = prefix + (filenamepart or full file name) + Murmurhash(fileContent) 

您的前缀可以之间什么都presplits您与创建表时完成。

对于离:

create 'tableName', {NAME => 'colFam', VERSIONS => 2, COMPRESSION => 'SNAPPY'}, 
    {SPLITS => ['0','1','2','3','4','5','6','7']} 

前缀可以预先分割的范围之间产生的任何随机ID。

这种行键还可以避免数据增加时的热点。 &数据将分布在区域服务器上。