推特 阿里云技术文档正文

Spark对接HBase快速入门_Spark ETL&Streaming数据源连接器_X-Pack Spark计算服务_云数据库 HBase 版

admin 阿里云技术文档 2020-02-11 198 0
阿里云服务器优惠

Spark对接HBase快速入门

简介

HBase服务擅长在线简单查询,复杂分析场景不适用。通过分析集群可以加强对HBase中数据的分析。这里主要介绍通过“数据工作台”使用Spark对接HBase数据的使用方法。

前置条件

  1. Spark集群和HBase集群在同一个VPC下。
    进入Spark分析集群页面,选择“数据库连接”>“连接信息”,查看Spark集群的VPC ID信息。如下图:

    Spark对接HBase快速入门_Spark ETL&Streaming数据源连接器_X-Pack Spark计算服务_云数据库 HBase 版 阿里云技术文档 第1张
  2. Spark分析集群关联HBase集群。
    进入Spark分析集群页面,选择“关联数据库”>“关联HBase”,支持关联以及取消关联。如下图:

    Spark对接HBase快速入门_Spark ETL&Streaming数据源连接器_X-Pack Spark计算服务_云数据库 HBase 版 阿里云技术文档 第2张
  3. 创建HBase表准备数据,本实例使用的HBase表为:mytable
    • 方式一:参考 通过hbase shell准备数据
      1. bin/hbase shell
      2. hbase(main):001:0> create 'mytable', 'cf'
      3. hbase(main):001:0> put 'mytable', 'rowkey1', 'cf:col1', 'this is value'
    • 方式二:参考通过hbase的sdk Java Client创建HBase表

使用“数据工作台”>“作业管理”运行样例

步骤 1:通过“资源管理”上传样例代码Jar包

下载样例代码jar包“spark-examples-0.0.1-SNAPSHOT.jar”到本地目录。

  1. wget https://spark-home.oss-cn-shanghai.aliyuncs.com/spark_example/spark-examples-0.0.1-SNAPSHOT.jar

在“数据工作台”>“资源管理”中添加文件夹“spark_on_hbase”。
上传jar包“spark-examples-0.0.1-SNAPSHOT.jar”到此文件夹。如下图:

Spark对接HBase快速入门_Spark ETL&Streaming数据源连接器_X-Pack Spark计算服务_云数据库 HBase 版 阿里云技术文档 第3张

步骤 2:通过“作业管理”创建并编辑作业内容

在“数据工作台”>“作业管理”中创建Spark作业,作业内容如下:

  1. --class com.aliyun.spark.hbase.SparkOnHBaseSparkSession
  2. --driver-memory 1G
  3. --driver-cores 1
  4. --executor-cores 1
  5. --executor-memory 2G
  6. --num-executors 1
  7. --name spark-on-hbase
  8. /spark_on_hbase/spark-examples-0.0.1-SNAPSHOT.jar
  9. hb-xxx:2181,hb-xxx:2181,hb-xxx:2181 mytable spark_on_hbase_job

作业内容参数说明:

参数 解释
hb-xxx:2181,hb-xxx:2181,hb-xxx:2181 HBase集群中的“ZK链接地址(专有网络)”。
mytable HBase集群中表,本实例使用的HBase表:mytable,使用hbase shell创建表准备数据;或者参考Java Client创建HBase表
spark_on_hbase_job Spark中创建映射HBase表的表名。

如下图:

Spark对接HBase快速入门_Spark ETL&Streaming数据源连接器_X-Pack Spark计算服务_云数据库 HBase 版 阿里云技术文档 第4张

步骤 3:通过“作业管理”运行作业并查看结果

作业编辑完成后点击“运行”,选择Spark集群。运行状态会在下侧显示,如图:

Spark对接HBase快速入门_Spark ETL&Streaming数据源连接器_X-Pack Spark计算服务_云数据库 HBase 版 阿里云技术文档 第5张


运行成功后点击“YarnUI”,翻到最后看到如下结果表明Spark读取HBase成功。如下:

  1. +-------+-------------+
  2. | col0| col1|
  3. +-------+-------------+
  4. |rowkey1|this is value|
  5. +-------+-------------+

使用“交互式查询”运行样例

步骤 1:通过“会话管理”创建会话

在“数据工作台”>“会话管理”中点击“创建会话”。填写“会话名称”:spark_on_hbase, 选择需要执行的Spark集群。
点击“确认”后,编辑“会话内容”,内容如下:

  1. --driver-memory 1G
  2. --driver-cores 1
  3. --executor-cores 1
  4. --executor-memory 2G
  5. --num-executors 1
  6. --name spark_on_hbase

内容编辑完成后,点击“运行”(此处点击运行是为了下一步骤中可以选择会话“spark_on_hbase”)。如下图:

Spark对接HBase快速入门_Spark ETL&Streaming数据源连接器_X-Pack Spark计算服务_云数据库 HBase 版 阿里云技术文档 第6张

步骤 2:通过“交互式查询”创建查询

进入“数据工作台”>“交互式查询”,在“会话列表”下拉框中选择“spark_on_hbase”,然后点击“新建查询”。填写“查询名称”:spark_on_hbase,“查询类型”选择“sql”。如下图:

Spark对接HBase快速入门_Spark ETL&Streaming数据源连接器_X-Pack Spark计算服务_云数据库 HBase 版 阿里云技术文档 第7张

步骤 3:通过“交互式查询”编辑查询

进入“数据工作台”>“交互式查询”,打开上步骤创建的“spark_on_hbase”,输入如下内容:

  1. CREATE TABLE spark_on_hbase USING org.apache.hadoop.hbase.spark
  2. OPTIONS ('catalog'=
  3. '{"table":{"namespace":"default", "name":"mytable"},"rowkey":"rowkey",
  4. "columns":{
  5. "col0":{"cf":"rowkey", "col":"rowkey", "type":"string"},
  6. "col1":{"cf":"cf", "col":"col1", "type":"string"}}}',
  7. 'hbase.zookeeper.quorum' = 'hb-xxx:2181,hb-xxx:2181,hb-xxx:2181'
  8. )

如下图:

Spark对接HBase快速入门_Spark ETL&Streaming数据源连接器_X-Pack Spark计算服务_云数据库 HBase 版 阿里云技术文档 第8张


建表语句关键字说明:

关键字 说明
spark_on_hbase Sprk SQL中创建的表名。
namespace 指定HBase的命名空间。
name 指定HBase中的表名:mytable。mytable创建请参考Java Client创建HBase表
rowkey 指定HBase表的rowkey的名字,对应“col0”中“”col”:”rowkey””。
“col1”:{“cf”:”cf”, “col”:”col1”, “type”:”string”}}} 指定Spark中表的列名:col1映射到HBase表mytable的“cf”这个Column family的“col1”这个qualifier。且指定转换类型为string。
hbase.zookeeper.quorum HBase集群中的“ZK链接地址(专有网络)”。

步骤 4:通过“交互式查询”运行查询

编辑查询“spark_on_hbase”完成后,点击“运行”;运行成功后,在“查询内容”中输入“select * from spark_on_hbase”,然后点击“运行”验证结果,出现如下图结果表示运行成功。如下图:

Spark对接HBase快速入门_Spark ETL&Streaming数据源连接器_X-Pack Spark计算服务_云数据库 HBase 版 阿里云技术文档 第9张

建表语法详解

Spark Sql创建HBase映射表的语句有些负责,这里从一个复杂的HBase表来详细解释建表的语法。在HBase中创建一个表,其结构为:

Spark对接HBase快速入门_Spark ETL&Streaming数据源连接器_X-Pack Spark计算服务_云数据库 HBase 版 阿里云技术文档 第10张
如图所以:表名为:htable。
有两个列族:cf1和cf2。
每个列族分别有两个列:cf1的两个列为a和b,cf2的两个列为b和c。其中a为int类型,b为float类型,c为string类型,d为boolean类型。
有两行数据:两行数据的rowkey分别为:row001和row002。
下面需要在Spark Sql中创建一个Spark Sql表映射到此HBase表。其建表语句为:

  1. CREATE TABLE spark_on_htable USING org.apache.hadoop.hbase.spark
  2. OPTIONS ('catalog'=
  3. '{"table":{"namespace":"default", "name":"htable"},"rowkey":"key",
  4. "columns":{
  5. "col0":{"cf":"rowkey", "col":"key", "type":"string"},
  6. "col1":{"cf":"cf1", "col":"a", "type":"int"},
  7. "col2":{"cf":"cf1", "col":"b", "type":"float"},
  8. "col3":{"cf":"cf2", "col":"c", "type":"string"},
  9. "col4":{"cf":"cf2", "col":"d", "type":"boolean"}}}',
  10. 'hbase.zookeeper.quorum' = 'zkaddress'
  11. );

建表语句关键字说明:

关键字 说明 备注
spark_on_htable 在Spark Sql中表名 根据需要修改
“namespace”:”default” HBase表’htable’ 在hbase中的namespace。
实例中的htable对应的Namespace为’default’。
如果namespace的名称是’ns1’, 此处需要改为:”namespace”:”ns1”
namespace是关键字
default根据实际情况修改
“name”:”htable” HBase表’htable’ 在hbase中名称。
如果HBase的名称是’htable01’, 此处需要改为:”name”:”htable01”。
name是关键字
htbale根据实际情况修改
“rowkey”:”key” HBase表’htable’ 的rowkey别名为’key’。
这里的别名’key’需要和下面rowkey映射中key保持一致。
rowkey是关键字
key根据实际情况修改
“col0”:{“cf”:”rowkey”, “col”:”key”, “type”:”string”} HBase表’htable’的rowkey与Spark Sql表字段的映射。
“col0”表示Spark Sql表’spark_on_htable’的列名。
“cf”:”rowkey”表示HBase表’htable’的rowkey(固定写法)
“col”:”key1”表示’col0’和’key1’映射。
‘key1’ 需要和上一行中定义的别名保持一致。
“type”:”string”表示HBase表’htable’的rowkey的类型。
cf、rowkey、col、type是关键字
col0、key、string根据实际情况修改
“col1”:{“cf”:”cf1”, “col”:”a”, “type”:”string”}, “HBase表’htable’的字段与Spark Sql表字段的映射。
“col1”表示Spark Sql表’spark_on_htable’的列名。
“cf”:”cf1”表示HBase表’htable’的列族’cf1’
“col”:”a”表示’col0’和’a’映射,’a’ 是表’htable’的列名。
“type”:”string”表示HBase表’htable’的rowkey的类型。
cf、col、type是关键字
col1、cf1、a、string根据实际情况修改
‘hbase.zookeeper.quorum’ = ‘zkaddress’ HBase的zk链接地址。 hbase.zookeeper.quorum是关键字
zkaddress根据实际情况修改

小结

  • 本例代码可参考:SparkOnHBaseSparkSession.scala
  • 更多样例代码可参考:Spark样例代码
  • 直读HFile去读取HBase表数据(请联系HBase&spark服务答疑同学)。
  • 其他

    • 支持的数据类型

      目前分析集群 SQL关联HBase表,支持的数据类型包括:string,int,long,float,double,boolean。(其他类型后续陆续推出)。

    • 删除表

      在分析集群 SQL中删除 SQL表,对应HBase中的表不会被删除。

    • SQL语法

      DDL语法:分析HBase的建表DDL语法和HBase社区的”hbase-spark模块”一致。查询语法:查询语法和Spark SQL一致,支持ANSI SQL 2003语法。

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

评论

-----