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

Store base64 encoded string in HBase

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

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

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

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

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

它只存储第一行: JVBERi0xLjQKJaqrrK0KNCAwIG9iago8PAovQ3JlYXRvciAoQXBhY2hlIEZPUCBWZXJzaW9uIDEu

列中。即使在尝试手动删除“\n”之后,它也是相同的输出。

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

目前也在做Base64编码。据我了解,您应该尝试使用 org.apache.hadoop.hbase.util.Base64.encodeBytes(byte[] source, int option) DONT_BREAK_LINES 可以用作选项的方法。 如果这工作正常,请告诉我。

设法解决了。问题出在从 MongoDB Source 读取 Base64 编码数据时。从 Mongo 数据库文档 DBObject 中读取数据为:

jsonObj.get("receiptContent").toString().replaceAll("\n","")

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