问题描述

报错

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)

spark 读取小文件 spark读取lzo文件_大数据

由于lzo压缩本身不属于hadoop体系自带压缩方式以及spark自带的解析方式
所以往往需要额外配置

在大数据集群中 所使用压缩完全没有问题的,hadoop以及spark会自己调用lzo存在的目录
进行读取,但是idea 本地环境想要读取lzo文件,就要使本地环境支持lzo依赖

出于开发的便利,需要idea中读取到lzo压缩的数据

参考:

一共三个文件

spark 读取小文件 spark读取lzo文件_大数据_02

plcompression.dlllzo2.dllhadoop-lzo-0.4.21-SNAPSHOT.jar

gplcompression.dlllzo2.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的不同更换版本

spark 读取小文件 spark读取lzo文件_hadoop_03

参考如下步骤:

(1)将spark解压

spark 读取小文件 spark读取lzo文件_大数据_04

(2)在解压后的spark压缩包中,如下jars文件夹则为spark相关jar

spark 读取小文件 spark读取lzo文件_大数据_05

(3) 在项目工程目录下,新建一个lib目录,用于放依赖jar,

spark 读取小文件 spark读取lzo文件_hadoop_06

(4)在lib目录下建一个spark文件夹,将jars内的jar全拷贝到spark文件中,见下图。

spark 读取小文件 spark读取lzo文件_jar_07

(5)将 hadoop-lzo-0.4.21-SNAPSHOT.jar 拉入到此目录中

(6)打开“excise”工程双击如下

spark 读取小文件 spark读取lzo文件_jar_08


(7)点Libraries -> “+”-> java

spark 读取小文件 spark读取lzo文件_大数据_09

(8) 再在弹出框中选中spark下的所有jar后,如下第一张图,点击ok后,出现如下第二张图。最后点OK.

spark 读取小文件 spark读取lzo文件_hadoop_10


spark 读取小文件 spark读取lzo文件_hadoop_11

(9)注释掉 原理maven导入的依赖 不然会出现 jar重复的依赖

spark 读取小文件 spark读取lzo文件_大数据_12

spark 读取小文件 spark读取lzo文件_hadoop_13

即可读取 相关数据 注意spark.sql 会自动识别相关压缩

提示

需要开启元数据服务

spark会根据配置文件连接元数据

spark 读取小文件 spark读取lzo文件_jar_14

开启元数据服务命令

hive --service metastore