本文适用有入门spark基础的同学,一些最基础知识不再赘述
通过阅读本文即可掌握使用Spark跨集群同步Hive数据的技巧!
众所周知,业界比较成熟的同步数据工具是Sqoop,它是连接关系型数据库和Hadoop的桥梁
比较常用的场景是从MySQL等RDB同步到Hive、Hbase或者将Hive、Hbase的数据导出到MySQL
但是在天池技术选型时选用了用Spark来从大数据集群同步数据到大禹集群
下面来比较一下这两种方式:
①Sqoop使用配置化,Spark需要代码开发
学习成本上使用Spark稍微高一些,但是同步数据复杂一些Sqoop的配置也不见得很简单
②Sqoop在同步数据进行存储时仍需要启动MapReduce任务,Spark使用自身框架进行内存计算
在效率上Spark比Sqoop要高
③Sqoop1和Sqoop2不能完全兼容,且网上在不同集群的Hive间同步数据的资料也比较少,出现问题时不保证能解决
所以选用了Spark作为天池的数据同步方式
下面就来介绍如何使用Spark进行数据同步
1.抽取数据文件
1.1 创建Spark入口对象指定源数据的Hive元数据服务
扩展:在远程连接Hive时Hive有两种服务Hive Metastore Server和HiveServer2
HiveServer2是JDBC连接,使用这种方式会占用数据本地集群的计算资源(常用默认端口10000的那种)
Spark连接Hive可以使用Hive Metastore Server,这样只需连接Hive的元数据,通过元数据记录的数据路径拉取数据使用Spark对数据进行计算(常用默认端口9083的那种)
在创建SparkSession对象时动态传参传入源数据集群的Hive Metastore Server地址