1.最近想用spark输出parquet,但在用lz4压缩时出现了问题,各种报错.
首先是报错的是native lz4 library not available,这个我查了蛮久,大概就是hadoop中少了/Hadoop_Path/lib/native 中少了一个so. 因为这个报错是我在本地装了单机版本的spark, 其中的hadoop版本是pre-built在里面的.
好在服务器集群中是没问题的.
然后在服务器运行的时候又报错了.报错信息是No enum constant org.apache.adata.CompressionCodecName.LZ4.经过我查看,主要是版本问题,CompressionCodecName的对应的parquet-common应该需要的是1.10版本,而服务器只有是1.9版本,这就需要替换相应的包了.经过找了一圈解决方法,最后发现spark-submit有个参数,可以优先加载自己的包.设置如下,true表示优先使用自己提供的包.
--conf spark.driver.userClassPathFirst=true --utor.userClassPathFirst=true
建议你把parquet需要的几个包全部添加到jars_dir中,然后在spark-submit添加下面参数,以及上面说的参数.这样就可以解决这些问题了.
--aClassPath='/jars_dir/*' --conf aClassPath='/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中.(不是指l,这个添加不影响)
解决方法:把spark hadoop的包拿掉,比如spark-core ,spark-sql, parquet-format 等等.除非你要替换的话就参考1.
3.另外附上查看某个类具体使用的是哪个包的代码
classOf[redis.clients.jedis.JedisPool].String)
感谢这篇博客提供的帮助,解决了我的大忙.
本文发布于:2024-01-28 23:00:26,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170645403110912.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |