配置Spark读取HBase表数据
操作场景
Spark on HBase为用户带来了强大的数据处理与存储交互能力。借助这一技术,用户能够在Spark SQL环境下对HBase表开展查询操作,借助其强大的分布式计算能力和灵活的SQL查询语法,高效地从HBase分布式列存储系统中获取所需数据。
在数据存储方面,用户可以通过Beeline工具,方便快捷地向HBase表中存储数据。Beeline作为一种常见的SQL命令行工具,为用户提供了直观、易用的操作界面,确保数据能够顺利存入HBase表中。
此外,通过HBase接口,用户能够对HBase表进行全面的管理操作。无论是创建新表以满足特定业务需求的数据存储,还是读取已有表中的数据进行分析,或是向表中插入新的数据记录,都可以轻松实现。这种无缝集成使得Spark和HBase的优势得以充分发挥,为用户提供了一个高效、灵活的数据处理与存储解决方案。
Spark On HBase
- 登录Manager界面,选择“集群 > 集群属性”查看集群是否为安全模式。
- 选择“集群 > 服务 > Spark2x > 配置 > 全部配置 > JDBCServer2x > 默认”,修改以下参数:
表1 参数列表 参数
参数说明
参数值
spark.yarn.security.credentials.hbase.enabled
是否启用HBase验证功能。如果需要Spark-on-HBase功能,且集群为安全集群,参数值设置为true。
- true:启用HBase验证功能。
- false:关闭HBase验证功能。
true
为了保证Spark可以长期访问HBase,建议不要修改HBase与HDFS服务的以下参数:
- dfs.namenode.delegation.token.renew-interval:设置token renew的时间间隔。
- dfs.namenode.delegation.token.max-lifetime:设置token的最大存活期。
- hbase.auth.key.update.interval:HBase认证密钥的更新间隔。
- hbase.auth.token.max.lifetime:设置HBase认证密钥的最大存活期,不可修改,固定值为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 参数列表 参数
参数说明
参数值
spark.yarn.security.credentials.hbase.enabled
是否启用HBase验证功能。如果需要Spark-on-HBase功能,且集群为安全集群,参数值设置为true。
- true:启用HBase验证功能。
- false:关闭HBase验证功能。
true
- 重启Spark服务,配置生效。
如果需要在Spark客户端用Spark on HBase功能,需要重新下载并安装Spark客户端。
- 在Spark客户端使用spark-sql或者spark-beeline连接,可以查询由Hive on HBase所创建的表,支持通过SQL命令创建HBase表或创建外表关联HBase表。建表前,确认HBase中已存在对应HBase表,下面以HBase表table1为例说明。
- 通过Beeline工具创建HBase表,命令如下:
create table hbaseTable ( 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 ");
表3 参数解释 参数
参数说明
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
- 选择“集群 > 服务 > Spark2x > 配置 > 全部配置 > JDBCServer2x > 默认”,修改以下参数:
表4 参数列表 参数
参数说明
参数值
spark.yarn.security.credentials.hbase.enabled
是否启用HBase验证功能。如果需要Spark-on-HBase功能,且集群为安全集群,参数值设置为true。
- true:启用HBase验证功能。
- false:关闭HBase验证功能。
true
为了保证Spark可以长期访问HBase,建议不要修改HBase与HDFS服务的以下参数:
- dfs.namenode.delegation.token.renew-interval:设置token renew的时间间隔。
- dfs.namenode.delegation.token.max-lifetime:设置token的最大存活期。
- hbase.auth.key.update.interval:HBase认证密钥的更新间隔。
- hbase.auth.token.max.lifetime:设置HBase认证密钥的最大存活期,不可修改,固定值为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”的值。
- 选择
,修改以下参数:
表5 参数列表 参数
参数说明
参数值
spark.yarn.security.credentials.hbase.enabled
是否启用HBase验证功能。如果需要Spark-on-HBase功能,且集群为安全集群,参数值设置为true。
- true:启用HBase验证功能。
- false:关闭HBase验证功能。
true
- 重启Spark服务,配置生效。
如果需要在Spark客户端用Spark on HBase功能,需要重新下载并安装Spark客户端。
- 在Spark客户端使用spark-sql或者spark-beeline连接,可以查询由Hive on HBase所创建的表,支持通过SQL命令创建HBase表或创建外表关联HBase表。具体见下面说明。下面以HBase表table1为例说明。
- 通过spark-beeline工具创建表的语法命令如下:
create table hbaseTable1 (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");
表6 参数解释 参数
参数说明
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工具创建表的语法命令如下:
相关文档
Spark从HBase表读取数据开发样例程序请参考Spark从HBase读取数据再写入HBase样例程序。