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压缩的配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437324.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

提供写入的数据少于指定的数据_指定范围数据的汇总

下图(左表)记录的是某公司各部门员工的月薪&#xff0c;现需要根据下图(右表)对指定范围内的月薪进行汇总1、汇总月薪在【2000-4000元】范围内的工资总额。本案例的难点是&#xff1a;【工资总额】数据即是求和列&#xff0c;也是条件列&#xff0c;那么求和函数应该怎么写呢&a…

【转】1.4异步编程:轻量级线程同步基元对象

开始《异步编程&#xff1a;同步基元对象&#xff08;下&#xff09;》 示例&#xff1a;异步编程&#xff1a;轻量级线程同步基元对象.rar 在《异步编程&#xff1a;线程同步基元对象》中我介绍了.NET4.0之前为我们提供的各种同步基元&#xff08;包括Interlocked、Monitor\l…

Windows高级编程学习笔记(一)

写在前面的话 之前学的Windows编程都是界面啊、网络编程啊之类的纯应用层面的东西&#xff0c;总是感觉而自己没有达到自己期望中的水平。什么水平呢&#xff1f;如果让你编写监控系统资源的工具&#xff0c;或者DLL注入相关软件&#xff0c;或者底层安全软件&#xff0c;可以胜…

【转】1.5异步编程:.NET4.X 数据并行

任务并行库 (TPL) 是 .NET Framework 4的 System.Threading 和 System.Threading.Tasks 命名空间中的一组公共类型和 API。TPL的目的在于简化向应用程序中添加并行性和并发性的过程&#xff0c;从而提高开发人员的工作效率。TPL会动态地按比例调节并发程度&#xff0c;以便最有…

idea全局搜索搜不全的BUG

搜不全真是坑坏我了&#xff0c;修改业务后&#xff0c;差点就卷铺盖走人了… 修改配置 打开help -> Find Action 输入registry后搜索(点击框内任意一行后&#xff0c;直接输入就是搜索) page.size 将100的值改大&#xff0c;一步到位100000

【转】1.6异步编程:IAsyncResult异步编程模型 (APM)

传送门&#xff1a;异步编程系列目录…… 大部分开发人员&#xff0c;在开发多线程应用程序时&#xff0c;都是使用ThreadPool的QueueUserWorkItem方法来发起一次简单的异步操作。然而&#xff0c;这个技术存在许多限制。最大的问题是没有一个内建的机制让你知道操作在什么时候…

Spark worker内存不足导致任务失败,报错Likely due to containers exceeding thresholds, or network issues

报错: Lost executor 33 on xx.xx.xx.152: Remote RPC client disassociated. Likely due to containers exceeding thresholds, or network issues. Check driver logs for WARN messages. 原因&#xff1a; 由于spark某节点可用内存不足导致整个任务失败&#xff0c;在执行…

【转】1.7异步编程:基于事件的异步编程模式(EAP)

传送门&#xff1a;异步编程系列目录…… 上一篇&#xff0c;我给大家介绍了“.NET1.0 IAsyncResult异步编程模型(APM)”&#xff0c;通过Begin*** 开启操作并返回IAsyncResult对象&#xff0c;使用 End*** 方法来结束操作&#xff0c;通过回调方法来做异步操作后其它事项。然…

【转】1.8异步编程:.NET 4.5 基于任务的异步编程模型(TAP)

传送门&#xff1a;异步编程系列目录…… 最近我为大家陆续介绍了“IAsyncResult异步编程模型 (APM)”和“基于事件的异步编程模式(EAP)”两种异步编程模型。在.NET4.0 中Microsoft又为我们引入了新的异步编程模型“基于任务的异步编程模型(TAP)”&#xff0c;并且推荐我们在开…

Qt: 找不到Qt5Widgets.lib

在静态编译的时候&#xff0c;提示错误&#xff1a; error: dependent ‘D:\IDE\Qt\5.4.2-mingw32-rel-static\5.4.2-mingw32-rel-static\lib\Qt5Widgets.lib 去目录下看了下&#xff0c;全部是libxxxxx.a文件&#xff0c;是linux的库文件。但是之前编译是正常的&#xff0c;这…

python3读写excel文件_python3 循环读取excel文件并写入json操作

文件内容&#xff1a;excel内容&#xff1a;代码&#xff1a; import xlrd import json import operator def read_xlsx(filename): # 打开excel文件 data1 xlrd.open_workbook(filename) # 读取第一个工作表 table data1.sheets()[0] # 统计行数 n_rows table.nrows data …

Qt:error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1600”不匹配值“1800

Visual Studio 2013生成Qt项目时报错。网上搜说是更改平台工具集&#xff0c;试了没用。退一步说我就是需要使用vs2013&#xff0c;改成其他的会不符合项目需求。于是打开了项目文件.sln&#xff0c;如下&#xff1a; 才发现目标工程的Qt版本是5.7.0&#xff0c;vs2013里面设置…

JAVA程序绑定到指定的CPU核上

由于服务器上某几个核被C程序绑定了&#xff0c;我们的java程序有的线程会使用到&#xff0c;导致C程序丢包异常&#xff0c;所以需要将JAVA程序绑定到指定的CPU核上 1.命令介绍 1.taskset命令 taskset -c <cpu核编号> <pid> #可以指定进程绑定到哪个cpu核上2.t…

【转】URN_URI_URL详解

URI&#xff0c;Uniform Resource Identifier&#xff0c;统一资源标识符。 URN&#xff0c;Uniform Resource Name&#xff0c;统一资源命名 URL&#xff0c;Uniform Resource Location&#xff0c;统一资源定位符。 URI 简单来理解就是标识/定义了一个资源&#xff0c;而 URL…

彻底弄懂Qt的编码(汉字乱码问题及相关函数作用)

测试1 新建test工程用于测试&#xff0c;main.c文件内容如下&#xff1a; #include <QCoreApplication> #include <QDebug>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);QString str_hanzi("百度"); // 汉字QString str_ascii(&…

【转】1.9 Asp.Net Core 轻松学-多线程之取消令牌(

目录 前言1. 多线程请求合并数据源2. 对长时间阻塞调用的异步取消令牌应用3. CancellationToken 的链式反应4. CancellationToken 令牌取消的三种方式结束语示例代码下载前言 取消令牌(CancellationToken) 是 .Net Core 中的一项重要功能&#xff0c;正确并合理的使用 Cancell…

python怎么改背景_python IDE背景怎么改

首先&#xff0c;在已经下载好的python文件目录下&#xff0c;找到config-highlight.def文件&#xff0c;我的是在H:\python\python3**\Lib\idlelib**文件夹下。 打开文件后&#xff0c;你会看到一些默认的颜色配置&#xff0c;比如经典的颜色配置就是白色背景&#xff0c;一般…

QML程序发布时无法正常运行的解决办法

1、运行依赖 以我的一个项目为例&#xff0c;此程序使用QQuickWidget将QWidget和QML结合。程序debug版发布时依赖的库如下&#xff1a; 大部分dll可以在Visual Studio中调试时的控制台中看出已加载的dll&#xff0c;只需到Qt安装目录下找到对应的dll即可。但是某些dll并没有提…

【转】UML基础: 第1部分 - 类图 (Class Diagram)

类图 类图是一个静态图。它代表了应用程序的静态视图。类图不仅用于可视化&#xff0c;描述和记录系统的不同方面&#xff0c;还用于构建软件应用程序的可执行代码。 类图描述了一个类的属性和操作&#xff0c;以及对系统施加的约束。类图被广泛用于面向对象系统的建模&#…

int转换为cstring_PostgreSQL 隐式类型转换探秘

个人简介何小栋&#xff0c; 从事产品研发和架构设计工作&#xff0c;对Oracle、PostgreSQL有深入研究&#xff0c;ITPUB数据库版块资深版主。现就职于广州云图数据技术有限公司&#xff0c;系统架构师&#xff0c;博客&#xff1a;http://blog.itpub.net/6906/摘要本文通过与O…