更新时间:2024-11-29 GMT+08:00

SparkOnHBase概述及基本应用

操作场景

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

操作步骤

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

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

  2. 选择“集群 > 服务 > Spark > 配置 > 全部配置 > JDBCServer > 默认”,修改以下参数:

    表1 参数列表1

    参数

    默认值

    修改结果

    spark.yarn.security.credentials.hbase.enabled

    false

    true

    为了保证Spark可以长期访问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. 选择SparkResource > 默认,修改以下参数:

    表2 参数列表2

    参数

    默认值

    修改结果

    spark.yarn.security.credentials.hbase.enabled

    false

    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

      ");

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