SparkSQL同步Hbase数据到Hive表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SparkSQL同步Hbase数据到Hive表相关的知识,希望对你有一定的参考价值。
参考技术A spark 2.3.0hive 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包的表现。
Logstash同步Hive和Clickhouse
参考技术A工作中我们遇到了把Hive数据同步到Clickhouse的业务需求,一开始我们写Spark任务,用SparkSQL读Hive,再用JDBC写入到Clickhouse。
后来,随着要同步的表越来越多,每次都写Spark任务,成本就显得有些高了。于是,写了一个通用的Spark任务,指定Hive表、字段,指定Clickhouse表、字段,每次指定不同的参数。
再后来,业务越来越复杂,不仅是简单的同步,而是要支持更复杂的SQL,结果进行数据类型转换、值转化等,然后再插入Clickhouse。
这不是ETL要干的事儿吗?!
当然,继续增强之前的Spark,完全可以实现这个功能。但是说到ETL,不是有专业强大的Logstash吗,为什么要重复造轮子?
经过一番调研,还真有人写了Logstash插件,用来导出数据到Clickhouse: logstash-output-clickhouse
输出端搞定了,输入端怎么搞呢?很建达,用JDBC插件就可以了。
如上,配置jdbc连接信息即可。
需要说明的是,相关的jar包比较多,需要给全了,否则会有各种ClassNotFoundException。完整的jar列表为:
这些jar最好与hive环境版本一致,我们用的是CDH版,所以都是从CDH目录下找到的jar。
Clickhouse插件使用说明参考: https://github.com/mikechris/logstash-output-clickhouse
主要说下安装过程。
说明文档里说的 bin/logstash-plugin install logstash-output-clickhouse 方式,没有安装成功,所以只能自己编译安装。
先clone源码,然后进入源码根路径:
编译:
此时,若没有安装ruby环境,按照提示安装一下,再编译。
编译成功后,会多出一个文件
安装:
logstash的安装就不多说了,按照logstash官方文档安装就可以了。
此时,如果logstash版本是5.x,可能会遇到一个错误:
按照提示,修改gemfile:
修改logstash-mixin-http_client的版本:
原来是>6且<7,改成>5且<6。
然后,再次编译、安装,就可以了。
按照文档中的使用说明,配置Clickhouse连接信息即可:
这部分工作可以放在filter里处理,各种filter插件就不说了,参考logstash官方文档吧。
以上是关于SparkSQL同步Hbase数据到Hive表的主要内容,如果未能解决你的问题,请参考以下文章