开发者社区> 瑾谦> 正文

[Phoenix] 六、MR在Ali-Phoenix上的使用

简介: 在云HBASE上利用MR BULKLOAD入库PHOENIX表或通过MR构建PHOENIX索引表。
+关注继续查看

一、MR在Phoenix上的用途

  1. 利用MR对Phoenix表(可带有二级索引表)进行Bulkload入库, 其原理是直接生成主表(二级索引表)的HFILE写入HDFS。相对于走API的数据导入方式,不仅速度更快,而且对HBASE集群的负载也会小很多。目前云HBASE上的Phoenix支持以下数据源的Bulkload工具:

    • CsvBulkLoadTool
    • JsonBulkLoadTool
    • RegexBulkLoadTool
    • ODPSBulkLoadTool
  2. 利用MR Building二级索引。当主表数据量较大时,可以通过创建异步索引,使用MR快速同步索引数据。

二、如何访问云HBASE的HDFS?

由于云HBASE上没有MR,需要借助外部的计算引擎(自建的HADOOP集群或者EMR),而使用外部的计算引擎的首先面临的问题是,如何跨集群访问HDFS。
1.由于云HBASE的HDFS端口默认是不开的,需要联系工作人员开通。
2.端口开通以后,要想顺利的访问HDFS是HA配置的云HBASE集群,需要向工作人员获取云HBASE的主备(emr-header-1,emr-header-2)namenode host/IP。参考如下配置模板,设置hadoop客户端配置文件:
hdfs-site.xml

  <configuration> 
    <property> 
      <name>dfs.nameservices</name>  
      <value>emr-cluster</value> 
    </property>  
    <property> 
      <name>dfs.client.failover.proxy.provider.emr-cluster</name>  
      <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> 
    </property>  
    <property> 
      <name>dfs.ha.automatic-failover.enabled.emr-cluster</name>  
      <value>true</value> 
    </property>  
    <property> 
      <name>dfs.ha.namenodes.emr-cluster</name>  
      <value>nn1,nn2</value> 
    </property>  
    <property> 
      <name>dfs.namenode.rpc-address.emr-cluster.nn1</name>  
      <value>{emr-header-1-host}:8020</value> 
    </property>  
    <property> 
      <name>dfs.namenode.rpc-address.emr-cluster.nn2</name>  
      <value>{emr-header-2-host}:8020</value> 
    </property> 
  </configuration>

3.验证访问云HBASE HDFS
在emr或自建集群上访问云HBase集群

hadoop dfs -ls hdfs://emr-cluster/

三、BULKLOAD PHOENIX表

以EMR访问云HBASE为例。EMR集群需要把云HBASE HDFS的emr-cluster 相关配置和当前EMR的HDFS配置合在一起形成新的配置文件,单独存放在一个目录(${conf-dir})下。
通过yarn/hadoop命令的--config参数指定新的配置目录,使这些配置文件放在CLASSPATH最前面覆盖掉当前EMR集群hadoop_conf_dir下的配置,以便bulkload程序能识别到云HBASE HA的HDFS URL。当在emr或自建集群上能够访问自己的HDFS(hadoop --config <confdir> dfs -ls /), 也能够访问云HBase的HDFS(hadoop --config <confdir> dfs -ls hdfs://emr-cluster/)说明配置成功了。

执行如下BULKLOAD命令

yarn --config ${CONF_DIR} \
jar ${PHOENIX_HOME}/phoenix-${version}-client.jar org.apache.phoenix.mapreduce.CsvBulkLoadTool \
--table "TABLENAME" \
--input "hdfs://emr-header-1.cluster-55090:9000/tmp/test_data" \
--zookeeper "zk1,zk2,zk3" \
--output "hdfs://emr-cluster/tmp/tmp_data"

注意: --output 配置的是云HBASE的临时文件,这样直接把生成的HFILE存储在云HBASE的HDFS上,后续的只有简单的move操作。否则,如果生成在EMR集群还需要走网络发送到云HBASE HDFS上。

四、参考

http://www.syscrest.com/2016/02/access-remote-ha-enabled-hdfs-oozie-distcp-action/

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
flink报错踩坑:org.apache.flink.table.catalog.hive.client.HiveShimV100.registerTemporaryFunction
当想使用本地开发环境运行flink读写线上hive数据来运行时报错。我使用maven管理的开发环境依赖。由于代码发布到测试环境集群上跑时并没有报错,而测试环境对应的依赖都是使用放在上面的依赖jar的,并不使用本地maven管理的依赖(也就是没有打入项目jar)。所以我猜测是本地运行环境依赖有问题,也就是项目中maven的pom文件的依赖有问题。
25 0
Apache Hudi和Presto的前世今生
一篇由Apache Hudi PMC Bhavani Sudha Saktheeswaran和AWS Presto团队工程师Brandon Scheller分享Apache Hudi和Presto集成的一篇文章。
166 0
Spark on Phoenix 4.x Connector:如何在Spark侧设置Phoenix参数
前言 X-Pack Spark可以使用Spark on Phoenix 4.x Connector直接对接Phoenix数据库,读取Phoenix数据表数据。有时在读取Phoenix时需要设置Phoenix的一些参数,例如Phoenix为了保障数据库的稳定性,默认开了索引包含,即查询Phoebe表必须要带上索引或者主键字段作为过滤条件。
1473 0
Phoenix ODPSBulkLoadTool 使用案例
介绍Phoenix ODPSBulkLoadTool 使用案例
2431 0
Ali-HBase的SQL实践与改进
HBase原生api虽然赋予了用户极致的控制力,但也带来了较高的开发成本和学习成本,而SQL则很好的解决了这个使用问题。本文从为什么需要SQL开始谈起,进而讲解了SQL on Hbase,接着着重分享了Ali-Hbase SQL的优化与改进,最后对未来进行了展望。
3790 0
Apache Phoenix学习记录(SQL on HBase)
1 使用概述 Phoenix是基于HBase的SQL中间件产品,由Salesforce.com公司开源并托管于Github上。对于熟悉关系型数据库的开发人员来说,通过Phoenix可以像使用MySQL等关系型数据库一样使用HBase中的数据表。
3164 0
phoenix操作hbase
代码实例 package oa.epoint.com.phoenix; import java.sql.Connection; import java.
986 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
云HBaseSQL及分析 ——Phoenix&Spark
立即下载
Ali-HBase的SQL实践与改进
立即下载
HBase 和 Phoenix 的使用
立即下载