问题描述
报错
bug:
22/09/25 23:28:14 INFO GPLNativeCodeLoader: Loaded native gpl library
22/09/25 23:28:14 WARN LzoCompressor: java.lang.NoSuchFieldError: lzoCompressLevelFunc
22/09/25 23:28:14 ERROR LzoCodec: Failed to load/initialize native-lzo library
22/09/25 23:28:14 ERROR Executor: Exception in task 0.0 in stage 1.0 (TID 1)
java.lang.RuntimeException: native-lzo library not available
at com.hadoop.compression.lzo.LzoCodec.getDecompressorType(LzoCodec.java:175)
at org.apache.hadoop.io.compress.CodecPool.getDecompressor(CodecPool.java:176)
由于lzo压缩本身不属于hadoop体系自带压缩方式以及spark自带的解析方式
所以往往需要额外配置
在大数据集群中 所使用压缩完全没有问题的,hadoop以及spark会自己调用lzo存在的目录
进行读取,但是idea 本地环境想要读取lzo文件,就要使本地环境支持lzo依赖
出于开发的便利,需要idea中读取到lzo压缩的数据
参考:http://t.csdn.cn/xIDRa
一共三个文件
plcompression.dll、lzo2.dll、hadoop-lzo-0.4.21-SNAPSHOT.jar
将gplcompression.dll、lzo2.dll 放到 C:\Windows\System32 目录下
增加依赖 【此项可能无作用】
<dependency>
<groupId>com.hadoop.compression</groupId>
<artifactId>com.hadoop.compression</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/hadoop-lzo-0.4.20-SNAPSHOT.jar</systemPath>
</dependency>
如果仍然报错
选择官网的jar包进行导入idea 进行依赖的创建
https://archive.apache.org/dist/spark/spark-2.4.5/
官网下载 spark-2.4.5-bin-hadoop2.7.tgz 注意根据lzo和spark的不同更换版本
参考如下步骤:
(1)将spark解压
(2)在解压后的spark压缩包中,如下jars文件夹则为spark相关jar
(3) 在项目工程目录下,新建一个lib目录,用于放依赖jar,
(4)在lib目录下建一个spark文件夹,将jars内的jar全拷贝到spark文件中,见下图。
(5)将 hadoop-lzo-0.4.21-SNAPSHOT.jar 拉入到此目录中
(6)打开“excise”工程双击如下
(7)点Libraries -> “+”-> java
(8) 再在弹出框中选中spark下的所有jar后,如下第一张图,点击ok后,出现如下第二张图。最后点OK.
(9)注释掉 原理maven导入的依赖 不然会出现 jar重复的依赖
即可读取 相关数据 注意spark.sql 会自动识别相关压缩
提示
需要开启元数据服务
spark会根据配置文件连接元数据
开启元数据服务命令
hive --service metastore