Hbase二级索引设计方案ES244.docx
- 文档编号:13743863
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:16
- 大小:327KB
Hbase二级索引设计方案ES244.docx
《Hbase二级索引设计方案ES244.docx》由会员分享,可在线阅读,更多相关《Hbase二级索引设计方案ES244.docx(16页珍藏版)》请在冰点文库上搜索。
Hbase二级索引设计方案ES244
1方案介绍
1.1概述
1.1.1Hbase
Hbase是运行在Hadoop上的NoSQL数据库,它是一个分布式的和可扩展的大数据仓库,也就是说HBase能够利用HDFS的分布式处理模式,并从Hadoop的MapReduce程序模型中获益。
除去Hadoop的优势,HBase本身就是十分强大的数据库,它能够融合key/value存储模式带来实时查询的能力,以及通过MapReduce进行离线处理或者批处理的能力。
总的来说,Hbase能够让你在大量的数据中查询记录,也可以从中获得综合分析报告。
然而,随着在HBase系统上应用的驱动,人们发现Global-Rowkey-Indexing不再满足应用的需求。
单一的通过Rowkey检索数据的方式,不再满足更多应用的需求,由于hbase基于行健有序存储,在查询时使用Rowkey十分高效,然后想要实现关系型数据库那样可以随意组合的多条件查询、查询总记录数、分页等就比较麻烦了,所以需要我们自己来实现二级索引来满足业务的复杂查询,及实时检索。
1.1.2Elasticsearch
Elasticsearch是一个实时的分布式搜索和分析引擎。
它可以帮助你用前所未有的速度去处理大规模数据。
它可以用于全文搜索,结构化搜索以及分析;Elasticsearch是一个建立在全文搜索引擎ApacheLucene基础上的搜索引擎,可以说Lucene是当今最先进,最高效的全功能开源搜索引擎框架。
Elasticsearch并不仅仅是Lucene这么简单,它不但包括了全文搜索功能,还可以进行以下工作:
●分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
●实时分析的分布式搜索引擎。
●可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。
1.1.3HbaseObserver
HBase0.92版本后推出了Coprocessor--协处理器,一个工作在Master/RegionServer中的框架,能运行用户的代码,从而灵活地完成分布式数据处理的任务。
Coprocessor包含两个组件,一个是EndPoint(类似关系型数据库的存储过程),用以加快特定查询的响应,另一个就是Observer(类似关系型数据库的触发器)。
Observer也分为几个类型,其中RegionObserver提供了一组表数据操作的钩子函数,覆盖了Get、Put、Scan、Delete等操作(通常有pre和post两种情况,表示在操作发生之前或发生之后),我们可以通过重载这些钩子函数,利用RegionServer实现特定的数据处理需求。
基于RegionObserver的钩子函数,我们可以覆盖Put及Delete方法来实现Hbase和ES直接的数据同步。
1.2方案目标
1、实现对HBase高性能的围检索
2、保证数据的低冗余
3、保持数据的一致性
1.3方案流程
1、数据进入HBase时,利用Observer同步进入ES索引库;
2、客户端根据查询条件,利用ES提供的JavaAPI对ES发起查询请求;
3、ES返回符合条件的RowKey;
4、客户端再根据RowKey去HBase获取数据;
5、最后HBase返回结果集。
2ElasticSearch安装部署
2.1安装准备
2.1.1服务器准备
为搭建ElasticSearch集群,准备了三台服务器,主机IP分别为:
192.168.1.104Centos6.5
192.168.1.105Centos6.5
192.168.1.106Centos6.5
2.1.2新建用户
ES不支持root用户启动,分别登录服务器新建es用户,并把以下安装包上传到/home/es文件夹下:
新建用户并设置密码,然后给用户文件夹所有权:
useraddes
passwdes
chownes/home/es
1、jdk-7u71-linux-x64.tar.gz
2、elasticsearch-2.4.4.tar.gz
3、kibana-4.6.4-linux-x86_64.tar.gz
4、elasticsearch-analysis-ik-1.10.4.zip
2.1.3调整系统参数
2.1.3.1核参数调整
vim/etc/sysctl.conf
#增加下面的容
fs.file-max=65536
vm.max_map_count=262144
#执行命令
sysctl-p
2.1.3.2资源参数调整
vim/etc/security/limits.conf
#修改
*softnofile32768
*hardnofile65536
*softnproc2048
*hardnproc4096
2.1.3.3调整线程数
vim/etc/security/limits.d/90-nproc.conf
找到如下容:
*softnproc1024
#修改为
*softnproc2048
2.2JDK安装
登录es用户,进入/home/es文件夹,解压JDK安装包
cd/home/es
tar-zxvfjdk-7u71-linux-x64.tar.gz
vim/etc/profile
#增加环境变量
exportJAVA_HOME=/opt/jdk1.7/jdk1.7.0_71
exportCLASSPATH=$CLASSPATH:
$JAVA_HOME/lib/*.jar
exportPATH=$JAVA_HOME/bin:
$PATH
注:
ES2.x需要1.7JDK支持,官网下载1.7_71版本JDK。
2.3ES安装及配置
2.3.1解压缩
cd/home/es
tar-zxvfelasticsearch-2.4.4.tar.gz
2.3.2配置
vim/home/es/elasticsearch-2.4.4/config/elasticsearch.yml
注:
cluster.name集群名称,各个节点的值必须一致
node.name节点名称,各个节点的值不能一致
network.host本机ip地址
http.port提供http的端口号
discovery.zen.ping.unicast.hosts
设置master节点的初始列表,通过这些节点自动发现新加入集群的节点
discovery.zen.minimum_master_nodes
设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点,官方推荐设置成N/2+1,N是集群中master节点的数量。
#修改ES存
vim/home/es/elasticsearch-2.4.4/bin/elasticsearch
#ES_HEAP_SIZE=8g
注:
调整存大小最好不要超过总资源一半,也不要超过32G
2.3.3启动及验证
cd/home/es/elasticsearch-2.4.4/bin
./elasticsearch#控制台启动
./elasticsearch–d#后台启动
看到如下信息则为启动成功:
在浏览器中输入:
http:
//192.168.1.105:
9200/
返回如下结果:
2.3.4集群验证
所有节点启动之后,浏览器访问:
http:
//192.168.1.105:
9200/_cluster/health?
pretty=true
如果返回以下结果说明集群状态正常
2.4Head插件安装
2.4.1简介
elasticsearch-head是一个elasticsearch的集群管理工具,通过head可以查看集群几乎所有信息,还能进行简单的搜索查询,观察自动恢复的情况等等。
2.4.2安装
cd/home/es/elasticsearch-2.4.4/bin
./plugininstallmobz/elasticsearch-head
重启elasticsearch,
然后在浏览器输入:
http:
//192.168.1.105:
9200/_plugin/head/
可以查看显示效果。
如下图
2.5Marvel插件安装
2.5.1简介
Marvel插件:
在簇中从每个节点汇集数据。
这个插件必须每个节点都得安装。
Marvel是Elasticsearch的管理和监控工具,在开发环境下免费使用。
它包含了一个叫做Sense的交互式控制台,使用户方便的通过浏览器直接与Elasticsearch进行交互。
2.5.2安装(每个节点)
cd/home/es/elasticsearch-2.4.4/bin
./plugininstalllicense
./plugininstallmarvel-agent
2.6Kibana安装
2.6.1简介
kibana插件提供了Marvel监控的UI界面。
kibana是一个与elasticsearch一起工作的开源的分析和可视化的平台;可以查询、查看并与存储在elasticsearch索引的数据进行交互操作;能执行高级的数据分析,并能以图表、表格和地图的形式查看数据;基于浏览器的接口使我们能够快速的创建和分享显示elasticsearch查询结果实时变化的仪表盘。
2.6.2安装
cd/home/es/
tar-zxvfkibana-4.6.4-linux-x86_64.tar.gz
vim/home/es/kibana-4.6.4-linux-x86_64/config/kibana.yml
#修改server.host,否则远程无法访问
#修改es访问路径
cd/home/es/kibana-4.6.4-linux-x86_64/bin
#安装Marvel插件
./kibanaplugin--installelasticsearch/marvel/latest
#安装sense插件
./kibanaplugin--installelastic/sense
#启动kibana
./kibana
2.6.3验证
浏览器访问:
http:
//192.168.1.105:
5601/,可以看到Kibana以及他的插件
2.7IK分词器安装(每个节点安装)
cd/home/es/
unzipelasticsearch-analysis-ik-1.10.4.zip-d/home/es/elasticsearch-2.4.4/plugins/ik
vim/home/es/elasticsearch-2.4.4/config/elasticsearch.yml
#在文件最后添加index.analysis.analyzer.ik.type:
"ik"
#然后启动ES验证IK,看到如下信息IK安装完成
2.7.1验证分词效果
在head中输入
_analyze?
analyzer=ik&pretty=true&text=helloworld,中华人民国
3数据同步程序配置
3.1多数据源的数据同步
多个数据源中的数据同步问题,大概有三种解决方式:
1、客户端双写,分别将数据写入两个数据源(同步、异步)
2、主数据源在收到数据后推给辅数据源(同步、异步)
3、辅数据源从主数据源中拉取数据(轮训、监听,全量、增量)
具体到HBase同步到Elasticsearch时,后两种方式具体对应的方案就是HBase的Observer和Elasticsearch的River,这两种方式都可以在数据源中嵌入自己的业务逻辑,并且依托于集群可以轻松地保证高可用。
但是,要使用River高效的同步数据,必须要有一种拉取增量数据的方式,而在HBase中这并没有很好的方法实现,所以采用Observer的方法。
3.2创建索引mapping
在sense中输入:
PUTtest
{
"settings":
{
"analysis":
{
"analyzer":
{
"ik":
{
"tokenizer":
"ik"
}
}
}
},
"mappings":
{
"doc":
{
"_source":
{
"enabled":
true
},
"properties":
{
"title":
{
"type":
"string"
},
"content":
{
"type":
"string",
"analyzer":
"ik"
},
"create_time":
{
"type":
"date",
"format":
"yyyy-MM-ddHH:
mm:
ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
}
3.3编码实现
Observer的Java实现只需要继承BaseRegionObserver的基类,并重载postPut和postDelete两个函数。
考虑到未来HBase的写入会比较频繁,我们利用ElasticSearch的BulkAPI做了一个缓冲池:
不是每次提交HBase数据都触发索引操作,而是积累到一定数量或者到达一定时间间隔才去批量操作,从而降低了RegionServer的网络I/O压力。
3.4Observer的部署
Observer提供了两种部署方式:
●全局部署。
把jar包的路径加入HBASE_CLASSPATH并且修改hbase-site.xml,这样Observer会对每一个表都生效。
●单表部署。
通过HBaseShell修改表结构,加入coprocessor信息。
显然后一种更加灵活。
通过HBaseShell安装Observer的详细步骤如下:
1、把Java项目打包为jar包,上传到HDFS的特定路径
2、进入HBaseShell,disable你希望加载的表
3、通过指令激活Observer:
hdfsdfs-mkdir/observers#新建文件夹
hdfsdfs-putobserver-1.1-SNAPSHOT-jar-with-dependencies.jar/observers#上传jar包
hbaseshell#进入hbase命令
create'test','doc'
disable'test'
alter'test',{NAME=>'doc',VERSIONS=>'20',COMPRESSION=>'LZO'}
#挂载协处理器
alter'test',METHOD=>'table_att','coprocessor'=>'hdfs:
///observers/observer-1.1-SNAPSHOT-jar-with-dependencies.jar|.gavin.observer.DataSyncObserver|1001|es_cluster=es-test,es_type=doc,es_index=test,es_port=9300,es_host=192.168.1.105'
enable'test'
3.5测试
put‘test’,’111’,’doc:
title’,’test111’
#连续向hbase添加数据,观察es数据变化
4常见问题汇总
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Hbase 二级 索引 设计方案 ES244