setup(..){
//prep FileSystem fs = ..
}
map(...) {
String path = key.toString
FSDataInputStream in = fs.open(new Path(val))
//Using in.read() read as bytes. Optionally custom encoding.
//Set the binary value to key value if using bulkload, else to the Put object.
context.write(key, kv)
}
cleanup(..) {
//close fs. misc.
}
1条答案
按热度按时间m3eecexj1#
在后台,hbase将所有内容存储为二进制文件。你会的
Put
以及Get
二进制数据。只需将图像作为二进制文件读取即可如您所述,hbase表如下所示
行键
<image-name>
cf:数据<binary-image-data>
有几种方法可以将数据摄取到hbase中。使用或不使用mapreduce。
使用
put
或者bulkload
.因为您有几GB的数据,所以最快的方法是使用mapreduce和
bulkload
. cloudera提供的有关批量加载的有用教程:http://blog.cloudera.com/blog/2013/09/how-to-use-hbase-bulk-loading-and-why/如何读取图像并将其提供给hadoop?
你可以用很多方法来做。我将描述使用mapreduce的方法,因为它更具可伸缩性。
实现的方法之一是编写自己的hadoop
recordreader
,它将向map
.但在你的情况下,我认为我们可以使用一个快捷方式,提供一个图像路径列表作为输入。在
map
,有点老套,但我希望你能理解。
同时阅读评论。如果要基于此设计系统,则需要考虑几个设计因素。
希望有帮助。