Spark/SparkSQL读取Hadoop LZO文件概述

一、前置配置

  • 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文件代码

必须的内容:

java 复制代码
    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

java 复制代码
import com.hadoop.mapreduce.LzoTextInputFormat

    val 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目录中

(三)打包到服务器运行

如果版本比较低,直接引用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中正常引入即可

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

相关推荐
Freed&11 分钟前
部署 Kibana 8.2.2 可视化管理 Elasticsearch 8.2.2 集群
大数据·elasticsearch·搜索引擎
WongKyunban16 分钟前
AWS服务分类
大数据·云计算·aws
涛思数据(TDengine)32 分钟前
可信数据库大会现场,TDengine 时序数据库展示核电场景下的高性能与 AI 创新
大数据·运维·数据库·人工智能·时序数据库·tdengine·涛思数据
fly五行1 小时前
Git基础玩法简单描述
大数据·git·搜索引擎·gitee
Pitayafruit11 小时前
程序员的大数据修炼之道01:建立你的大数据知识体系
大数据
数据与人工智能律师11 小时前
智能合约漏洞导致的损失,法律责任应如何分配
大数据·网络·人工智能·算法·区块链
Elastic 中国社区官方博客16 小时前
用于 UBI 的 Elasticsearch 插件:从搜索查询中分析用户行为
大数据·数据库·elasticsearch·搜索引擎·全文检索
wdfk_prog16 小时前
实战指南:如何将Git仓库中的特定文件夹及其历史完整迁移到另一个仓库
大数据·linux·运维·笔记·git·学习·elasticsearch
Yzxs00916 小时前
【8月优质EI会议合集|高录用|EI检索稳定】计算机、光学、通信技术、电子、建模、数学、通信工程...
大数据·人工智能·算法·计算机视觉·信息与通信
阿里云大数据AI技术17 小时前
DataWorks千万级任务调度与全链路集成开发治理赋能智能驾驶技术突破
大数据·数据库·数据挖掘