更新时间:2025-07-30 GMT+08:00
分享

配置Spark读取HBase表数据

操作场景

Spark on HBase为用户带来了强大的数据处理与存储交互能力。借助这一技术,用户能够在Spark SQL环境下对HBase表开展查询操作,借助其强大的分布式计算能力和灵活的SQL查询语法,高效地从HBase分布式列存储系统中获取所需数据。

在数据存储方面,用户可以通过Beeline工具,方便快捷地向HBase表中存储数据。Beeline作为一种常见的SQL命令行工具,为用户提供了直观、易用的操作界面,确保数据能够顺利存入HBase表中。

此外,通过HBase接口,用户能够对HBase表进行全面的管理操作。无论是创建新表以满足特定业务需求的数据存储,还是读取已有表中的数据进行分析,或是向表中插入新的数据记录,都可以轻松实现。这种无缝集成使得Spark和HBase的优势得以充分发挥,为用户提供了一个高效、灵活的数据处理与存储解决方案。

Spark On HBase

  1. 登录Manager界面,选择“集群 > 集群属性”查看集群是否为安全模式。

    • 是,执行2
    • 否,执行5

  2. 选择“集群 > 服务 > 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”的值。

  3. 选择SparkResource2x > 默认,修改以下参数:

    表2 参数列表

    参数

    参数说明

    参数值

    spark.yarn.security.credentials.hbase.enabled

    是否启用HBase验证功能。如果需要Spark-on-HBase功能,且集群为安全集群,参数值设置为true。

    • true:启用HBase验证功能。
    • false:关闭HBase验证功能。

    true

  4. 重启Spark服务,配置生效。

    如果需要在Spark客户端用Spark on HBase功能,需要重新下载并安装Spark客户端。

  5. 在Spark客户端使用spark-sql或者spark-beeline连接,可以查询由Hive on HBase所创建的表,支持通过SQL命令创建HBase表或创建外表关联HBase表。建表前,确认HBase中已存在对应HBase表,下面以HBase表table1为例说明。

    1. 通过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列。

    2. 通过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文件存放的路径。

    3. 在spark-sql或spark-beeline中执行如下命令查询数据,其中hbaseTable为对应的spark表名。
      select * from hbaseTable;

Spark on HBaseV2

  1. 登录Manager界面,选择“集群 > 集群属性”查看集群是否为安全模式。

    • 是,执行2
    • 否,执行5

  1. 选择“集群 > 服务 > 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”的值。

  2. 选择SparkResource2x > 默认,修改以下参数:

    表5 参数列表

    参数

    参数说明

    参数值

    spark.yarn.security.credentials.hbase.enabled

    是否启用HBase验证功能。如果需要Spark-on-HBase功能,且集群为安全集群,参数值设置为true。

    • true:启用HBase验证功能。
    • false:关闭HBase验证功能。

    true

  3. 重启Spark服务,配置生效。

    如果需要在Spark客户端用Spark on HBase功能,需要重新下载并安装Spark客户端。

  4. 在Spark客户端使用spark-sql或者spark-beeline连接,可以查询由Hive on HBase所创建的表,支持通过SQL命令创建HBase表或创建外表关联HBase表。具体见下面说明。下面以HBase表table1为例说明。

    1. 通过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列。

    2. 通过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文件存放的路径。

    3. 在spark-sql或spark-beeline中执行如下命令查询数据,其中hbaseTable1为对应的spark表名。
      select * from hbaseTable1;

相关文档

Spark从HBase表读取数据开发样例程序请参考Spark从HBase读取数据再写入HBase样例程序

相关文档