10,hadoop优化与LZO压缩

hadoop多目录与LZO压缩

1.HDFS存储多目录

存储多目录: namenode, datanode

namenode: 可以在当前节点中创建几个 namenode的多目录, 就是 虽说可以是多个目录,但是这个namenode多目录中,内容都是一样, 就相当把namenode, 多份保证他高可靠, 但是这个没有必要,因为namenode,由于是单节点,为防止单节点的风险,往往会与zookeeper配置建立,namenode集群, 只有一个namenode(leader)工作,其他namenode默默将(leader)同步过来。以防止 namenode挂了,及时顶替。

datanode: 会使用多目录, 因为这个多目录中存储的内容不一样。 并且dataNode中的数据量往往都很大。 并且存储在不同的磁盘上。所以就需要将这些磁盘和datanode的存储目录关联起来。 这种关联,我们称之为挂载。就是创建目录, 把某块磁盘挂载到这个目录上。(就相当于windows中,我们创建快捷方式)

1.namenode的本地目录可以配置多个,每个目录相同,增加可靠性在hdfs-site.xml文件中增加

<property>
<name>dfs.namenode.name.dir</name>
<value>file:///${hadoop.tmp.dir}/dfs/name1,file:///${hadoop.tmp.dir}/dfs/name2</value>
</property>

2配置之前,一定要先停止集群,在删除原来的数据,再格式化

!!!格式化生成目录与之前的目录不冲突即可!!

# stop-yarn.sh 
# stop-dfs.sh# rm -rf data/ logs/
# rm -rf data/ logs/
#  rm -rf data/ logs/# hdfs namenode -format
启动NN出现data/
# rm -rf data/删除原先的存储路径设置
增加hdfs-site.xm<property>
<name>dfs.namenode.name.dir</name>
<value>file:///${hadoop.tmp.dir}/dfs/name1,file:///${hadoop.tmp.dir}/dfs/name2</value>
</property>分发一下
hdfs-site.xml

注意:每台服务器挂载的磁盘不一样,所以每个节点的多目录配置可以不一致。单独配置即可。

2集群数据均衡

1)节点间数据均衡

start-balancer.sh -threshold 10

​ 对于参数10,代表的是集群中各个节点的磁盘空间利用率相差不超过10%,可根据实际情况进行调整。停止数据均衡命令:

stop-balancer.sh

2)磁盘间数据均衡

(1)生成均衡计划(我们只有一块磁盘,不会生成计划

(2)执行均衡计划

(3)查看当前均衡任务的执行情况

(4)取消均衡任务

hdfs diskbalancer -plan node3hdfs diskbalancer -execute node3.plan.jsonhdfs diskbalancer -query node3hdfs diskbalancer -cancel node3.plan.json

3 LZO 压缩配置

1)hadoop 本身并不支持 lzo 压缩,故需要使用 twitter 提供的 hadoop-lzo 开源组件。hadoop-lzo需依赖 hadoop 和 lzo 进行编译,编译步骤如下。

2)将编译好后的 hadoop-lzo-0.4.20.jar 放入

[itwise@node2 ~]$ cd /opt/module/hadoop3.1.3/share/hadoop/common/

3)同步 hadoop-lzo-0.4.20.jar 到 node3、node4

[itwise@node2 common]$ xsync hadoop-lzo-0.4.20.jar

4)core-site.xml 增加配置支持 LZO 压缩

cd /opt/module/hadoop-3.1.3/etc/hadoop/
[itwise@node2 hadoop]$vim core-site.xml

配置如下:

<configuration>
<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>
</configuration>

5)同步 core-site.xml 到 node3、node4

[itwise@node2 hadoop]$ my_rsync.sh core-site.xml

6)启动及查看集群

[itwise@node2 hadoop-3.1.3]$ sbin/start-dfs.sh
[itwise@node3 hadoop-3.1.3]$ sbin/start-yarn.sh

LZO 创建索引

创建 LZO 文件的索引,LZO 压缩文件的可切片特性依赖于其索引,故我们需要手动为LZO 压缩文件创建索引。若无索引,则 LZO 文件的切片只有一个。

测试

(1)将 bigtable.lzo(200M)上传到集群的根目录

[itwise@node2 module]$ hadoop fs -mkdir /input
[itwise@node2 module]$ hadoop fs -put bigtable.lzo /input
hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce example-3.1.3.jar wordcount /input /output-lzo

并没有进行压缩,而仅仅是普通的MR程序,将统计结果输出到output-lzo

(2)执行 wordcount 程序并压缩,我们找一个大文件:bigtable.lzo,直接上传到 input目录中我们找一个大文件:bigtable.lzo,直接上传到 input目录中

mapreduce.output.fileoutputformat.compress 文件输出格式
mapreduce.output.fileoutputformat.compress.codec 文件输出的压缩方式
hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduceexamples-3.1.3.jar wordcount -Dmapreduce.output.fileoutputformat.compress=true -
Dmapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.Lzo
pCodec /input /lzo-output

在这里插入图片描述

可以看到文件压缩是成功了,没有问题, 但是这个文件比较大 超过214.16M>128M, 应该进行分块,但是其实,是否对数据进行分块,这个需要索引配置:

hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount -Dmapreduce.output.fileoutputfotmat.compress = true -Dmapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.1zo.Lzopcodec/input /1zo-output

在这里插入图片描述

(3)对上传的 LZO 文件建索引

[itwise@node2 ]$ hadoop jar/opt/module/hadoop3.1.3/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer/input/bigtable.lzo

(4)创建LZO文件的索引,LZO压缩文件的可切片特性依赖于其索引,故我们需要手动为LZO压缩文件创建索引。若无索引,则LZO文件的切片只有一个。创建一个目录 lzo-input,把测试的数据上传到这个目录中。再次执行 WordCount 程序

hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-lzo-0.4.20.jar
com.hadoop.compression.lzo.DistributedLzoIndexer /lzo-input/bigtable.lzo
hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduceexamples-3.1.3.jar wordcount -
Dmapreduce.job.inputformat.class=com.hadoop.mapreduce.LzoTextInputFormat /lzo-input /lzo-output
[itwise@node2 module]$ hadoop jar/opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar 
wordcount -Dmapreduce.job.inputformat.class=com.hadoop.mapreduce.LzoText InputFormat /input /output2

注意:如果以上任务,在运行过程中报如下异常

Container [pid=8468,containerID=container_1594198338753_0001_01_000002] is running 318740992B beyond the 'VIRTUAL' memory limit. Current usage: 111.5 MB of 1 GB physical memory used; 2.4 GB of 2.1 GB virtual memory used. Killing container.Dump of the process-tree for container_1594198338753_0001_01_000002 :

解决办法:在node2的/opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml文件中增加如下配置,然后分发到node3、node4服务器上,并重新启动集群

<!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是
true -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是
true -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>:

4.基准测试

1) 测试HDFS写性能:注意写入6个文件,只能读取6个

测试内容:向HDFS集群写6个128M的文件

[itwise@node2 mapreduce]$ hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -write -nrFiles 6 -fileSize 128MB

在这里插入图片描述

2)测试HDFS读性能

测试内容:读取HDFS集群6个128M的文件

[itwise@node2 mapreduce]$ hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -read -nrFiles 6 -fileSize 128MB

在这里插入图片描述

错误读取:例题是10个文件,但是自己写入的是6个
在这里插入图片描述

3)删除测试生成数据

[itwise@node2 mapreduce]$ hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -clean

在这里插入图片描述

4)使用Sort程序评测MapReduce(自己电脑未测试)

(1)使用RandomWriter来产生随机数,每个节点运行10个Map任务,每个Map产生大约1G大小的二

进制随机数

[itwise@node2 mapreduce]$ hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar randomwriter random-data

(2)执行Sort程序

[itwise@node2 mapreduce]$ hadoop jar /opt/module/hadoop-
3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar sort random data sorted-data

(3)验证数据是否真正排好序了

[itwise@node2 mapreduce]$ hadoop jar /opt/module/hadoop-
3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar testmapredsort -sortInput random-data -sortOutput sorted-data

Hadoop参数调优

1)HDFS参数调优hdfs-site.xml

The number of Namenode RPC server threads that listen to requests from clients.If dfs.namenode.servicerpc-address is not configured then Namenode RPC server threads listen to requests from all nodes.NameNode有一个工作线程池,用来处理不同DataNode的并发心跳以及客户端并发的元数据操作。
对于大集群或者有大量客户端的集群来说,通常需要增大参数dfs.namenode.handler.count的默认值10。
<property>
<name>dfs.namenode.handler.count</name>
<value>10</value>
</property>

在这里插入图片描述

[itwise@node2 ~]$ python
#Python 2.7.5 (default, Apr 11 2018, 07:36:10)
#[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on 
#linux2 Type "help", "copyright", "credits" or "license" for more information.
#导入包
>>> import math
#输出到控制台
>>> print int(20*math.log(8))
41
>>> print int(20*math.log(10))
46退出
>>>quit()

2)YARN参数调优yarn-site.xml

(1)情景描述:总共7台机器,每天几亿条数据,数据源->Flume->Kafka->HDFS->Hive

面临问题:数据统计主要用HiveSQL,没有数据倾斜,小文件已经做了合并处理,开启的JVM重用,而且IO没有阻塞,内存用了不到50%。但是还是跑的非常慢,而且数据量洪峰过来时,整个集群都会宕掉。基于这种情况有没有优化方案。

(2)解决办法:

内存利用率不够。这个一般是Yarn的2个配置造成的,单个任务可以申请的最大内存大小,和Hadoop单个节点可用内存大小。调节这两个参数能提高系统内存的利用率。

(a)yarn.nodemanager.resource.memory-mb

表示该节点上YARN可使用的物理内存总量,默认是8192(MB),注意,如果你的节点内存资源不够8GB,则需要调减小这个值,而YARN不会智能的探测节点的物理内存总量。

(b)yarn.scheduler.maximum-allocation-mb

单个任务可申请的最多物理内存量,默认是8192(MB)。
用了不到50%。但是还是跑的非常慢,而且数据量洪峰过来时,整个集群都会宕掉。基于这种情况有没有优化方案。

(2)解决办法:

内存利用率不够。这个一般是Yarn的2个配置造成的,单个任务可以申请的最大内存大小,和Hadoop单个节点可用内存大小。调节这两个参数能提高系统内存的利用率。

(a)yarn.nodemanager.resource.memory-mb

表示该节点上YARN可使用的物理内存总量,默认是8192(MB),注意,如果你的节点内存资源不够8GB,则需要调减小这个值,而YARN不会智能的探测节点的物理内存总量。

(b)yarn.scheduler.maximum-allocation-mb

单个任务可申请的最多物理内存量,默认是8192(MB)。

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

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

相关文章

Elasticsearch分词及其自定义

文章目录 分词发生的阶段写入数据阶段执行检索阶段 分词器的组成字符过滤文本切分为分词分词后再过滤 分词器的分类默认分词器其他典型分词器 特定业务场景的自定义分词案例实战问题拆解实现方案 分词发生的阶段 写入数据阶段 分词发生在数据写入阶段&#xff0c;也就是数据索…

PHP 自提时间

前端: 后台设置: 代码: public function getBusinessHour(){// 需求单门店$data (new StoreModel())->limit(1)->select()->toArray();$days explode(,, $data[0][shop_hours]);$businessHours $days[1];// 使用 explode 分割字符串&#xff0c;获取开始和结束时…

Leetcode 第 129 场双周赛题解

Leetcode 第 129 场双周赛题解 Leetcode 第 129 场双周赛题解题目1&#xff1a;3127. 构造相同颜色的正方形思路代码复杂度分析 题目2&#xff1a;3128. 直角三角形思路代码复杂度分析 题目3&#xff1a;3129. 找出所有稳定的二进制数组 I思路代码复杂度分析 题目4&#xff1a;…

LLM应用-prompt提示:让大模型总结生成思维导图

第一步&#xff1a;大模型生成markdown思维导图格式 例如&#xff1a;kimi 总结pdf文档案例&#xff1a; 生成的markdown格式&#xff1a; # 知识图谱的构建及应用 ## 一、知识图谱的构建 ### 1. 数据采集 - 来源&#xff1a;结构化数据库、半结构化网页、非结构化文本 - 预处…

2024年小学生古诗文大会备考:吃透历年真题和知识点(持续)

根据往年的安排&#xff0c;2024年小学生古诗文大会预计这个月就将启动。该如何备考2024年小学生古诗文大会呢&#xff1f;根据往期的经验&#xff0c;只要吃透这些真题和背后的知识点&#xff0c;通过上海小学生古诗文大会的初选&#xff08;初赛&#xff09;一点问题都没有。…

LeetCode 126题:单词接龙 II

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

【源码】Spring Data JPA原理解析之Repository的自动注入(一)

Spring Data JPA系列 1、SpringBoot集成JPA及基本使用 2、Spring Data JPA Criteria查询、部分字段查询 3、Spring Data JPA数据批量插入、批量更新真的用对了吗 4、Spring Data JPA的一对一、LazyInitializationException异常、一对多、多对多操作 5、Spring Data JPA自定…

单用户模式破解root密码

目录 一. 破解root密码 1. 查看操作系统版本 2.重启系统&#xff0c;进入grub菜单&#xff0c;选择要使用的内核&#xff0c;按e进入​编辑 3. 找到linux16那一行&#xff0c;把光标移动到最后&#xff0c;添加 init/bin/sh 然后ctrlx保存退出会自动进入系统 4. 进入系统后…

C++ 并发编程指南(11)原子操作 | 11.6、计算机内存结构

文章目录 一、计算机内存结构1、内存的基本组成2、内存的类型3、内存的结构层次4、CPU架构5、局部性原理6、总结 前言 在探讨计算机的运行效率和数据处理能力时&#xff0c;内存结构无疑是一个至关重要的部分。内存&#xff0c;作为计算机系统中的关键组件&#xff0c;承担着存…

详细分清Session,Cookie和Token之间的区别,以及JWT是什么东西

Cookie Cookie是一种小型的文本文件&#xff0c;由网站在用户访问时存储在其计算机或移动设备上&#xff0c;Cookie主要用于跟踪、识别和存储有关用户的信息。 简单来说Cookie就是用来存储某些后端发送给前端的数据&#xff0c;例如我们登陆后&#xff0c;后端会返回一个登录…

网站有存在哪些类型的漏洞,网站漏洞存在哪些危害,该怎么解决网站漏洞问题

在数字化日益发展的今天&#xff0c;随着互联网的普及和深入&#xff0c;网站安全已成为企业、组织乃至个人都必须高度重视的安全问题。而网站漏洞作为威胁网站安全的重要因素之一&#xff0c;其类型多种多样&#xff0c;不仅可能导致数据泄露、系统崩溃&#xff0c;还可能为黑…

CVPR2022人脸识别Partial FC论文及代码学习笔记

论文链接&#xff1a;https://openaccess.thecvf.com/content/CVPR2022/papers/An_Killing_Two_Birds_With_One_Stone_Efficient_and_Robust_Training_CVPR_2022_paper.pdf 代码链接&#xff1a;insightface/recognition/arcface_torch at master deepinsight/insightface G…