Hbase二级索引+CDH+Lily
1.更改表结构,允许复制
已存在的表
disable 'tableName'
alter 'tableName',{NAME =>'fn', REPLICATION_SCOPE =>1}
enable 'tableName'
不存在的表
create ‘table‘,{NAME =>‘cf‘, REPLICATION_SCOPE =>1}
#其中1表示开启replication功能,0表示不开启,默认为0
2.创建相应的SolrCloud集合
接下来在安装有Solr的机器上运行
这里得路径和用户名都可以自己定义
# 生成实体配置文件:solrctl instancedir --generate /opt/hbase-indexer/index1# index1 意思代表用户
此时/opt/hbase-indexer/index1目录下会有个conf文件夹,我们修改下面得schema.xml文件.
在最下面新加一个字段
<field name="HBase_Indexer_Test_cf1_name" type="string" indexed="true" stored="true"/>
属性解析:
name:这里的name是自定义,但是后面要使用到,要和后面的Morphline.conf文件中的outputField属性对应。
type:字段类型
indexed:是否建立索引
stored:是否存储
注意:这里name字段它对应了我们后续需要修改Morphline.conf文件中的outputField属性。因此可以看成是hbase中需要创建索引的值。因此我们建议将其与表名和列族结合,格式建议如下:
HBase_Indexer_ZDTable_fn_name
Hbase_indexer_表名_列簇_列名
再修改solrconfig.xml,找到下面的配置将false改为true,这个是硬提交,会影响性能
<autoCommit><maxTime>${solr.autoCommit.maxTime:60000}</maxTime><openSearcher>true</openSearcher></autoCommit>
3.创建 collection实例并将配置文件上传到 zookeeper:
solrctl instancedir --create index1 /opt/hbase-indexer/index1
4.上传到 zookeeper之后,其他节点就可以从zookeeper下载配置文件。接下来创建 collection:
solrctl collection --create index1如果希望将数据分散到各个节点进行存储和检索,则需要创建多个shard,需要使用如下命令solrctl collection --create bqjr -s 7-r 3-m 21其中-s表示设置Shard数为7,-r表示设置的replica数为3,-m表示最大shards数目(7*3)
5.创建 Lily HBase Indexer 配置
[root@test119 index1]# cat morphline-hbase-mapper.xml
<?xml version="1.0"?>
<!-- table:需要索引的HBase表名称-->
<!-- mapper:用来实现和读取指定的Morphline配置文件类,固定为MorphlineResultToSolrMapper-->
<indexer table="zh_ams_ns:zhongda_custom_task_cp" mapper="com.ngdata.hbaseindexer.morphline.MorphlineResultToSolrMapper" read-row="never" >
<!--param中的name参数用来指定当前配置为morphlineFile文件 -->
<!--value用来指定morphlines.conf文件的路径,绝对或者相对路径用来指定本地路径,如果是使用Cloudera Manager来管理morphlines.conf就直接写入值morphlines.conf"--><param name="morphlineFile" value="morphlines.conf"/>
<!--value="ZDTableMap",这里test3Map是自定义,接下来要使用。其他的mapper,param name等属性默认即可--><param name="morphlineId" value="ZDTableMap"/>
</indexer>
6.配置Morphline
通过CM页面进入到Key-Value Store Indexer的配置页面,里面有一个Morphlines文件。修改它:
修改完后重启Key-Value Store服务
SOLR_LOCATOR : {# Name of solr collectioncollection : hbaseindexer# ZooKeeper ensemblezkHost : "$ZK_HOST"
}morphlines : [
{
#与morphline-hbase-mapper中value相同
id : ZDTableMap
importCommands : ["org.kitesdk.**", "com.ngdata.**"]commands : [ {extractHBaseCells {mappings : [{inputColumn : "fn:name"outputField : "HBase_Indexer_ZDTable_fn_name" type : string source : value}]}}{ logDebug { format : "output record: {}", args : ["@{}"] } }
]
}
]
注:
id:表示当前morphlines的名称,与上一步的value="test3Map"要一致
importCommands:需要引入的命令包地址
extractHBaseCells:该命令用来读取HBase列数据并写入到SolrInputDocument对象中,该命令必须包含零个或者多个mappings命令对象。
mappings:用来指定HBase列限定符的字段映射。
inputColumn:需要写入到solr中的HBase列字段。值包含列族和列限定符,并用‘ : ’分开。其中列限定符也可以使用通配符*来表示,譬如可以使用c1:*表示读取只要列族为data的所有hbase列数据,也可以通过c1:na*来表示读取列族为c1列限定符已na开头的字段值.
outputField:用来表示morphline读取的记录需要输出的数据字段名称,该名称必须和solr中的schema.xml文件的field节点自定义的name名称保持一致,否则写入不正确
type:用来定义读取HBase数据的数据类型,HBase中的数据都是以byte[]的形式保存,但是所有的内容在Solr中索引为text形式,所以需要一个方法来把byte[]类型转换为实际的数据类型。type参数的值就是用来做这件事情的。现在支持的数据类型有:byte,int,long,string,boolean,float,double,short和bigdecimal。当然你也可以指定自定的数据类型,只需要实现com.ngdata.hbaseindexer.parse.ByteArrayValueMapper接口即可
source:用来指定HBase的KeyValue那一部分作为索引输入数据,可选的有‘value’和'qualifier',当为value的时候表示使用HBase的列值作为索引输入,当为qualifier的时候表示使用HBase的列限定符作为索引输入
7.注册 Lily HBase Indexer Configuration 和 Lily HBase Indexer Service
hbase-indexer add-indexer \
--name ZDindexer \
--indexer-conf /opt/hbase-indexer/index1/morphline-hbase-mapper.xml --connection-param solr.zk=test110:2181,test115:2181,test119:2181/solr \
--connection-param solr.collection=index1 \
--zookeeper test110:2181,test115:2181,test119:2181
运行hbase-indexer list-indexers查看添加成功,
此时新增数据已经可以通过solr查询
8.批量同步索引
在运行命令的目录下必须有morphlines.conf文件,执行
find / |grep morphlines.conf$
一般我们选择最新的那个process
cd 进入目录
hadoop --config /etc/hadoop/conf \
jar /opt/cloudera/parcels/CDH/lib/hbase-solr/tools/hbase-indexer-mr-1.5-cdh5.14.0-job.jar \
--conf /etc/hbase/conf/hbase-site.xml \
--hbase-indexer-file /opt/hbase-indexer/index1/morphline-hbase-mapper.xml \
--zk-host test110:2181,test115:2181,test119:2181/solr \
--collection index1 \
--reducers 0 \
--go-live
Hbase二级索引+CDH+Lily相关推荐
- CDH 6 安装 Hbase 二级索引 Solr + Key-Value Store Indexer
目录 一.集群安装Solr + Key-Value Store Indexer 二.创建Hbase二级索引 1.更改表结构,允许复制 2.创建相应的SolrCloud集合 3.创建 collecti ...
- 基于Solr的Hbase二级索引
关于Hbase二级索引 HBase 是一个列存数据库,每行数据只有一个主键RowKey,无法依据指定列的数据进行检索.查询时需要通过RowKey进行检索,然后查看指定列的数据是什么,效率低下.在实际应 ...
- 使用solr构建hbase二级索引
使用solr构建hbase二级索引 @(HBASE)[hbase, solr] 使用solr构建hbase二级索引 一概述 一业务场景描述 二技术方案 1技术方案一 2技术方案二 3关于索引的建议 二 ...
- hbase组合rowkey_「从零单排HBase 11」HBase二级索引解决方案
HBase一个令人惋惜的地方,就是不支持二级索引.因此,社区有了很多补充方案来填补HBase的二级索引能力的缺陷. 今天,我们就来看看有哪些二级索引方案,通过对比各个方案的优缺点,并结合我们的具体场景 ...
- 基于ES的HBase二级索引方案
HBase不支持多条件查询,不提供二级索引,难以满足用户对检索功能多样性和高效率两方面的需求.由索引模块的需求分析可知,本文解决通过,提出数据与索引的分离,利用HBase数据库的存储模式灵活多变,容纳 ...
- 华为HBase 二级索引调研
1.Overall Solution 解决思想: 一个user table对应一个index table index的创建与更新全部在RS端的cp-processor里实现 核心思想:一个actual ...
- (转)HBase二级索引与Join
二级索引与索引Join是Online业务系统要求存储引擎提供的基本特性.RDBMS支持得比较好,NOSQL阵营也在摸索着符合自身特点的最佳解决方案. 这篇文章会以HBase做为对象来探讨如何基于Hba ...
- 阿里云EMR异步构建云HBase二级索引
一.非HA EMR构建二级索引 云HBase借助Phoenix实现二级索引功能,对于Phoenix二级索引的详细介绍可参考https://yq.aliyun.com/articles/536850?s ...
- Hbase 二级索引 Solr int字段排序问题 can not sort on multivalued field
Hbase Solr 同步二级索引后,进行int字段排序时报错 报错如下 {"responseHeader":{"zkConnected":true," ...
最新文章
- android修改视频聊天帧率,Android基于腾讯云实时音视频仿微信视频通话最小化悬浮(4)...
- Asp.net(c#)实现多线程断点续传
- Ubuntu18.04中pyhton默认版本从2.7换为3.x
- mongodb分片介绍—— 基于范围(数值型)的分片 或者 基于哈希的分片
- [codevs3044][POJ1151]矩形面积求并
- Qt之进程间通信(IPC)
- 快速了解 UML 类图
- 2020CCPC(威海) - Labyrinth(bfs+思维)
- 超级智能玩具《小小机器人》首发|全新50种玩法,创造力之源
- 多线程中ThreadLocal的使用
- FIREDAC连接SQLITE乱码的解决
- JPA的继承 OOD和关系数据库的 纽带
- 设计模式12_外观模式
- 阿里技术专家玄惭回忆:我是如何自学技术拿到阿里offer
- logging日志输出模块
- JAVA web App扫码登录
- 自动选择阈值--最大类间方差法(OTSU)原理及matlab实现
- python 官网下载+安装(Mac)
- ChatGPT讲故事,DALLE-2负责画出来!两大AI合作出绘本!
- 【MRI】GRAPPA (GeneRalized Autocalibrating Partially Parallel Acquisitions) 算法 仿真实验与原理剖析 (Matlab 实现)
热门文章
- python的六大数据类型中可以改变_在python中更改数组的数据类型
- 队列处理高并发_高并发场景下缓存处理的一些思路
- 数字加密c语言程序_国外程序员整理的 C++ 资源大全
- sql statements_Postgresql监控sql模块之pg_stat_statements模块--部署篇
- 粒子群算法tsp java_粒子群算法解决TSP问题
- java语言的未来将去向何方?
- c语言 指针_C 语言指针详解
- 操作系统中的死锁问题
- ktor框架用到了netty吗_Ktor-构建异步服务器和客户端的 Kotlin 框架
- python操作redis集群_python 连接管理作redis集群