更新时间:2019-12-16 17:26
EMR rebuild solr index需要访问HBase的hdfs/solr/hbase,则需要保证EMR实例和云HBase实例满足在同一个VPC下。注意,如果没有请事先创建vpc专有网,可能会在EMR实例购买安装是没有可选的VPC。
咨询“云HBase答疑” master1-1、master2-1的hostname是什么,替换上述那么master1-1、master2-1。
<property>
<name>dfs.nameservices</name>
<value>hbase-cluster</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.hbase-cluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled.hbase-cluster</name>
<value>true</value>
</property>
<property>
<name>dfs.ha.namenodes.hbase-cluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hbase-cluster.nn1</name>
<value>master1-1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hbase-cluster.nn2</name>
<value>master2-1:8020</value>
</property>
其中zk1,zk2,zk3即为云HBase的zookeeper链接地址
<?xml version="1.0"?>
<configuration>
<property>
<name>hbase.zookeeper.quorum</name>
<value>zk1,zk2,zk3</value>
</property>
</configuration>
咨询“云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 \
--reducers 0 \
--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 \
--reducers 0 \
--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值。
案例如下:
注意,这里启动MR任务运行过程中,不要人为修改索引属性,否则过程执行可能会失败。
hadoop --config custom_conf jar hbase-indexer-mr-2.0-job.jar \
--zk-host zk1,zk2,zk3/solr \
--collection collection001 \
--reducers 0 \
--hbase-indexer-zk=zk1,zk2,zk3 \
--hbase-table-name test:index001 \
--hbase-indexer-name myindex002 \
-D "mapred.child.java.opts=-Xmx2048m" \
--hbase-start-row 00000000000000000000000000 \
--hbase-end-row 00000000000000000000000390 \
--verbose
hadoop --config custom_conf jar hbase-indexer-mr-2.0-job.jar \
--zk-host zk1,zk2,zk3/solr \
--collection collection001 \
--reducers 0 \
--hbase-indexer-zk=zk1,zk2,zk3 \
--hbase-table-name test:index001 \
--hbase-indexer-name myindex002 \
--hbase-start-time 1530780396659 \
--hbase-end-time 1531119958636 \
--verbose
hadoop --config custom_conf jar hbase-indexer-mr-2.0-job.jar \
--zk-host zk1,zk2,zk3/solr \
--collection collection001 \
--reducers 0 \
--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-time 2018-07-05T16:46:36.659+0800 \
--hbase-end-time 2018-07-09T15:05:58.636+0800 \
--verbose
或者
--hbase-timestamp-format "yyyy-MM-dd'T'HH:mm:ss" \
--hbase-start-time 2018-07-05T16:46:36 \
--hbase-end-time 2018-07-09T15:05:58 \
由于重建索引会对集群资源负载变大,如果作业太大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
<property>
<name>hbase.client.scanner.timeout.period</name>
<value>12000</value>
</property>
如果碰到mapreduce task超时最终导致作业失败时,首先检查一下是否hbase原表有个别region太大,导致一个作业运行过长导致,可以手动split对应那个region。其次,可以mapred-site.xml添加如下配置适当增加超时参数。
如异常:AttemptID:attempt_1534767970337_0010_m_000032_0 Timed out after 1800 secs
<property>
<name>mapreduce.task.timeout</name>
<value>1800000</value>
</property>
在文档使用中是否遇到以下问题
更多建议
匿名提交