【Spark集成HBase】Spark读写HBase表

摘要

本文介绍如何使用 Spark 2.3.2 实现对 HBase 1.4.8 表的读写操作,通过 Scala 语言将 CSV 数据写入 HBase,并利用 Spark SQL 分析数据。代码示例涵盖数据批量写入、全表扫描、数据类型转换及结构化查询,适合大数据开发人员快速掌握 Spark 与 HBase 的集成方法。

一、实验环境准备

1. 技术版本

  • Spark:2.3.2
  • HBase:1.4.8
  • Scala:2.11
  • 开发工具:IntelliJ IDEA
  • 依赖管理:Maven

2. Maven 依赖配置

pom.xml 中添加以下依赖:

<dependencies>  
  <!-- Spark 核心与 SQL -->  
  <dependency>  
    <groupId>org.apache.spark</groupId>  
    <artifactId>spark-core_2.11</artifactId>  
    <version>2.3.2</version>  
  </dependency>  
  <dependency>  
    <groupId>org.apache.spark</groupId>  
    <artifactId>spark-sql_2.11</artifactId>  
    <version>2.3.2</version>  
  </dependency>  
  <!-- HBase 客户端与 MapReduce 支持 -->  
  <dependency>  
    <groupId>org.apache.hbase</groupId>  
    <artifactId>hbase-client</artifactId>  
    <version>1.4.8</version>  
  </dependency>  
  <dependency>  
    <groupId>org.apache.hbase</groupId>  
    <artifactId>hbase-common</artifactId>  
    <version>1.4.8</version>  
  </dependency>  
  <dependency>  
    <groupId>org.apache.hbase</groupId>  
    <artifactId>hbase-server</artifactId>  
    <version>1.4.8</version>  
  </dependency>  
  <dependency>  
    <groupId>org.apache.hbase</groupId>  
    <artifactId>hbase-mapreduce</artifactId>  
    <version>1.4.8</version>  
  </dependency>  
  <!-- Hadoop 客户端(与 HBase 兼容) -->  
  <dependency>  
    <groupId>org.apache.hadoop</groupId>  
    <artifactId>hadoop-client</artifactId>  
    <version>2.7.3</version>  
  </dependency>  
</dependencies>  

二、实验步骤

1. 数据准备

  • 文件路径D:\\JavaProjects\\SparkAllProjects\\data\\emp.csv
  • 数据格式(示例):
    7369,SMITH,CLERK,7902,1980-12-17,800,,20  
    7499,ALLEN,SALESMAN,7698,1981-02-20,1600,300,30  
    
    字段含义:员工ID,姓名,职位,上级ID,入职日期,薪资,奖金,部门ID

2. HBase 表结构设计

  • 表名employee
  • 列族info
  • 列标识
    • ename:姓名
    • job:职位
    • mgr:上级ID
    • hiredate:入职日期
    • salary:薪资
    • comm:奖金
    • deptNo:部门ID

3. 代码实现

3.1 数据写入 HBase(writeDataToHBase 方法)

  • 核心逻辑
    1. 读取 CSV 文件为 DataFrame。
    2. 按分区遍历数据,批量创建 Put 对象。
    3. 通过 HBase 连接将数据写入表中,避免单条写入性能瓶颈。
  • 核心代码
      def writeDataToHBase(spark: SparkSession): Unit = {
         
         
    
        // 2.读取数据文件
        val empDF = spark.read.csv("file:///D:\\JavaProjects\\SparkAllProjects\\data\\emp.csv")
    
        // 3.按照DataFrame分区写入HBase表中
        empDF.foreachPartition(p => {
         
         
          // 3.1 配置HBase连接地址:初始化conf配置对象、配置zk连接地址及其端口
          val conf = HBaseConfiguration.create()
          conf.set("hbase.zookeeper.quorum", "s1,s2,s3")
          conf.set("hbase.zookeeper.property.clientPort", "2181")
    
          // 3.2 在每个HBase节点中创建HBase的链接对象
          val conn = ConnectionFactory.createConnection(conf)
          // 3.3 获取HBase目标表
          val table = conn.getTable(TableName.valueOf(TABLE_NAME))
    
          // 批量提交时,使用list列表存储put,当达到batchSize大小时提交一次
          val batchSize = 14 // emp.csv就14条记录,所以设置成14条提交一次
          var puts = List[Put]() // puts数组
    
          // 3.4 将dataframe中的每个分区数据写入table表中
          try {
         
         
            p.foreach(row => {
         
         
              // 3.5 获取每行中的各个列的数据
              val empNo = row.getString(0)
              val ename = row.getString(1)
              val job = row.getString(2)
              val mgr = row.getString(3)
              val hireDate = row.getString(4)
              val salary = row.getString(5)
              val comm = row.getString(6)
              val deptNo = row.getString(7)
    
              var mgrStr = "0"
              if (mgr != null) {
         
         
                mgrStr = mgr
              }
    
              var commStr = "0.0"
              if (comm != null) {
         
         
                commStr 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT喂嘟盲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值