更新时间:2024-07-24 GMT+08:00

配置Spark读取HBase表数据

操作场景

Spark on HBase为用户提供了在Spark SQL中查询HBase表,通过Beeline工具为HBase表进行存数据等操作。通过HBase接口可实现创建表、读取表、往表中插入数据等操作。

Spark On HBase

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

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

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

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

    表2 参数列表2

    参数

    默认值

    修改结果

    spark.yarn.security.credentials.hbase.enabled

    false

    true

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

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

  5. 在Spark2x客户端使用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

      ");

      • 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 > 默认”,修改以下参数:

    表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”的值。

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

    表4 参数列表2

    参数

    默认值

    修改结果

    spark.yarn.security.credentials.hbase.enabled

    false

    true

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

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

  4. 在Spark2x客户端使用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");

      • 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;