Spark 读Hive并写入HBase
package com.grady
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.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.mapred.JobConf
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.SparkSession
object SparkHiveToHbase {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("sparkHiveToHbase")
    val spark: SparkSession = SparkSession.builder().config(conf).enableHiveSupport().getOrCreate()
    val sc = spark.sparkContext
    val rdd: RDD[Student] = readDataFromHive(spark)
    writeDataToHbase(rdd, sc)
    spark.stop()
  }
  def readDataFromHive(spark: SparkSession): RDD[Student] = {
    val dataFrame = spark.sql("select * from jiang.student")
    dataFrame.rdd.map(r =>
      Student(r(0).toString.toInt, r(1).toString, r(2).toString, r(3).toString.toInt, r(4).toString)
    )
  }
  def writeDataToHbase(rdd: RDD[Student], sc: SparkContext): Unit = {
    val tablename = "jiang:student"
    val hbaseConf = HBaseConfiguration.create()
    hbaseConf.set("hbase.zookeeper.quorum","10.82.232.64")
    hbaseConf.set("hbase.zookeeper.property.clientPort", "2181")
    hbaseConf.set("zookeeper.znode.parent", "/hbase")
    hbaseConf.set(TableOutputFormat.OUTPUT_TABLE, tablename)
    val jobConf = new JobConf(hbaseConf)
    jobConf.setOutputFormat(classOf[TableOutputFormat])
    val hbaseRDD = rdd.map(student => {
      val put = new Put(Bytes.toBytes("hive:" + student.id))
      put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("name"), Bytes.toBytes(student.name))
      put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("age"), Bytes.toBytes(student.age.toString))
      (new ImmutableBytesWritable, put)
    })
    hbaseRDD.saveAsHadoopDataset(jobConf)
  }
}
case class Student(id: Int, name: String, sex: String, age: Int, department: String)
执行: spark-submit --master local[2] --num-executors 10  --class com.grady.SparkHiveToHbase /app/data/appdeploy/usehive1-1.0-SNAPSHOT.jar
日志:
hbase(main):011:0> scan 'jiang:student'
ROW                          COLUMN+CELL
 1                           column=cf:age, timestamp=2022-02-08T16:27:01.290, value=15
 1                           column=cf:name, timestamp=2022-02-08T16:27:01.290, value=jack
 2                           column=cf:age, timestamp=2022-02-08T16:27:01.290, value=16
 2                           column=cf:name, timestamp=2022-02-08T16:27:01.290, value=Lily
 3                           column=cf:age, timestamp=2022-02-08T16:27:01.290, value=16
 3                           column=cf:name, timestamp=2022-02-08T16:27:01.290, value=mike
 hive:1                      column=cf:age, timestamp=2022-02-08T17:24:24.477, value=10
 hive:1                      column=cf:name, timestamp=2022-02-08T17:24:24.477, value=xiaojiang
 hive:2                      column=cf:age, timestamp=2022-02-08T17:24:24.477, value=10
 hive:2                      column=cf:name, timestamp=2022-02-08T17:24:24.477, value=xiaochen
Spark 读Hive并写入HBase的更多相关文章
- Spark 读 Hive(不在一个 yarn 集群)
		方法一 1. 找到目标 Hive 的 hive-site.xml 文件,拷贝到 spark 的 conf 下面. 在我的情况下 /etc/hive/conf/hive-site.xml -> / ... 
- spark踩坑——dataframe写入hbase连接异常
		最近测试环境基于shc[https://github.com/hortonworks-spark/shc]的hbase-connector总是异常连接不到zookeeper,看下报错日志: 18/06 ... 
- 大数据核心知识点:Hbase、Spark、Hive、MapReduce概念理解,特点及机制
		今天,上海尚学堂大数据培训班毕业的一位学生去参加易普软件公司面试,应聘的职位是大数据开发.面试官问了他10个问题,主要集中在Hbase.Spark.Hive和MapReduce上,基础概念.特点.应用 ... 
- Spark读HBase写MySQL
		1 Spark读HBase Spark读HBase黑名单数据,过滤出当日新增userid,并与mysql黑名单表内userid去重后,写入mysql. def main(args: Array[Str ... 
- Spark:DataFrame批量导入Hbase的两种方式(HFile、Hive)
		Spark处理后的结果数据resultDataFrame可以有多种存储介质,比较常见是存储为文件.关系型数据库,非关系行数据库. 各种方式有各自的特点,对于海量数据而言,如果想要达到实时查询的目的,使 ... 
- 大数据学习day34---spark14------1 redis的事务(pipeline)测试 ,2. 利用redis的pipeline实现数据统计的exactlyonce ,3 SparkStreaming中数据写入Hbase实现ExactlyOnce, 4.Spark StandAlone的执行模式,5 spark on yarn
		1 redis的事务(pipeline)测试 Redis本身对数据进行操作,单条命令是原子性的,但事务不保证原子性,且没有回滚.事务中任何命令执行失败,其余的命令仍会被执行,将Redis的多个操作放到 ... 
- MapReduce和Spark写入Hbase多表总结
		作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 大家都知道用mapreduce或者spark写入已知的hbase中的表时,直接在mapreduc ... 
- Spark DataFrame写入HBase的常用方式
		Spark是目前最流行的分布式计算框架,而HBase则是在HDFS之上的列式分布式存储引擎,基于Spark做离线或者实时计算,数据结果保存在HBase中是目前很流行的做法.例如用户画像.单品画像.推荐 ... 
- spark  将dataframe数据写入Hive分区表
		从spark1.2 到spark1.3,spark SQL中的SchemaRDD变为了DataFrame,DataFrame相对于SchemaRDD有了较大改变,同时提供了更多好用且方便的API.Da ... 
随机推荐
- VisionPro · C# · 图像保存
			根据客户要求,每次视觉取像运行完毕后,按需保存OK或NG图像,图像分两种: 1.带视觉工具运行结果图像: 2.相机取像原图,.bmp格式. 保存图像代码如下: using System; using ... 
- 【python基础】第09回 数据类型内置方法 01
			本章内容概要 1.数据类型的内置方法简介 2.整型相关方法 3.浮点型相关方法 4.字符串相关方法 5.列表相关方法 本章内容详情 1.数据类型的内置方法简介 数据类型是用来记录事物状态的,而事物的状 ... 
- windows下telnet的用法
			前言 这里利用Windows7下如何使用Telnet命令给大家总结如下: 第一步:在控制面板里,点击"程序"选项 第二步:在程序选项下,点击"打开或关闭Windows功能 ... 
- centos系统和Ubuntu系统命令区别以及常见操作
			目录 一.前言 二.系统环境 三.命令区别 3.1 使用习惯和命令区别 3.2 服务管理的区别 3.3 软件包信息区别 四.Ubuntu系统常见操作 4.1 Ubuntu系统apt和apt-get的区 ... 
- Python递归函数的定义和几个小例子
			递归函数 (1)什么是递归函数? 我们都知道,一个函数可以调用其他函数.如果这个函数在内部调用它自己,那么这个函数就叫递归函数. (2)递归函数的作用 举个例子,我们来计算阶乘 n! = 1 * 2 ... 
- NC15979 小q的数列
			NC15979 小q的数列 题目 题目描述 小q最近迷上了各种好玩的数列,这天,他发现了一个有趣的数列,其递推公式如下: \[f[i] = \left\{ \begin{array}{l} 0 ,&a ... 
- 内存分析器 (MAT)
			内存分析器 (MAT) 1. 内存分析器 (MAT) 1.1 MAT介绍 MAT是Memory Analyzer tool的缩写.指分析工具. 1.2 MAT作用 Eclipse Memory ... 
- @RequestMapping注解的属性,将请求约束精细化
			package com.atguigu.controller; import org.springframework.stereotype.Controller; import org.springf ... 
- 华为Mate14上安装Ubuntu20.04纪要
			Ubuntu16.04用了将近五年了,已经好几年没折腾过系统,所以简要记录一下. 1. 关于UEFI分区,之前的笔记本UEFI是可选的(只是默认该模式),Bios里面还有其他选项.一般安装系统之前 ... 
- do-while循环和三种循环的区别
			循环语句3--do...while do...while循环格式 初始化表达式① do{ 循环体③ 步进表达式④ }while(布尔表达式②); 执行流程 执行顺序:①③④>②③④>②③④ ... 
