配置Spark读取HBase表数据
Spark On HBase
Spark on HBase为用户提供了在Spark SQL中查询HBase表,通过Beeline工具为HBase表进行存数据等操作。通过HBase接口可实现创建表、读取表、往表中插入数据等操作。
- 登录Manager界面,选择“集群 > 待操作集群的名称 > 集群属性”查看集群是否为安全模式。
- 选择“集群 > 待操作集群的名称 > 服务 > Spark2x > 配置 > 全部配置 > JDBCServer2x > 默认”,修改以下参数:
表1 参数列表1 参数
默认值
修改结果
spark.yarn.security.credentials.hbase.enabled
false
true
为了保证Spark2x可以长期访问HBase,建议不要修改HBase与HDFS服务的以下参数:
- dfs.namenode.delegation.token.renew-interval
- dfs.namenode.delegation.token.max-lifetime
- hbase.auth.key.update.interval
- hbase.auth.token.max.lifetime(不可修改,固定值为604800000毫秒,即7天)
如果必须要修改以上参数,请务必保证HDFS参数“dfs.namenode.delegation.token.renew-interval”的值不大于HBase参数“hbase.auth.key.update.interval”、“hbase.auth.token.max.lifetime”的值和HDFS参数“dfs.namenode.delegation.token.max-lifetime”的值。
- 选择
,修改以下参数:
表2 参数列表2 参数
默认值
修改结果
spark.yarn.security.credentials.hbase.enabled
false
true
- 重启Spark2x服务,配置生效。
如果需要在Spark2x客户端用Spark on HBase功能,需要重新下载并安装Spark2x客户端。
- 在Spark2x客户端使用spark-sql或者spark-beeline连接,可以查询由Hive on HBase所创建的表,支持通过SQL命令创建HBase表或创建外表关联HBase表。建表前,确认HBase中已存在对应 HBase表,下面以HBase表table1为例说明。
- 通过Beeline工具创建HBase表,命令如下:
(
id string,
name string,
age int
)
using org.apache.spark.sql.hbase.HBaseSource
options(
hbaseTableName "table1",
keyCols "id",
colsMapping "
name=cf1.cq1,
age=cf1.cq2
");
- hbaseTable:是创建的spark表的表名。
- id string,name string, age int:是spark表的字段名和字段类型。
- table1:HBase表名。
- id:HBase表的rowkey列名。
- name=cf1.cq1, age=cf1.cq2:spark表的列和HBase表的列的映射关系。spark的name列映射HBase表的cf1列簇的cq1列,spark的age列映射HBase表的cf1列簇的cq2列。
- 通过csv文件导入数据到HBase表,命令如下:
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator="," -Dimporttsv.columns=HBASE_ROW_KEY,cf1:cq1,cf1:cq2,cf1:cq3,cf1:cq4,cf1:cq5 table1 /hperson
其中:table1为HBase表名,/hperson为csv文件存放的路径。
- 在spark-sql或spark-beeline中查询数据,hbaseTable为对应的spark表名。命令如下:
select * from hbaseTable;
- 通过Beeline工具创建HBase表,命令如下:
Spark on HBaseV2
Spark on HBaseV2为用户提供了在Spark SQL中查询HBase表,通过Beeline工具为HBase表进行存数据等操作。通过HBase接口可实现创建表、读取表、往表中插入数据等操作。
- 选择“集群 > 待操作集群的名称 > 服务 > Spark2x > 配置 > 全部配置 > JDBCServer2x > 默认”,修改以下参数:
表3 参数列表1 参数
默认值
修改结果
spark.yarn.security.credentials.hbase.enabled
false
true
为了保证Spark2x可以长期访问HBase,建议不要修改HBase与HDFS服务的以下参数:
- dfs.namenode.delegation.token.renew-interval
- dfs.namenode.delegation.token.max-lifetime
- hbase.auth.key.update.interval
- hbase.auth.token.max.lifetime(不可修改,固定值为604800000毫秒,即7天)
如果必须要修改以上参数,请务必保证HDFS参数“dfs.namenode.delegation.token.renew-interval”的值不大于HBase参数“hbase.auth.key.update.interval”、“hbase.auth.token.max.lifetime”的值和HDFS参数“dfs.namenode.delegation.token.max-lifetime”的值。
- 选择
,修改以下参数:
表4 参数列表2 参数
默认值
修改结果
spark.yarn.security.credentials.hbase.enabled
false
true
- 重启Spark2x服务,配置生效。
如果需要在Spark2x客户端用Spark on HBase功能,需要重新下载并安装Spark2x客户端。
- 在Spark2x客户端使用spark-sql或者spark-beeline连接,可以查询由Hive on HBase所创建的表,支持通过SQL命令创建HBase表或创建外表关联HBase表。具体见下面说明。下面以HBase表table1为例说明。
- 通过spark-beeline工具创建表的语法命令如下:
(id string, name string, age int)
using org.apache.spark.sql.hbase.HBaseSourceV2
options(
hbaseTableName "table2",
keyCols "id",
colsMapping "name=cf1.cq1,age=cf1.cq2");
- hbaseTable1:是创建的spark表的表名。
- id string,name string, age int:是spark表的字段名和字段类型。
- table2:HBase表名。
- id:HBase表的rowkey列名。
- name=cf1.cq1, age=cf1.cq2:spark表的列和HBase表的列的映射关系。spark的name列映射HBase表的cf1列簇的cq1列,spark的age列映射HBase表的cf1列簇的cq2列。
- 通过csv文件导入数据到HBase表,命令如下:
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator="," -Dimporttsv.columns=HBASE_ROW_KEY,cf1:cq1,cf1:cq2,cf1:cq3,cf1:cq4,cf1:cq5 table2 /hperson
其中:table2为HBase表名,/hperson为csv文件存放的路径。
- 在spark-sql或spark-beeline中查询数据,hbaseTable1为对应的spark表名,命令如下:
select * from hbaseTable1;
- 通过spark-beeline工具创建表的语法命令如下: