手机工信部网站备案查询,江西做网站,外贸展示型模板网站,大数据平台设计转载自微信公众号Hadoop实操温馨提示#xff1a;如果使用电脑查看图片不清晰#xff0c;可以使用手机打开文章单击文中的图片放大查看高清原图。Fayson的github#xff1a;https://github.com/fayson/cdhproject提示#xff1a;代码块部分可以左右滑动查看噢1文章编写目的越… 转载自微信公众号Hadoop实操温馨提示如果使用电脑查看图片不清晰可以使用手机打开文章单击文中的图片放大查看高清原图。Fayson的githubhttps://github.com/fayson/cdhproject提示代码块部分可以左右滑动查看噢1文章编写目的越来越多的用户使用Spark对接HBase对接HBase的方式有多种通过HBase-client API实现也有直接Spark On HBase的方式实现比较常见的有华为的Spark-SQL-on-HBaseHortonworks的Apache HBase Connector和Cloudera提供的SparkOnHBase目前Cloudera的SparkOnHBase已提交的HBase的主干版本。本篇文章Fayson主要在Spark2环境下使用Cloudera的SparkOnHBase访问HBase。内容概述1.环境准备2.SparkOnHBase示例代码3.示例运行及验证4.总结测试环境1.CM和CDH版本为5.15.02.Spark2.2.0.cloudera22环境准备在CDH5.15.0环境下安装了Spark2后默认是没有与HBase集成的所以这里我们需要配置Spark2与HBase集成在Spark环境变量中增加HBase的配置信息。1.登录CM进入Spark2的配置界面搜索“spark-env.sh”,增加如下配置#配置Spark2的Java环境Spark2要求JDK8或以上版本export JAVA_HOME/usr/java/jdk1.8.0_131#加载该依赖包的主要目的是Spark2的Logging为私有的Fayson自己重写了Logging类export SPARK_DIST_CLASSPATH$SPARK_DIST_CLASSPATH:/opt/cloudera/external-jars/spark2-demo-1.0-SNAPSHOT.jar#加载HBase的依赖包到Spark2环境变量中for loop in ls /opt/cloudera/parcels/CDH/jars/hbase-*.jar;do export SPARK_DIST_CLASSPATH${loop}:${SPARK_DIST_CLASSPATH}done#加载HBase的配置到Spark2的环境变量中export HADOOP_CONF_DIR${HADOOP_CONF_DIR}:/etc/hbase/conf/2.完成上述配置后部署Spark2客户端配置完成部署3.在HBase中创建一个用于测试的表user_infocreate user_info,info3SparkOnHBase示例代码1.在Spark2工程中添加SparkOnHBase的Maven依赖dependency groupIdorg.apache.kudugroupId artifactIdkudu-spark2_2.11artifactId version1.7.0-cdh5.15.0versiondependency2.在工程中创建ClouderaSparkOnHBase.scala类内容如下package com.cloudera.hbaseimport org.apache.hadoop.hbase.client.Putimport org.apache.hadoop.hbase.{HBaseConfiguration, TableName}import org.apache.hadoop.hbase.spark.HBaseContextimport org.apache.hadoop.hbase.util.Bytesimport org.apache.spark.SparkConfimport org.apache.spark.sql.SparkSession/** * package: com.cloudera.hbase * describe: 使用Cloudera提供的Spark On HBase访问HBase * creat_user: Fayson * email: htechinfo163.com * creat_date: 2019/1/24 * creat_time: 上午10:59 * 公众号Hadoop实操 */object ClouderaSparkOnHBase { def main(args: Array[String]): Unit { //Spark Conf配置信息 val conf new SparkConf() .setAppName(ClouderaSparkOnHBase) .set(spark.master, yarn) .set(spark.submit.deployMode, client) //初始化SparkSession对象 val spark SparkSession.builder().config(conf).getOrCreate() //初始化HBase Configuration val hbaseconf HBaseConfiguration.create() //创建HBaseContext对象 val hbaseContext new HBaseContext(spark.sparkContext, hbaseconf) //准备一个RDD后面用于向HBase表插入数据 val rdd spark.sparkContext.parallelize(Array( (Bytes.toBytes(1), Array((Bytes.toBytes(info), Bytes.toBytes(a), Bytes.toBytes(1)))), (Bytes.toBytes(2), Array((Bytes.toBytes(info), Bytes.toBytes(b), Bytes.toBytes(2)))), (Bytes.toBytes(3), Array((Bytes.toBytes(info), Bytes.toBytes(c), Bytes.toBytes(3)))), (Bytes.toBytes(4), Array((Bytes.toBytes(info), Bytes.toBytes(d), Bytes.toBytes(4)))), (Bytes.toBytes(5), Array((Bytes.toBytes(info), Bytes.toBytes(e), Bytes.toBytes(5)))) )) val tableName TableName.valueOf(user_info) //使用HBaseContext.bulkPut向指定的HBase表写数据 hbaseContext.bulkPut[(Array[Byte], Array[(Array[Byte], Array[Byte], Array[Byte])])](rdd, tableName, (putRecord) { val put new Put(putRecord._1) putRecord._2.foreach((putValue) put.addColumn(putValue._1, putValue._2, putValue._3) ) put }); }}3.使用Maven命令编译工程mvn clean scala:compile package4.将编译好的spark2-demo-1.0-SNAPSHOT.jar上传到集群有Spark2 Gateway的节点上使用spark2-submit命令提交kinit faysonspark2-submit --class com.cloudera.hbase.ClouderaSparkOnHBase \ --master yarn --num-executors 4 --driver-memory 1g \ --driver-cores 1 --executor-memory 1g --executor-cores 1 \ /data/disk1/hbase-spark-demo/spark2-demo-1.0-SNAPSHOT.jar作业执行成功5.登录HBase查看user_info表数据4总结1.Spark2使用SparkOnHBase开发访问HBase时代码编译时会报“Could not access type Logging in package org.apache.spark”具体可以参考Fayson前面的文章《HBase-Spark无法在Spark2编译通过问题解决》2.在进行Spark2与HBase环境集成时将spark2-demo-1.0-SNAPSHOT.jar包加载至环境变量(确保集群所有节点/opt/cloudera/external目录下均有这个Jar包)是为了HBaseContext能够正常加载org.apche.spark.Logging类当然可以将该类打包到一个独立的包中Fayson这里偷懒直接使用示例工程的jar包。3.使用SparkOnHBase可以方便的访问HBase在非Kerberos和Kerberos环境下不需要考虑认证问题(Fayson在前面Spark2Streaming系列时使用的hbase-client API访问HBaseKerberos环境下还需要考Driver和Executor的jaas.conf配置)4.在代码中创建HBaseConfiguration.create()对象后设置ZK地址在每个Executor上无法正常获取ZK连接默认加载的还是localhost配置(因为未在Spark2环境变量中指定HBase配置文件地址导致)因此使用SparkOnHBase必须完成Spark2与HBase的集成。GitHub地址https://github.com/fayson/cdhproject/blob/master/spark2demo/src/main/scala/com/cloudera/hbase/ClouderaSparkOnHBase.scalahttps://github.com/fayson/cdhproject/blob/master/spark2demo/pom.xml提示代码块部分可以左右滑动查看噢为天地立心为生民立命为往圣继绝学为万世开太平。温馨提示如果使用电脑查看图片不清晰可以使用手机打开文章单击文中的图片放大查看高清原图。推荐关注Hadoop实操第一时间分享更多Hadoop干货欢迎转发和分享。大家工作学习遇到HBase技术问题把问题发布到HBase技术社区论坛http://hbase.group欢迎大家论坛上面提问留言讨论。想了解更多HBase技术关注HBase技术社区公众号(微信号:hbasegroup)非常欢迎大家积极投稿。技术社群【HBase生态Spark社区大群】群福利群内每周进行群直播技术分享及问答加入方式1https://dwz.cn/Fvqv066s?spma2c4e.11153940.blogcont688191.19.1fcd1351nOOPvI加入方式2钉钉扫码加入