Spark/SparkSQL读取Hadoop LZO文件概述

embedded/2024/10/18 18:13:54/

一、前置配置

  • IDEA
  • Maven安装配置
  • Scala(可选)
  • Java
  • Hadoop.dll(可能需要,具体看有无相关错误信息)
  • hadoop-lzo-0.xx.xx.jar(如果你的版本过高,需要到官网下载高版本,mvnrepository仓库里面最高0.4.15;我是spark 2.2.0,用的hadoop-lzo-0.4.21.jar;如果你使用的Spark/Hadoop版本比较低,可以直接使用pom依赖即可)

二、操作步骤

  1. IDEA中新建一个Project/Module
  2. pom.xml中引入相关依赖(Spark、Hadoop等等)
  3. 编写读取lzo文件代码
  4. 测试运行
  5. 打包到服务器运行

三、操作说明

1和2略过,讲一下3、4、5,错误一般在这三个阶段出现。

(一)编写读取lzo文件代码

必须的内容:

    val conf = new Configuration()conf.set("dfs.client.use.datanode.hostname", "true")conf.set("io.compression.codecs", "org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,com.hadoop.compression.lzo.LzopCodec")conf.set("io.compression.codec.lzo.class", "com.hadoop.compression.lzo.LzoCodec")

hostname是用于有内外网IP的情况下,找到了元数据但无法建立连接的配置;
后面两个配置,则是用于读取lzo文件,否则会报错: java.io.IOException: Codec for file hdfs:xxx.lzo not found, cannot run

import com.hadoop.mapreduce.LzoTextInputFormatval value = ss.sparkContext.newAPIHadoopFile(hdfsLzoPath, classOf[LzoTextInputFormat], classOf[LongWritable], classOf[Text], conf).mapPartitions(p => p.map(row => row._2.toString))

这一部分就是调包读取了,注意LzoTextInputFormat的包是否正确

(二)测试运行

如果运行报错:ERROR lzo.LzoCodec: Cannot load native-lzo without native-hadoop,那就是没有相关的环境依赖。
如果是Linux环境,则是没有安装lzo和lzop(.a),如果是本地开发环境,则是没有lzo的依赖(.dll)。
解决办法:Linux安装lzo包,如果是Windows,则将dll文件添加到hadoop_home目录中
dll

(三)打包到服务器运行

如果版本比较低,直接引用mvnrepository的依赖坐标,一般不存在运行问题,如果是引入的jar包,则有可能会报错,ERROR lzo.LzoCodec: Cannot load native-lzo without native-hadoop。这个错误和上面的错误是一样的,但不是环境问题,而是打包过程中,本地依赖没有被一并打入jar包。解决办法:将本地的jar制作为依赖,引入到pom中。

  1. 执行:mvn install:install-file -Dfile=hadoop-lzo-0.4.21-SNAPSHOT.jar -DgroupId=hadoop-lzo -DartifactId=hadoop-lzo -Dversion=0.4.21 -Dpackaging=jar

格式:
mvn install:install-file
-Dfile=jar包的位置
-DgroupId=pom文件里的groupId
-DartifactId=pom文件里的artifactId
-Dversion=pom文件里的version
-Dpackaging=jar

  1. 在pom中正常引入即可
    pom

也可以考虑找一个有高版本hadoop-lzo的仓库地址,配置到maven.setting.xml中


http://www.ppmy.cn/embedded/6120.html

相关文章

文心一言 vs GPT-4 —— 全面横向比较

比较文心一言和 GPT-4 时,需要考虑它们的特点、优缺点以及适用场景。以下是它们的全面横向比较: 文心一言 特点: 基于预定义的模板和规则,生成简短的句子,通常为一句话。 主要用于生成文案、情话、格言等短文本内容。…

QT中的OpenGL学习------向量

一、线性代数知识 1.1 向量的点乘与叉乘 1.2 矩阵 1.3 旋转、缩放、位移 二、代码实现 #include "openglwidget.h"unsigned int VBO, VAO, EBO; float ratio 0.5; float vertices[] {//positions //colors //texture coordinates0.3f, 0.3f, 0.0f, 1.0f, 0.0f, 0…

npm常用命令详解(二)

npm(Node Package Manager)是Node.js的包管理器,它允许你安装、共享和管理Node.js代码库。以下是一些常用的npm命令及其详解,以帮助您更好地理解和使用它。 1. npm doc 功能:查看指定包的文档。 语法:np…

探索MongoDB:灵活、高性能的NoSQL数据库解决方案与应用实践

MongoDB是一种NoSQL数据库,采用文档型数据模型,适合存储和处理非结构化或半结构化的数据。它具有高度的灵活性和可扩展性,被广泛应用于Web应用、大数据分析、物联网和实时数据处理等领域。 MongoDB主要特点 1. 文档存储 MongoDB采用文档型…

QT-输入输出

C 中的输入和输出(I/O)主要是通过标准库中的输入输出流来实现的。最常用的是 iostream 库,它 提供了用于输入和输出的基本流类,包括cin,cout,cerr和clog。 1.标准输出流 ( cout ) cout 代表标…

缓存之SpringCache整合redis

Spring Cache 是 Spring 框架提供的一种缓存抽象,在应用中可以方便地使用它来进行方法级别的缓存。结合 Redis 作为缓存存储后端,可以实现高性能的缓存服务。下面是一个简单的示例,演示了如何在 Spring Boot 项目中整合 Spring Cache 和 Redi…

《设计模式之美》第三章 总结

《设计模式之美》总结 第三章 设计原则 3.1 单一职责原则:如何判定某个类的职责是否单一 3.1.1 单一职责原则的定义和解读 定义:一个类或模块只负责完成一个职责(功能) 含义:不要设计功能大而全的类或模块&#xff…

kafka---topic详解

一、分区与高可用 在Kafka中,事件(events 事件即消息)是以topic的形式进行组织的;同时topic是分区(partitioned)的,这意味着一个topic分布在Kafka broker上的多个“存储桶”(buckets)上。这种数据的分布式放置对于可伸缩性非常重要,因为它允许客户端应用程序同时从多个…