HDFS和Spark配置LZO压缩,Spark读取LZO创建正常Task数量
1.说明
为了解决,数据日益增长并且目前使用Snappy压缩导致的Spark读取时会出现OOM,并且处理起来速度过慢的问题,决定使用LZO+Index来解决问题。
线上Hadoop版本3.2.1,Spark2.3.1,Lzo使用最新版0.4.21
2.未解决的问题
但是还有个疑问,我们使用spark写入到hdfs上的lzo文件,该如何更好的生成索引文件?
目前能想到的就是在提交spark任务的脚本中,spark任务后面加上生成索引文件的命令,想知道还有没有什么更好的方法解决,最好是能有在spark程序里直接生成索引文件。
2.安装lzop
sudo yum -y install lzop
3.下载编译安装LZO
下载地址
http://www.oberhumer.com/opensource/lzo/download/lzo-2.10.tar.gz
下载好后在linux下进行编译
tar -zxvf lzo-2.10.tar.gzcd lzo-2.10export CFLAGS=-m64./configure -enable-sharedmakesudo make install
编译完成后,编辑lzo.conf文件
sudo vim /etc/ld.so.conf.d/lzo.conf
在里面写入:
/usr/local/lib
然后要让 lzo.conf 生效
sudo /sbin/ldconfig -v
lzo-2.10文件已经没有用了,可以进行删除
rm -rf lzo-2.10
4. 安装hadoop-lzo
4.1下载安装 hadoop-lzo-master
https://github.com/twitter/hadoop-lzo
在linux下解压后进入hadoop-lzo-master 目录,然后使用 maven 获取 jar 文件以及 lib 目录中的的.so文件。
l执行命令如下:
export CFLAGS=-m64
export CXXFLAGS=-m64
export C_INCLUDE_PATH=/usr/local/include/lzo
export LIBRARY_PATH=/usr/local/lib
#有maven就不用下载了
sudo yum install mavenmvn clean package -Dmaven.test.skip=true
在当前目录下生成了 target,下面有个 native/Linux-amd64-64/lib 目录,将 lib 目录下的文件拷贝到 hadoop 的 lib/native 目录下(hadoop 目录根据自己情况修改):
cp target/native/Linux-amd64-64/lib/* $HADOOP_HOME/lib/native/
将target下的hadoop-lzo三个文件拷贝到 share/hadoop/common/lib 下
cp hadoop-lzo-0.4.21-SNAPSHOT*.jar $HADOOP_HOME/share/hadoop/common/lib/
4.2.修改Hadoop配置
在hadoop的core-site.xml文件中增加如下lzo相关配置:
<property><name>io.compression.codecs</name><value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.SnappyCodec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec</value>
</property>
<property><name>io.compression.codec.lzo.class</name><value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
4.3.分发、重启hadoop
将hadoop下新加入的so文件、jar包,还有修改的core-site.xml分发给集群其他节点
然后重启集群即可。
5.Spark下启用LZO
完成上面linux下的lzo和hadoop的lzo后就可以配置spark下的lzo了。
5.1 修改配置文件
修改spark配置文件spark-defaults.conf
vim spark-defaults.conf#增加如下配置,$HADOOP_HOME可以改为自己的hadoop路径
#配置的文件就是上面我们mvn打的jar包,路径是hadoop下因为我们放在了hadoop目前下
spark.driver.extraClassPath $HADOOP_HOME/share/hadoop/common/hadoop-lzo-0.4.21-SNAPSHOT.jar
spark.executor.extraClassPath $HADOOP_HOME/share/hadoop/common/hadoop-lzo-0.4.21-SNAPSHOT.jar
修改spark-env.sh
vim spark-env.sh#增加如下配置
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native
export SPARK_LIBRARY_PATH=$SPARK_LIBRARY_PATH:$HADOOP_HOME/lib/native
export SPARK_CLASSPATH=$SPARK_CLASSPATH:$HADOOP_HOME/share/hadoop/yarn/*:$HADOOP_HOME/share/hadoop/yarn/lib/*:$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/common/lib/*:$HADOOP_HOME/share/hadoop/hdfs/*:$HADOOP_HOME/share/hadoop/hdfs/lib/*:$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*:$HADOOP_HOME/share/hadoop/tools/lib/*:$SPARK_HOME/jars/*
5.2 分发重启Spark
5.3 Spark程序LZO配置
我们在读取和存储LZO压缩的时候是需要使用到上面所打完的包hadoop-lzo-0.4.21-SNAPSHOT.jar的,因为我们是内网所以将他打成了Maven依赖再使用
5.4 导入Maven依赖
1.官网给出的方式:
Maven repository:
The hadoop-lzo package is available at https://maven.twttr.com/.
For example, if you are using ivy, add the repository in ivysettings.xml:
<ibiblio name="twttr.com" m2compatible="true" root="https://maven.twttr.com/"/>
And include hadoop-lzo as a dependency:
<dependency org="com.hadoop.gplcompression" name="hadoop-lzo" rev="0.4.17"/>
2.我们使用的方式:
将hadoop-lzo-0.4.21-SNAPSHOT.jar拿到本地将文件名修改为hadoop-lzo-0.4.21.jar,
在当前目录的cmd中执行如下命令,将他加入到maven本地库
# 在hadoop-lzo-0.4.21-SNAPSHOT.jar所在目录打开cmd,执行
mvn install:install-file -DgroupId=com.hadoop.gplcompression -DartifactId=hadoop-lzo -Dversion=0.4.21 -Dpackaging=jar -Dfile=hadoop-lzo-0.4.21.jar
显示build success就是成功,然后就可以愉快的使用了
1.pom.xml中加入
<dependency><groupId>com.hadoop.gplcompression</groupId><artifactId>hadoop-lzo</artifactId><version>0.4.21</version>
</dependency>
2.生成索引文件
读取lzo文件的前提是,我们生成在lzo文件的基础上生成了index索引文件,要不然会导致无法切片:
# 生成索引文件,如果指定的是文件夹,则会将未生成索引的lzo文件全部生成索引
hadoop jar $HADOOP_HOME/lib/hadoop-lzo-0.4.21-SNAPSHOT.jar com.hadoop.compression.lzo.DistributedLzoIndexer hdfs://cluster1:8020/test/test.txt.lzo
3.使用,读取/写入
// 要使用的是com.hadoop包下的类
import com.hadoop.compression.lzo.LzopCodec;
import com.hadoop.mapreduce.LzoTextInputFormat;
// 读取LZO文件
org.apache.hadoop.conf.Configuration configuration = new Configuration();
JavaPairRDD<LongWritable, Text> pairRDD =sc.newAPIHadoopFile(readLzoFileName,LzoTextInputFormat.class,LongWritable.class,Text.class,configuration);//存储LZO格式,我们使用的是Lzop,lzo和lzop区别可以自行了解下
rdd.saveAsTextFile("fullName",LzopCodec.class);
读取lzo文件后的JavaPairRDD的key是每个块开头的 offset,value 为原始文件的每一行,我们直接使用value就可以。
6 后续要将CDH集群也做一个LZO压缩的配置
HDFS和Spark配置LZO压缩,Spark读取LZO创建正常Task数量相关推荐
- java 读取 tgz_java – 从Spark中的压缩中读取整个文本文件
我有以下问题:假设我有一个包含压缩目录的目录,其中包含存储在HDFS上的多个文件.我想创建一个包含T类型对象的RDD,即: context = new JavaSparkContext(conf); ...
- Hive之配置和使用LZO压缩
前言 OS:CentOS 7 Hive:2.3.0 Hadoop:2.7.7 MySQL Server:5.7.10 Hive官方手册:LanguageManual LZO 在配置Hive使用lzo压 ...
- spark原理解析和spark core
spark原理解析 解析一:resilient distributed dataset (RDD) resilient distributed dataset (RDD):弹性分布式数据集,有容错机制 ...
- hive LZO压缩
hive LZO压缩 本文环境介绍: 软件 版本 备注 centos 6.5 hadoop 2.7.1 2.7.*即可 hive 2.3.6 lzo 2.10 需要独立安装 1 lzo压缩 1.1 l ...
- spark 读取lzo 环境依赖
问题描述 报错 bug: 22/09/25 23:28:14 INFO GPLNativeCodeLoader: Loaded native gpl library 22/09/25 23:28:14 ...
- HDFS配置lzo压缩
参考 https://www.cnblogs.com/caoshouling/p/14091113.html, 做了验证,很好的文档. 1) 停止hdfs集群 2)安装配置maven https:// ...
- Spark配置属性整理(非常全面)
Spark提供三个位置用来配置系统: Spark属性:控制大部分的应用程序参数,可以用SparkConf对象或者Java系统属性设置 环境变量:可以通过每个节点的conf/spark-env.sh脚本 ...
- Spark配置参数详解
Spark基本概念 Spark是一个用于集群计算的通用计算框架,数据科学应用和数据处理. Spark项目包含多个紧密集成的组建.Spark的核心是一个对由很多计算任务组成的.运行在多个工作机器或者是一 ...
- 《Spark 官方文档》Spark配置(一)
Spark配置 Spark有以下三种方式修改配置: Spark properties (Spark属性)可以控制绝大多数应用程序参数,而且既可以通过 SparkConf 对象来设置,也可以通过Java ...
最新文章
- html转word保留样式_译员必备 | 初识Word格式标记
- IDEA运行redis多线程访问报错Exception in thread “main“ java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
- python快速排序算法循环_算法:快速排序的Python实现
- ice(Internet Communications Engine) window 安装与配置
- pku1192 最优连通子集
- 朋友圈加粗字体数字_可爱搞笑的女生朋友圈文案
- 主要国家和地区货币代码表
- 微信小程序开挂模式即将启动
- java学习之路-练习题:编写一个计算速度的程序,距离时间常量。
- 【附源码】计算机毕业设计java原创网络文学管理系统设计与实现
- window.open() 打开IE缓慢的原因
- 自定义皮肤,你值得拥有!
- Leetcode 274 H指数
- Echarts绘制Tree树图的涟漪效果effectScatter
- (二)向前 向后 中心差商
- Js之正则表达式请使用字母、数字和特殊符号组合,8-20个字符
- OpenCV--0016:图像ROI与ROI操作
- 国家对应下拉列表 相应的 js特效
- Photozoom小图放大,专业无损
- Python实现基于物品的协同过滤推荐算法构建电影推荐系统
热门文章
- 基于visual Studio2013解决面试题之0902内存拷贝
- 修改spfile位置
- mysql 读取comment_Mysql 获取表的comment 字段
- svn不知道这样的主机 怎么解决_家里装修不知道怎么配置净水器,这几招教你轻松解决...
- 红石32位cpu通用计算机,我的世界无命令方块32位红石电脑装置详解
- 自动化测试工具selenium python_Selenium自动化测试工具使用方法汇总
- MATLAB 求曲线长度
- 两个有用的minicom命令
- linux中线程的挂起与恢复(进程暂停)
- 找了个学习uboot makefile的好地方 不过不让转载 那就把网址分享一下吧