使用HBase2ES工具迁移HBase数据
操作场景
该操作指导工程师在Elasticsearch正常运行时,使用TableScanMR并发和HBase直接扫描方式从HBase中获取数据并导入到Elasticsearch集群中。
前提条件
- 集群正常运行。
- HBase数据已准备好。
- 已安装HBase客户端,且客户端节点与Elasticsearch集群互通。
- 已安装集群客户端,例如安装目录为“/opt/client”。
操作步骤
修改配置文件
- 替换xml配置文件。
切换到HBase客户端安装目录,将HBase客户端中conf目录下的“core-site.xml”、“hbase-site.xml”、“hdfs-site.xml”、“mapred-site.xml”、“yarn-site.xml”文件拷贝到“/opt/client/Elasticsearch/tools/elasticsearch-data2es/hbase2es/conf”目录下。
xml文件是访问HBase/Mapreduce必用的工具配置文件。
- 在Manager界面选择“集群 > 待操作集群的名称 > 集群属性”,确认集群的认证模式是否为安全模式。
- 创建用户。
- 在Manager界面选择 。
- 填写用户名,例如test。基于用户和角色鉴权模式下,将test加入用户组“elasticsearch”和“supergroup”,选择“主组”为“supergroup”,并绑定角色“Manager_administrator”取得权限。基于Ranger鉴权模式下,在Ranger中为test用户添加Elasticsearch访问权限策略,具体操作参考添加Elasticsearch的Ranger访问权限策略。
- 单击“确定”。
- 选择“系统 > 权限 > 用户”,选择新创建用户后的“更多 > 下载认证凭据”,选择集群信息后单击“确定”,下载文件。
- 将解压压缩包后得到的“user.keytab”和“krb5.conf”文件上传到“/opt/client/Elasticsearch/tools/elasticsearch-data2es/hbase2es/conf”目录下。
- 以root用户登录HBase客户端所在节点。
- 执行以下命令修改jaas.conf文件中的“principal”参数。
cd /opt/client/Elasticsearch/tools/elasticsearch-data2es/hbase2es/conf
vi jaas.conf
如下所示,test是用户名,即修改为与espara.properties的principal配置一致。Client { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true keyTab="/opt/client/Elasticsearch/tools/elasticsearch-data2es/hbase2es/conf/user.keytab" principal="test@<系统域名>" useTicketCache=false storeKey=true debug=true; };
用户可登录Manager,选择“系统 > 权限 > 域和互信”,查看“本端域”参数,即为当前系统域名。
- 执行以下命令修改espara.properties参数配置文件:
vi espara.properties
参考表1进行配置,配置样例如下:
#para for both index and search esServerHost=ip1:port1,ip2:port2,ip3:port3 index=es_index isSecurity=true addindex=0 numberofshards=6 numberofreplicas=2 needsource=false #para for hbase principal=test HBase_table=hbase_table familyName=info splitFamily=@ splitColum=_ splitField=& #1:string 2:long 3:binary 4:byte 5:double 6:float 7:int #exmple 20&1_30&1_40&1@name&1_age&7_addr&1&| qualifier=name&1_age&7_address&1&| outputDir=/tmp/out1 batch_size=20000 hbasescannum=20000 #hbase rowkey encode type, 0:none 1:Base64 encodeType=0 threadNum=1 #Log for Test, 0:on 1:off isTestLogOn=1 #json file max length for MR, unit:M max_content_length=1024
表1 espara.properties参数配置说明 参数
默认值
说明
esServerHost
ip1:port1,ip2:port2,ip3:port3
数据从HBase导入到Elasticsearch中的实例配置。便于负载均衡,该参数配置了多组IP及端口号,格式为“IP:端口”,多组配置之间以英文逗号分隔。IP为Elasticsearch集群任意节点业务平面IP地址,端口号为该节点对外http(s)端口号。
IP地址查看方法如下:登录Manager后选择“集群 > 待操作集群的名称 > 服务 > Elasticsearch > 实例”,可查看到集群运行的实例IP地址。
端口号查看方法如下:登录Manager后选择“集群 > 待操作集群的名称 > 服务 > Elasticsearch > 配置 > 全部配置”,在搜索框中输入“SERVER_PORT”,可查看到对应的端口号。端口号范围24100~24149。
index
es_index
Elasticsearch索引名称。允许同时配置多个索引,以英文逗号分隔。客户需要按照自己的要求建立索引,若没有可按照默认索引。可登录集群内任意Elasticsearch节点使用curl命令查看Elasticsearch中所建的索引。查看索引curl命令使用方法,可参考Linux下curl命令的使用章节。
isSecurity
true
Elasticsearch集群是否是安全模式。true表示安全模式,false表示普通模式。
addindex
0
若采用默认mapping,设为大于0的值。实际使用场景中建议设为0,用户使用自己的mapping。
numberofshards
6
addindex大于0时设置,表示主分片数。
numberofreplicas
2
addindex大于0时设置,表示副本分片数。
needsource
false
addindex大于0时设置,是否启用_source。
principal
test
鉴权用户名。创建该用户时为其添加elasticsearch、supergroup用户组。
HBase_table
hbase_table
HBase表名。允许同时配置多个表,以英文逗号分隔。
familyName
info
列族名,允许同时配置多个列族名,以英文逗号分隔。
splitFamily
@
列族分隔符,用户可自定义,默认值@。
splitColum
_
列名分隔符,用户可自定义,默认值_。
splitField
&
字段与字段类型分隔符,用户可自定义,默认值&。
qualifier
name&1_age&7_addr&1&|
列名,允许同时配置多个列族的列名。默认情况下,多个列族以@分隔,多个列名以下划线分隔,字段与字段类型以&分隔。请根据splitFamily、splitColum、splitField实际配置设置。
列族个数需要和familyName配置的列族个数一致。
若为string类型,允许配置分隔符。例如addr&1&|,假设HBase的addr列存放的是字符串“city1|city2”,则索引到Elasticsearch数据中是以“|”符号分隔的[“city1”,“city2”]数组。
支持string、long、binary、byte、double、float和int数据类型。在本版本中,用数字定义数据类型,1表示string,2表示long,3表示binary,4表示byte,5表示double,6表示float,7表示int类型。
格式为:字段名称&字段类型[&分隔符]。示例20&1_30&1_40&1@name&1_age&7_addr&1&|表示qualifier包含20&1_30&1_40和name&1_age&7_addr&1&|两个列族的列名配置,分别与familyName定义的info和info1两个列族对应;info列族包含20、30、40三个列,info1包含name、age、addr三个列。20、30、40以及name、addr是string类型,age是int类型。
说明:splitFamily、splitColum、splitField三者之间定义的分隔符不可重复,且不能与HBase表中的列族、列名、字段中设置的分隔符重复。
outputDir
/tmp/out1
HDFS路径。TableScanMR方式,通过http方式写数据失败时,数据内容写入HDFS。若有多个table,必须配置多个路径,以英文逗号分隔,否则数据会被覆盖。
batch_size
20000
Elasticsearch批量写任务个数。
hbasescannum
20000
HBase scan缓存条数。如果设置为0,将使用默认值100000,请确保该项的值不大于HBase的配置项hbase.client.scanner.caching.max,该配置默认值为2147483647。
encodeType
0
HBase rowkey编码方式。0表示none,无编码;1表示Base64编码。
threadNum
1
线程池大小,线程池大小设置太大,同时写Elasticsearch的并发量过多会导致http请求read time out。使用TableScanMR方式时,建议设为1,顺序执行。
isTestLogOn
1
是否开启scan调试日志,hbasescan扫描时可以选择打印或不打印错误日志。0表示打印日志,1表示不打印日志。
max_content_length
1024
TableScanMR方式生成文件大小配置,单位:MB。
- 当配置多表时,上述配置的列族、列名字段需确保多个表均存在。即多个表使用相同的familyName、qualifier。
- 当使用HBase直接扫描,index/HBase_table配置项多表时顺序、个数需一一对应。
- 当使用TableScanMR方式时,index/HBase_table/outputDir配置项多表时顺序、个数需一一对应。
扫描HBase数据导入到Elasticsearch中
- 工具包目录下扫描并导入数据。
- 通过curl命令查看索引确认数据是否导入,例如:
curl命令的使用请参考Linux下curl命令的使用。
- 数据导入完成后,若个别索引导入失败,会在数据导入工具包sbin目录中新生成“json”目录,执行sbin目录下的input.sh脚本单独导入失败的数据。
cd /opt/client/Elasticsearch/tools/elasticsearch-data2es/hbase2es
./sbin/input.sh
集群客户端的“Elasticsearch/tools/elasticsearch-data2es/hbase2es/logs”目录内的日志文件,可以查看导入过程的日志信息。