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…

Kylin3.1.3连接Hbase报错找不到 hbase-common lib not found的解决办法

kylin3.1.3启动或者./find-hbase-dependency.sh报错hbase-common lib not found 将hbase的lib目录下hbase-common.jar添加到环境变量中 #添加环境变量 vim /etc/profile export HBASE_CLASSPATH/opt/cloudera/parcels/CDH-6.3.2/hbase-common-2.0.0-cdh6.2.0.jar#执行 source…

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

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

python @修饰符_python函数修饰符@的使用方法解析

python函数修饰符的作用是为现有函数增加额外的功能&#xff0c;常用于插入日志、性能测试、事务处理等等。 创建函数修饰符的规则&#xff1a; &#xff08;1&#xff09;修饰符是一个函数 &#xff08;2&#xff09;修饰符取被修饰函数为参数 &#xff08;3&#xff09;修饰符…

在已有数据的linkedList和arrayList集合中在中间位置新插入一条数据谁更快

以前一直以为是linked中间插入和头部插入都是比arrayList快的&#xff0c;今天开会的时候谈到这个面试题&#xff0c;这里就重新认识一下这两个集合。 结论&#xff1a;不想存在性能瓶颈&#xff0c;不是一定要linkedlist的场景就使用arraylist就可以了&#xff0c;除了头插&a…

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

第三章 进程 发现这本书的文字很简练&#xff0c;知识点突出&#xff0c;而且翻译的基本没有拗口的地方&#xff0c;是本好书&#xff0c;(^o^)/~ 下面进入正题。 关于内存映射 Windows内存管理的分页机制在微机原理课程中有提到&#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

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

第四章 线程 知识要点 每向系统获取一个句柄&#xff0c;会使相应对象的引用计数加1。而GetCurrentProcess()函数返回的是一个伪句柄&#xff0c;也就是不增加引用计数&#xff0c;相当于赋值拷贝。对应于线程&#xff0c;有GetCurrentThread()&#xff0c;情况同GetCurrentPr…

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

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

python图形模块_使用Python图形模块:有没有办法将当前窗口保存为图像?

我正在使用pythongraphics模块。我要做的是将当前窗口保存为图像。在模块中&#xff0c;有一个选项可以将“图像”另存为图像(图像.保存()). 但这并没有帮助&#xff0c;因为它只是保存一个已经加载的图像。或者&#xff0c;如果你像我一样加载一个空白图像&#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;在执行…

Qt:程序异常退出

现象 编译成功&#xff0c;但是运行时崩溃并在控制台输出&#xff1a;“程序异常错误”。 可能原因 查阅资料&#xff0c;原因可能是库错误。 最终解决方法 的确是库错误&#xff0c;原因是编译库的Qt版本和使用该库的Qt程序对应的Qt版本不相同。需要使用相同版本的Qt来生…

python用什么系统好_10分钟用python搭建一个超好用的CMDB系统

{{ message }}new Vue({ el: #app, data: { message: Hello Vue.js! } })

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

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

C安全编程知识点

1、因为非零即为真&#xff0c;不要用下面的语句来判断 if (TRUE condition) 要改写成 if (condition) 判断条件为假也一样要用&#xff1a; if (!condition)

python怎样定义一个数组_python如何建立全零数组

语句格式&#xff1a; numpy.zeros(shape, dtypefloat, orderC) 参数说明&#xff1a; shape:整型或元素为整型的序列&#xff0c;表示生成的新数组的shape&#xff0c;如&#xff08;2&#xff0c;3&#xff09;或 2。 dtype:生成数组的数据格式&#xff0c;如numpy.int8。默认…

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

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

Hbase模糊查询优化 - 并发查询

HBase模糊查询优化 - 并发查询 HBase查询优化续集&#xff0c;继上次优化后查询速度还是很慢&#xff0c; 这次优化我们使用并发查询&#xff0c;查询HBase库里的各region拆分情况&#xff0c;然后对查询的rowkey切分成多段&#xff0c;每一段单独去不同的region中查询&#x…