背景描述:最近开发了一个maven项目,想使用spark读取/写入greenplum数据,但是由于jdbc的传输速度限制。

根据网上描述使用greenplum-spark connect这个连接器   spark读取/写入greenplum的效率会高很多。

但是,由于使用的Spark是华为官方提供的FusionInsight HD导致了依赖冲突

使用连接器出现的问题          

                                                                                       

1、由于这个依赖属于第三方并不是maven仓库官方提供所以没法直接加载进入项目中,先将他放到私有仓库然后打包成uber-jar一起提交,但是Spark集群还是识别不了,报错信息也是没有找到相关依赖。

报错信息:Caused by: java.lang.ClassNotFoundException: greenplum.DefaultSource              

                           

2、使用--jars将项目和这个依赖包一起提交上去的时候出现了jar包冲突 报错:org.postgresql.util.PSQLException。                                                                                                 网上查找原因,可能是华为的数据生态湖自带的某些依赖与提供的依赖产生冲突。

项目外的依赖,没法通过重定向命名解决依赖冲突问题。

报错信息:class threw exception: org.postgresql.util.PSQLException: FATAL: password authentication failed for user "vt_app"

3、指定参数优先加载用户提供的依赖 --conf spark.driver.userClassPathFirst=true --conf spark.executor.userClassPathFirst=true                     

查找原因网上解释集群环境中存在与 --jars 中指定的版本冲突的类库,所以导致了类加载冲突的问题

报错信息:Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: class org.apache.hadoop.security.JniBasedUnixGroupsMappingWithFallback not org.apache.hadoop.security.GroupMappingServiceProvider

4、将源代码直接加入项目中使用,由于没有网上现成的源代码。只能通过反编译软件操作。

有部分类是通过scala语言写的,加入项目中直接报错。所以行不通

但是:通过把第三方依赖放入私有仓库,使用idea读取数据   或者使用spark-submit local模式提交 --jars指定参数全都可以执行成功  自己搭建的开源环境使用greenplum-spark也可以正常访问

版本号

greenplum版本:6.20.3

Spark版本:2.3.2

Greenplum-spark connect版本:2.1.0

提交命令

sh /data/jc_client/Spark2x/spark/bin/spark-submit --class com.zgyd.greenplum.Gp03 --jars greenplum-connector-apache-spark-scala_2.11-2.1.1.jar --master yarn --deploy-mode cluster hive_spark_test04-1.0-SNAPSHOT-shade.ja

精彩文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。