solr重建部分索引_索引重建 - 云数据库 HBase - 阿里云

全文索引功能目前已经全面升级,使用老架构的标准版全文索引服务即将下线,新用户请移步增强版全文索引功能

HBase for Solr索引重建

EMR实例准备

EMR rebuild solr index需要访问HBase的hdfs/solr/hbase,则需要保证EMR实例和云HBase实例满足在同一个VPC下。注意,如果没有请事先创建vpc专有网,可能会在EMR实例购买安装是没有可选的VPC。

购买安装EMR实例,与HBase同个可用区的实例,使用相同的 vpc id、vSwitch id。

联系“云HBase答疑”,开通EMR访问云HBase实例hdfs/solr/hbase权限

在HBase实例控制台中设置白名单,将EMR的ip列表设置到进去。

hbase-indexer-mr-2.0-job.jar到EMR机器上, 此包下载地址如下:

使用的是HBase1.x版本实例时,使用如下:

wget http://public-hbase.oss-cn-hangzhou.aliyuncs.com/installpackage/hbase-indexer-mr-2.0-job-for-hb1x.jar

jar包md5值为:800162f9d7508ee6f87e238d78ddd7ba

使用的是HBase2.x版本实例时,使用如下:

wget http://public-hbase.oss-cn-hangzhou.aliyuncs.com/installpackage/hbase-indexer-mr-2.0-job-for-hb2x.jar

jar包md5值为:c263a9b1825c6015a7a4848d4659fba7

本jar包在EMR-3.14.0 版本测试兼容,其他版本环境若运行有问题,请联系“云HBase答疑”客服

作业配置在EMR机器上,拷贝 cp -r /etc/ecm/hadoop-conf-2.7.2-X.Y.Z ./custom_conf

修改custom_conf/hdfs-site.xml,添加如下:

dfs.nameservices

hbase-cluster

dfs.client.failover.proxy.provider.hbase-cluster

org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider

dfs.ha.automatic-failover.enabled.hbase-cluster

true

dfs.ha.namenodes.hbase-cluster

nn1,nn2

dfs.namenode.rpc-address.hbase-cluster.nn1

master1-1:8020

dfs.namenode.rpc-address.hbase-cluster.nn2

master2-1:8020

咨询“云HBase答疑” master1-1、master2-1的hostname是什么,替换上述那么master1-1、master2-1。

添加custom_conf/hbase-site.xml文件,文件中添加属性如下:<?xml version="1.0"?>

hbase.zookeeper.quorum

zk1,zk2,zk3

其中zk1,zk2,zk3即为云HBase的zookeeper链接地址

咨询“云HBase答疑”,提出开放 EMR访问 某个云HBase实例需求,请求打开EMR的mapreduce访问云HBase权限

通过telnet master1-1 8020初步验证是否已经打开。其中master1-1替换为具体长名字的地址,参考zk地址中的master1-001中缀的地址。

验证配置运行hadoop —config custom_conf fs -ls hdfs://hbase-cluster/查看是否可以访问阿里云HBase的 hdfs目录。

运行作业

最后,运行如下命令启动重建索引作业:

hadoop--config custom_conf jar hbase-indexer-mr-2.0-job.jar \

--zk-host zk1,zk2,zk3/solr \

--collection collection001 \

--reducers0\

--hbase-indexer-zk=zk1,zk2,zk3 \

--hbase-table-name testtable \

--hbase-indexer-name testtable_index01

如果需要传入更多HBase 过滤参数,完整如下:

hadoop--config custom_conf jar hbase-indexer-mr-2.0-job.jar \

--zk-host zk1,zk2,zk3/solr \

--collection collection001 \

--reducers0\

--hbase-indexer-zk=zk1,zk2,zk3 \

--hbase-table-name test:index001 \

--hbase-indexer-name myindex002 \

--hbase-start-row startRow \

--hbase-end-row endRow \

--hbase-timestamp-format yyyy-MM-dd'T'HH:mm:ss.SSSZ \

--hbase-start-time startTime \

--hbase-end-time endTime \

--verbose

注意:”hbase-start-row”、”hbase-end-row” 使用hbase包中的Bytes.toStringBinary(byte[] startRow)和Bytes.toBytesBinary(String startRow) 进行 string <=> byte[]的转换,建议你写程序得到这个start/end row的string,然后填写到上面命令中。

“hbase-timestamp-format”即为SimpleDataFormat的format string参数,对应解析startTime/endTime的string得到时间。如果不提供”hbase-timestamp-format”, 则程序直接 Long.parse(startTime/endTime) 解析得到timestamp值。

案例如下:

hadoop--config custom_conf jar hbase-indexer-mr-2.0-job.jar \

--zk-host zk1,zk2,zk3/solr \

--collection collection001 \

--reducers0\

--hbase-indexer-zk=zk1,zk2,zk3 \

--hbase-table-name test:index001 \

--hbase-indexer-name myindex002 \

-D"mapred.child.java.opts=-Xmx2048m"\

--hbase-start-row00000000000000000000000000\

--hbase-end-row00000000000000000000000390\

--verbose

hadoop--config custom_conf jar hbase-indexer-mr-2.0-job.jar \

--zk-host zk1,zk2,zk3/solr \

--collection collection001 \

--reducers0\

--hbase-indexer-zk=zk1,zk2,zk3 \

--hbase-table-name test:index001 \

--hbase-indexer-name myindex002 \

--hbase-start-time1530780396659\

--hbase-end-time1531119958636\

--verbose

hadoop--config custom_conf jar hbase-indexer-mr-2.0-job.jar \

--zk-host zk1,zk2,zk3/solr \

--collection collection001 \

--reducers0\

--hbase-indexer-zk=zk1,zk2,zk3 \

--hbase-table-name test:index001 \

--hbase-indexer-name myindex002 \

--hbase-timestamp-format"yyyy-MM-dd'T'HH:mm:ss.SSSZ"\

--hbase-start-time2018-07-05T16:46:36.659+0800\

--hbase-end-time2018-07-09T15:05:58.636+0800\

--verbose

或者

--hbase-timestamp-format"yyyy-MM-dd'T'HH:mm:ss"\

--hbase-start-time2018-07-05T16:46:36\

--hbase-end-time2018-07-09T15:05:58\注意,这里启动MR任务运行过程中,不要人为修改索引属性,否则过程执行可能会失败。

作业超时处理

由于重建索引会对集群资源负载变大,如果作业太大hbase scan timeout时,可以适当调整timeout参数,如在hbase-site.xml添加如下:

如异常:org.apache.hadoop.hbase.client.ScannerTimeoutException: 98566ms passed since the last invocation, timeout is currently set to 60000

hbase.client.scanner.timeout.period

12000

如果碰到mapreduce task超时最终导致作业失败时,首先检查一下是否hbase原表有个别region太大,导致一个作业运行过长导致,可以手动split对应那个region。其次,可以mapred-site.xml添加如下配置适当增加超时参数。

如异常:AttemptID:attempt_1534767970337_0010_m_000032_0 Timed out after 1800 secs

mapreduce.task.timeout

1800000

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值