spark相关问题解决记录 lz4压缩parquet

1.最近想用spark输出parquet,但在用lz4压缩时出现了问题,各种报错.

首先是报错的是native lz4 library not available,这个我查了蛮久,大概就是hadoop中少了/Hadoop_Path/lib/native 中少了一个so. 因为这个报错是我在本地装了单机版本的spark, 其中的hadoop版本是pre-built在里面的.

好在服务器集群中是没问题的.

然后在服务器运行的时候又报错了.报错信息是No enum constant org.apache.parquet.hadoop.metadata.CompressionCodecName.LZ4.经过我查看,主要是版本问题,CompressionCodecName的对应的parquet-common应该需要的是1.10版本,而服务器只有是1.9版本,这就需要替换相应的包了.经过找了一圈解决方法,最后发现spark-submit有个参数,可以优先加载自己的包.设置如下,true表示优先使用自己提供的包.

--conf spark.driver.userClassPathFirst=true --conf spark.executor.userClassPathFirst=true

建议你把parquet需要的几个包全部添加到jars_dir中,然后在spark-submit添加下面参数,以及上面说的参数.这样就可以解决这些问题了.

 --conf spark.executor.extraClassPath='/jars_dir/*'  \
 --conf spark.driver.extraClassPath='/jars_dir*'  \

parquet需要的包主要有下面这些,你都添加进去就好了

 <dependency>
       <groupId>org.apache.parquet</groupId>
       <artifactId>parquet-column</artifactId>
       <version>${parquet.version}</version>
   </dependency>
   <dependency>
       <groupId>org.apache.parquet</groupId>
       <artifactId>parquet-hadoop</artifactId>
       <version>${parquet.version}</version>
   </dependency>
   <dependency>
       <groupId>org.apache.parquet</groupId>
       <artifactId>parquet-avro</artifactId>
       <version>${parquet.version}</version>
   </dependency>
   <dependency>
       <groupId>org.apache.parquet</groupId>
       <artifactId>parquet-common</artifactId>
       <version>${parquet.version}</version>
   </dependency>
   <dependency>
       <groupId>org.apache.parquet</groupId>
       <artifactId>parquet-format-structures</artifactId>
       <version>${parquet-format-structures.version}</version>
   </dependency>
   <dependency>
       <groupId>org.apache.parquet</groupId>
       <artifactId>parquet-encoding</artifactId>
       <version>${parquet.version}</version>
   </dependency>

2.spark 提交任务, 报错class not found 以及main class not found等问题,为什么我们配置了main class而且class文件也在jar包中还会出现这种问题,是因为我们把spark hadoop包也打包到jar包了,或者添加到extraClassPath中.(不是指pom.xml,这个添加不影响)

解决方法:把spark hadoop的包拿掉,比如spark-core ,spark-sql, parquet-format 等等.除非你要替换的话就参考1.

3.另外附上查看某个类具体使用的是哪个包的代码

classOf[redis.clients.jedis.JedisPool].getProtectionDomain.getCodeSource.getLocation.toString)

感谢这篇博客提供的帮助,解决了我的大忙.

https://www.twblogs.net/a/5d5f2dd0bd9eee5327fdef10

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值