在HBase中存储base64编码的字符串

时间:2015-10-22 10:59:30

标签: java mongodb base64 hbase cloudera

我有一个非常具体的要求,即在Hbase列中存储PDF数据。数据源是Mongo DB,从中读取base64编码数据,我需要将其批量上传到Hbase表。

我意识到在base64编码的字符串中有很多" \ n"将整个字符串拆分成部分的字符。不确定是否是因为这个,但是当我按原样存储字符串时,使用put:

 put.add(Bytes.toBytes(ColFamilyName), Bytes.toBytes(columnName), Bytes.toBytes(data.replaceAll("\n","").toString()));

它只存储整个编码字符串的第一行。例如:

如果实际内容是这样的: " JVBERi0xLjQKJaqrrK0KNCAwIG9iago8PAovQ3JlYXRvciAoQXBhY2hlIEZPUCBWZXJzaW9uIDEu " +                 " MSkKL1Byb2R1Y2VyIChBcGFjaGUgRk9QIFZlcnNpb24gMS4xKQovQ3JlYXRpb25EYXRlIChEOjIw \ n" +                 " MTUwODIyMTIxMjM1KzAzJzAwJykKPj4KZW5kb2JqCjUgMCBvYmoKPDwKICAvTiAzCiAgL0xlbmd0 \ n" +

只存储第一行: JVBERi0xLjQKJaqrrK0KNCAwIG9iago8PAovQ3JlYXRvciAoQXBhY2hlIEZPUCBWZXJzaW9uIDEu

列中的

。即使在尝试删除" \ n"手动它是相同的输出。

有人可以指导我在正确的方向吗?

2 个答案:

答案 0 :(得分:1)

目前,我还在开发Base64编码。根据我的理解,你应该尝试使用     org.apache.hadoop.hbase.util.Base64.encodeBytes(byte[] source, int option) 可以使用DONT_BREAK_LINES作为选项的方法。 如果一切正常,请告诉我。

答案 1 :(得分:0)

管理解决它。问题是从MongoDB Source读取Base64编码数据时。从Mongo DB文档DBObject中读取数据:

  

jsonObj.get( “receiptContent”)。的toString()。的replaceAll( “\ n” 个, “”)

并将其存储在Hbase中。即使从Hue HBase UI浏览器,我现在也可以看到PDF内容。