SparkSQL同步Hbase数据到Hive表

SparkSQL同步Hbase数据到Hive表,第1张

spark 2.3.0

hive 3.0.0

hbase 2.0.0

常规 *** 作 hbase数据同步到hive是通过再hive端建立hbase的映射表。

但是由于集群组件问题,建立的映射表不能进行

insert into A select * from hbase映射表

*** 作。报错!

org.apache.hadoop.hbase.client.RetriesExhaustedException: Can't get the location for replica 0

at org.apache.hadoop.hbase.client.RpcRetryingCallerWithReadReplicas.getRegionLocations(RpcRetryingCallerWithReadReplicas.java:332)

spark读取hbase数据形成RDD,构建schma信息,形成DF

通过sparkSQL 将df数据写入到指定的hive表格中。

hadoop本地环境版本一定要与依赖包版本保持一直,不然报如下错误

java.lang.IllegalArgumentException: Unrecognized Hadoop major version number: 3.1.1

hbase 1.X与2.X有很大差距,所以再看案例参考是一定要结合自己的hbase版本。

笔者程序编译中遇到

Cannot Resolve symbol TableInputFormat HBase找不到TableInputFormat

因为:新版本2.1.X版本的HBASE又把mapreduce.TableInputFormat单独抽取出来了

需要导入依赖

<dependency>

<groupId>org.apache.hbase</groupId>

<artifactId>hbase-mapreduce</artifactId>

<version>${hbase.version}</version>

</dependency>

一定要把hbase相关的包都cp 到spark的jars文件下面。然后重启spark服务。

不然你会遇到此类错误

Class org.apache.hadoop.hive.hbase.HBaseSerDe not found

或者

java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration

这些都是缺少jar包的表现。

摘要: Spark SQL , Hive

新建hive表,定义好字段类型和 分区字段

将DataFrame创建为视图表,创建一个分区字符串对象,使用 insert overwrite 指定 partition(dt=????) 进行指定分区的overwrite *** 作

建表之后test为一张空表,分别指定三次插入overwrite *** 作,dt分别为"20201203","20201203","20201208",最终结果只有两个分区的数据

Hive是目前大数据领域,事实上的SQL标准。其底层默认是基于MapReduce实现的,但是由于MapReduce速度实在比较慢,因此这几年,陆续出来了新的SQL查询引擎,包括Spark SQL,Hive On Tez,Hive On Spark等。

Spark SQL与Hive On Spark是不一样的。Spark SQL是Spark自己研发出来的针对各种数据源,包括Hive、JSON、Parquet、JDBC、RDD等都可以执行查询的,一套基于Spark计算引擎的查询引擎。因此它是Spark的一个项目,只不过提供了针对Hive执行查询的工功能而已,适合在一些使用Spark技术栈的大数据应用类系统中使用。

而Hive On Spark,是Hive的一个项目,它是将Spark作为底层的查询引擎(不通过MapReduce作为唯一的查询引擎)。Hive On Spark,只适用于Hive,在可预见的未来,很有可能Hive默认的底层引擎就从MapReduce切换为Spark了;适合于将原有的Hive数据仓库以及数据统计分析替换为Spark引擎,作为全公司通用的大数据统计分析引擎。

Hive On Spark做了一些优化:

1、Map Join

Spark SQL默认对join是支持使用broadcast机制将小表广播到各个节点上,以进行join的。但是问题是,这会给Driver和Worker带来很大的内存开销。因为广播的数据要一直保留在Driver内存中。所以目前采取的是,类似乎MapReduce的Distributed Cache机制,即提高HDFS replica factor的复制因子,以让数据在每个计算节点上都有一个备份,从而可以在本地进行数据读取。

2、Cache Table

对于某些需要对一张表执行多次 *** 作的场景,Hive On Spark内部做了优化,即将要多次 *** 作的表cache到内存中,以便于提升性能。但是这里要注意,并不是对所有的情况都会自动进行cache。所以说,Hive On Spark还有很多不完善的地方。

Hive QL语句 =>

语法分析 =>AST =>

生成逻辑执行计划 =>Operator Tree =>

优化逻辑执行计划 =>Optimized Operator Tree =>

生成物理执行计划 =>Task Tree =>

优化物理执行计划 =>Optimized Task Tree =>

执行优化后的Optimized Task Tree


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8139497.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存