我需要索引存储在HBase行中的数据。显而易见的解决方案是通过复制使用 Lily HBase 索引器并将结果推送到 SOLR 集合中。
我问题的根源是我的HBase行中有一些"短二进制"列,如MD5,CRC64,UUID等。当然,我将它们存储为原始byte[]
表示形式,这为我节省了大量空间。但是我需要根据存储实际表示的一些此类标准来索引数据。如何以正确的方式做到这一点?
- 目前,我在 SOLR 中看到的只有
BinaryField
适当的 SOLR 字段类型。但它要求 HBase 列内容采用 Base64 编码,而 Lily HBase 索引器看起来不像是支持此功能的解决方案。 - 我通过 Lily HBase 索引器看到的唯一选项是将列映射配置为
bigDecimal
。在这种情况下是否适用?据我了解string
本身不是一种选择。 - 如果我使用MorphLine,我可以基于Cloudera
extractHBaseCells
命令并键入byte[]
承诺只是透明管道。但是我应该如何处理提取的列数据来接收 SOLR 二进制字段? - 映射后在索引中保存此类二进制字段的字典顺序怎么样?我会考虑选择将
byte[]
映射为 2 位十六进制数字的序列,但有没有一些好方法以这种方式映射?
收到的工作解决方案:
- 莉莉 HBase 索引器配置为
row
映射类型。结果是文档 ID(唯一键(是 HBase 行键。 - 在这种情况下,包含二进制数据的 HBase 行键基于 Lily HBase 索引器配置进行格式化,其中唯一键格式化程序设置为"com.ngdata.hbaseindexer.uniquekey.HexUniqueKeyFormatter"。这导致文档 ID ('id'( SOLR 字段作为与行键二进制表示匹配的小写十六进制数字字符串序列。可能会更好,但至少可以按预期工作。注意 'id' SOLR 字段在这里是字符串类型。
- 二进制单元格由Morphline根据Cloudera Search
extractHBaseCells
命令进行转换。使用类型byte[]
的映射,恰好生成了 Base64 编码字段。
更新 1:
- 添加了 HBase 索引器
HBASE_INDEXER_CLASSPATH
环境配置和其他类扩展com.ngdata.hbaseindexer.uniquekey.BaseUniqueKeyFormatter
,该现在对唯一键执行 Base64 编码,以便可以将其声明为BinaryField
。这终于完成了我要求索引器做的所有事情。因此,现在 SOLR 使用 Base64 编码的"id"字段和从其他所需列映射的字段接收正确的"更新"请求。
更新 2:
- 在玩够了
solr.BinaryField
之后,我对我需要按原样索引的所有内容都solr.StrField
了。对于二进制字节字符串(如哈希(,它们被转换为小写十六进制数字序列,每个字节 2 位。也许在性能方面不是最好的,但看起来最便携和灵活。对于"刚刚存储"的字段,我已经有 Base64 编码器,但如果我不索引它们,我就不会在 SOLR 中输入字段。