Spark写入数据到Hbase(上)

spark将数据写入hbase以及从hbase读取数据 本文将介绍 1、spark如何利用saveAsHadoopDataset和saveAsNewAPIHadoopDataset将RDD写入hbase 2、spark从hbase中读取数据并转化为RDD 操作方式为在eclipse本地运行spark连接到远程的hbase。 java版本:1.7.0 scala版本:2.10.4 zookeeper版本:3.4.5(禁用了hbase自带zoo 阅读详情

这是个踩坑的过程,上篇的虽然跑通了,但是其实版本配置有问题,记得看下篇😀
环境配置:
Scala:2.12.1
Spark:2.4.4
Hbase:2.2.3


前言:
前面有篇文章我使用了pyspark,弄得我很累,感觉python开发确实没那么好,看了些网上的文章和问了下朋友决定还是学学使用scala。(可以看看这个,我觉得挺有道理的.)
环境:
因为我也是第一次搞scala,如果你们也是的话,可以参考一下:
windows上 IntelliJ IDEA安装scala环境 详细 初学.
IDEA 开发 scala.

代码:

这里我参考了这个:http://dblab.xmu.edu.cn/blog/1316-2/.

只要代码测试成功了我再往下写,可是因为环境版本不一样,我改了一些地方的。

我们先建表和插入一些数据进去:(复制黏贴到hbase shell里面就一次过全部执行了,我是不是很贴心)

create 'student','info'
put 'student','1','info:name','Xueqian'
put 'student','1','info:gender','F'
put 'student','1','info:age','23'
put 'student','2','info:name','Weiliang'
put 'student','2','info:gender','M'
put 'student','2','info:age','24'

Pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.shct</groupId>
    <artifactId>sparkhbasetest</artifactId>
    <version>1.0-SNAPSHOT</version>


    <properties>
        <jdk.version>1.8</jdk.version>
        <scala.version>2.12.1</scala.version>
        <spark.version>2.4.4</spark.version>
        <hadoop.version>3.1.2</hadoop.version>
        <hbase.version>2.2.3</hbase.version>
    </properties>
    <dependencies>
        <!--scala-->
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>${scala.version}</version>
        </dependency>

        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-reflect</artifactId>
            <version>${scala.version}</version>
        </dependency>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-compiler</artifactId>
            <version>${scala.version}</version>
        </dependency>

        <!--spark-core-->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>${spark.version}</version>
        </dependency>

        <!--hadoop-->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>${hadoop.version}</version>
        </dependency>

        <!--hbase-->
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>${hbase.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-server</artifactId>
            <version>${hbase.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase</artifactId>
            <version>${hbase.version}</version>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-mapreduce</artifactId>
            <version>${hbase.version}</version>
        </dependency>

    </dependencies>

    <build>
        <sourceDirectory>src/main/scala</sourceDirectory>
        <plugins>
            <plugin>
                <groupId>org.scala-tools</groupId>
                <artifactId>maven-scala-plugin</artifactId>
                <version>2.15.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.1.0</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <createDependencyReducedPom>false</createDependencyReducedPom>
                            <filters>
                                <filter>
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.test.SparkCount</mainClass>
                                </transformer>
                            </transformers>

                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

读取:

import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.hbase._
import org.apache.hadoop.hbase.client._
import org.apache.hadoop.hbase.io.ImmutableBytesWritable
import org.apache.hadoop.hbase.util.Bytes
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.hadoop.hbase.mapreduce.TableInputFormat

object sparkHbaseRead {
  def main(args:Array[String]): Unit ={
    val conf=HBaseConfiguration.create()
    val sc = new SparkContext(new SparkConf())
    //设置查询的表名
//    conf.set("hbase.mapreduce.inputtable", "Studet")
    conf.set(TableInputFormat.INPUT_TABLE,"student")
    conf.set("zookeeper.znode.parent","/hbase-unsecure")
    conf.set("hbase.zookeeper.property.clientPort", "2181")
    val stuRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat],
      classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],
      classOf[org.apache.hadoop.hbase.client.Result])
    val count = stuRDD.count()
    println("Students RDD Count:" + count)
    stuRDD.cache()

    stuRDD.foreach({ case (_,result) =>
      val key = Bytes.toString(result.getRow)
      val name = Bytes.toString(result.getValue("info".getBytes,"name".getBytes))
      val gender = Bytes.toString(result.getValue("info".getBytes,"gender".getBytes))
      val age = Bytes.toString(result.getValue("info".getBytes,"age".getBytes))
      println("Row key:"+key+" Name:"+name+" Gender:"+gender+" Age:"+age)
    })
  }
}

这里修改的地方是,加入了zookeeper.znode.parent的配置,如果不配置的话有可能会出现以下错误:

java.util.concurrent.ExecutionException: org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /hbase/hbaseid
Caused by: java.io.IOException: org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /hbase

zookeeper.znode.parent是你的Hbase里的配置文件hbase-site.xml的配置,如果你的这个配置文件没有写这一项的话,则不需要写


写入:

import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.mapreduce.TableOutputFormat
import org.apache.spark._
import org.apache.hadoop.mapreduce.Job
import org.apache.hadoop.hbase.io.ImmutableBytesWritable
import org.apache.hadoop.hbase.client.Result
import org.apache.hadoop.hbase.client.Put
import org.apache.hadoop.hbase.util.Bytes



object spaekHbaseWrite {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setAppName("SparkWriteHBase").setMaster("local")
    val sc = new SparkContext(sparkConf)
    val tablename = "student"
    // hbase 的连接设置
    val hconf = sc.hadoopConfiguration
    hconf.set("hbase.zookeeper.property.clientPort","2181")
    hconf.set("zookeeper.znode.parent","/hbase-unsecure")
    hconf.set("hbase.zookeeper.quorum","192.168.0.111")
    hconf.set(TableOutputFormat.OUTPUT_TABLE,tablename)

    
    val job = Job.getInstance(hconf)
    job.setOutputKeyClass(classOf[ImmutableBytesWritable])
    job.setOutputValueClass(classOf[Result])
    job.setOutputFormatClass(classOf[TableOutputFormat[ImmutableBytesWritable]])

    val indataRDD = sc.makeRDD(Array("7,小明,M,10","8,小红,F,12")) //构建两行记录

    val rdd = indataRDD.map(_.split(',')).map{arr=>{

    val put = new Put(Bytes.toBytes(arr(0))) //行健的值
//    put.add(Bytes.toBytes("info"),Bytes.toBytes("name"), Bytes.toBytes(arr(1)))  //info:name列的值
//    put.add(Bytes.toBytes("info"),Bytes.toBytes("gender"),Bytes.toBytes(arr(2)))  //info:gender列的值
//    put.add(Bytes.toBytes("info"),Bytes.toBytes("age"),Bytes.toBytes(arr(3)))  //info:age列的值
    put.addColumn(Bytes.toBytes("info"),Bytes.toBytes("name"), Bytes.toBytes(arr(1).toString)) //info:name列的值
    put.addColumn(Bytes.toBytes("info"),Bytes.toBytes("gender"),Bytes.toBytes(arr(2)))  //info:gender列的值
    put.addColumn(Bytes.toBytes("info"),Bytes.toBytes("age"),Bytes.toBytes(arr(3)))  //info:age列的值
      (new ImmutableBytesWritable, put)
    }}
    rdd.saveAsNewAPIHadoopDataset(job.getConfiguration)
    sc.stop()
  }
}

写入这里主要修改的还是在配置那里想办法加入了zookeeper.znode.parent,并且我发现put.add会报错,因为hbase在2.x.x之后,hbase-client的Put.add接口变了,从Put.add变成了 Put.addColumn。

Spark连接Hbase并写入数据的两种方法 前面和大家聊过Spark和Hive的集成,以及如何连接MySQL,今天主要就说下Spark连接Hbase,这可能要复杂一点,首先Hbase是列式存储的,结构可能和前面所说的数据库不一样,这样就必须要转换,而且导的依赖包也不一样,不是在maven仓库中所下的。下面就和大家说下。 导入依赖包 接下来spark集成hbase,把hbase中lib下的以下jar包拷贝到spark中的jars文件夹下面: 导入后重新启动Spark就可以了。 有时会报zookeeper的错误,这时可以把zookeeper-3.4.6 阅读详情

相关推荐

使用spark将数据写入Hbase

--------------组装xml并捕获异常------------------- package wondersgroup_0628.com import java.io.{IOException, PrintWriter, StringReader, StringWriter} import java.util.Base64 import com.wonders.TXmltmp im...

YouMe的博客 3100

spark如何导入数据到hbase数据库

spark访问hbase数据库 在实际生产过程中,因为数据的复杂性,我们通常将处理好的数据缓存到hbase中。 本篇文章目的在于在学习过程中做笔记,以备后面的巩固复习。 代码如下 package com.aura.bigdata.dmp.util import org.apache.hadoop.conf.Configuration import org.apache.hadoop.hbase....

qq_42750329的博客 1457

ESP32Servo库驱动SG90舵机:从入门到精准控制

本文详细介绍了如何使用ESP32Servo库驱动SG90舵机,从硬件连接到软件环境搭建,再到编写示例程序实现精准控制。内容涵盖库安装、基础驱动代码解析、舵机校准方法以及平滑运动控制,帮助开发者快速掌握ESP32控制舵机的核心技能,并提供了电源管理、信号抗干扰等实用避坑指南。

ik678901的博客 898

Spark DataFrame写入HBase的常用方式

Spark是目前最流行的分布式计算框架,而HBase则是在HDFS之上的列式分布式存储引擎,基于Spark做离线或者实时计算,数据结果保存在HBase中是目前很流行的做法。例如用户画像、单品画像、推荐系统等都可以用HBase作为存储媒介,供客户端使用。 因此Spark如何向HBase中写数据就成为很重要的一个环节了。本文将会介绍三种写入的方式,其中一种还在期待中,暂且官网即可... 代码在sp...

weixin_34302798的博客 593

深入解析JESD204B Subclass 1中的SYSREF与LMFC同步机制

本文深入解析了JESD204B Subclass 1协议中的核心同步机制,重点阐述了SYSREF信号如何作为系统级参考,对齐所有设备内部的本地多帧时钟(LMFC),从而实现高速多通道数据采集系统中的确定性延迟。文章结合实战经验,详细说明了硬件设计、时序要点及软件配置流程,是解决多ADC芯片同步对齐问题的关键指南。

weixin_29271263的博客 398

图形学常见概念小结

前言:本文记录《unity shader入门精要》和openGL相关学习过程中一些学习要点; 文章目录PBR流程渲染管线细分着色器的底层实现,应用原理常见的色调映射算法openGl和Direct X的区别PBR流程和URP渲染管线Camera loop(剔除)MVP矩阵变换光线追踪前向渲染和延迟渲染shader和材质的区别bloom原理后处理的理解高斯模糊实现原理图像处理中的边缘检测算子 PBR流程 小结:一套基于自然界微平面理论、能量守恒、菲涅尔反射、线性空间等的科学理论所实现的基于物理的渲染系统,包含一

小谁的博客 1163

Spark的DataFrame、RDD写入到HBase的方法(Scala)

一、使用DataFrame.saveAsHadoopDataset(conn)方法。 特点:适合做批量的写入。优点为批量写入方便快捷。缺点对于数据量大的DF写入速度太慢。 val conn = new JobConf(HBaseConfigurationcreate())//设置HBase连接 conn.set(,) conn.set(,)//设置Host和Port conn.set(TableO...

恩特尔派 3255

超声波测距的15度魔法:HC-SR04测量角度特性在机器人避障中的实战技巧

本文深入探讨了HC-SR04超声波测距模块在机器人避障中的15度测量角度特性及其应用技巧。通过分析15度角的工程意义、多模块阵列设计、狭小空间优化方案及温度补偿技术,帮助开发者提升机器人环境感知能力。文章特别强调了HC-SR04模块在低成本避障方案中的核心优势与实战优化策略。

weixin_29172963的博客 430

Spark 读写Hbase

启动 zookeeper----》hadoop----》hbase 创建hbase表student create 'student' ,'info' 添加数据 put 'student' ,'1' ,'info:name','James' put 'student' ,'1' ,'info:age','23' put 'student' ,'1' ,'info:gender','F' put 'student' ,'2' ,'info:name','Smith' put 'studen

4290

傻瓜式下载、安装CentOS7操作步骤

CentOS7.9下载和安装操作步骤

weixin_45608163的博客 1万+

Office Tool Plus:正版Office干净部署指南

Office部署是Windows新机配置的关键环节,涉及版本选择、架构匹配、语言支持与合规激活等基础技术问题。其核心原理基于微软官方Office Deployment Tool(ODT)的声明式XML配置机制,通过标准化流程确保安装可复现、可审计、无第三方捆绑。技术价值在于规避官网安装器的版本锁定、架构误配和语言缺失等常见风险,提升部署稳定性与安全性。典型应用场景包括企业批量部署、IT运维标准化、隐私敏感型用户自主安装。本文以Office Tool Plus为实践载体,深入解析ODT底层逻辑、XML配置规范

1186

Spark往HBase读写数据(Scala语言)

概述 这是原始版本的,不是用phoenix的 准备HBase数据 此时 HBase的ns1下的t1是有数据的 hbase(main):005:0> scan 'ns1:t1' ROW COLUMN+CELL 1001 column=cf1:age, timestamp=1605086867452, value=27 1001 column=cf1:name, timestamp=1605

张俊杰 的博客 1720

基于深度学习的干扰识别

本文是记录我上半年仿真和复现干扰识别的过程,展示的主要是一些需要注意的点以及仿真的相关结果。

qq_55218335的博客 1703

spark 数据写入到 hbase

1)spark把数据写入到hbase需要用到:PairRddFunctions的saveAsHadoopDataset方法,这里用到了 implicit conversion,需要我们引入 import org.apache.spark.SparkContext._ 2)spark写入hbase,实质是借用了org.apache.hadoop.hbase.mapreduce.TableInpu...

potter 2813

手把手教你学SOME/IP「3.2.1.发布/订阅行为」

本文详细介绍了SOME/IP协议中的服务发现机制,重点解析了发布/订阅行为的流程。主要内容包括:1)服务发布与Method通信流程,涵盖find/offer报文交互、TTL保活机制及异常处理;2)服务订阅与Event通信流程,包括subscribe/ack报文交互和组播延迟机制;3)特殊场景如快速发送、半周期回复、重置订阅等机制。通过邮局订阅报纸的类比,帮助理解服务发现的核心原理,并强调流程图对于问题定位的重要性。文章为SOME/IP协议的工程实现提供了实用指导。

nihaoljq2010的博客 1222

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

spark保存数据到hbase_spark 数据写入到 hbase

1)spark把数据写入到hbase需要用到:PairRddFunctions的saveAsHadoopDataset方法,这里用到了implicit conversion,需要我们引入import org.apache.spark.SparkContext._2)spark写入hbase,实质是借用了org.apache.hadoop.hbase.mapreduce.TableInputFor...

weixin_39576018的博客 640

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

spark 存入hbase_spark将数据写入hbase以及从hbase读取数据

本文将介绍1、spark如何利用saveAsHadoopDataset和saveAsNewAPIHadoopDataset将RDD写入hbase2、spark从hbase中读取数据并转化为RDD操作方式为在eclipse本地运行spark连接到远程的hbase。java版本:1.7.0scala版本:2.10.4zookeeper版本:3.4.5(禁用了hbase自带zookeeper,选择自己部...

weixin_29974217的博客 1073

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

spark保存数据到hbase_使用spark将数据写入Hbase

--------------组装xml并捕获异常-------------------package wondersgroup_0628.comimport java.io.{IOException, PrintWriter, StringReader, StringWriter}import java.util.Base64import com.wonders.TXmltmpimport org...

weixin_39906130的博客 457

spark读取kafka数据写入hbase

package com.prince.demo.test import java.util.UUID import com.typesafe.config.{Config, ConfigFactory} import org.apache.hadoop.hbase.HBaseConfiguration import org.apache.hadoop.hbase.client.Put impo...

最怕你一生碌碌无为 还安慰自己平凡可贵 3843

Spark读取Hive数据写入Hbase

使用spark方式写入 在使用Spark时经常需要把数据落入HBase中,如果使用普通的Java API,写入会速度很慢。还好Spark提供了Bulk写入方式的接口。那么Bulk写入与普通写入相比有什么优势呢? BulkLoad不会写WAL,也不会产生flush以及split。 如果我们大量调用PUT接口插入数据,可能会导致大量的GC操作。除了影响性能之外,严重时甚至可能会对HBase节点的...

Baron_ND的博客 2184

spark-整合Phoenix将数据写入Hbase

文章目录一 环境准备1.1 pom文件1.2 config配置:1.3 properties解析工具类1.4 HbaseUtil工具类1.5 kafkaUtil根据指定的topic返回对应的Dstream1.6 jedisUtils从连接池中获取Jedis连接实例1.7 样例类二 Spark直接将数据写入Hbase三 Spark整合Phoenix将数据写入hbase四遇到的问题问题1 :Phoen...

Master_chaoAndQi的博客 3081

Spark写入数据到hbase,本地idea运行

废话不多说,上代码: package day02.com.toHbase import org.apache.hadoop.hbase.HBaseConfiguration import org.apache.hadoop.hbase.client.Put import org.apache.hadoop.hbase.io.ImmutableBytesWritable import org.apache.hadoop.hbase.mapred.TableOutputFormat import org.

东城庞太师 660
上一篇: PySpark写入数据到Hbase的辛酸经历
下一篇: Spark写入数据到Hbase(下)解决scala.Predef$.refArrayOps([Ljava/lang/Object;)Lscala/collection/mutable/ArrayOps
铲子挖数据
博客等级 码龄8年 24粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值