hadoop离线day06--Hadoop MapReduceHDFS高阶
Posted Vics异地我就
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hadoop离线day06--Hadoop MapReduceHDFS高阶相关的知识,希望对你有一定的参考价值。
hadoop离线day06--Hadoop MapReduce、HDFS高阶
今日内容大纲
#1.MapReduce
数据压缩
自定义分组
分组在reduce阶段 前后key比较 相同的在一组 一组去调用一次reduce方法
join问题
多个数据之间关联操作
map端join
分布式缓存
reduce端join
CombineTextInputFormat 处理小文件的类
默认TextInputFormat 不管多小文件 都是一个切片 都会启动一个maptask
优化参数
资源相关的
容错相关的
效率稳定性相关的
#2、HDFS 高阶
namenode元数据管理机制
secondarynamenode(SNN)职责 checkpoint机制(合并元数据)
#重点 all
Hadoop MapReduce
-
MapReduce数据压缩机制
-
何谓压缩
使用算法对数据文件进行重新编排的过程。使数据变成整体,降低数据size. 追求无损压缩。
-
压缩性能指标
-
压缩时间
-
压缩比、压缩率
压缩率(Compression rate),描述压缩文件的效果名,是文件压缩后的大小与压缩前的大小之比
-
压缩算法是否免费
-
-
MapReduce中使用压缩地方
-
map输出的时候(中间输出压缩)
减少map的输出量 降低shuffle时数据量 减少shuffle IO次数
-
reduce输出的时候(最终输出压缩)
减少reduce的输出量 降低磁盘的存储空间
-
-
压缩的缺点
消耗时间 消耗CPU、内存
-
Hadoop支持压缩算法
-
推荐使用snappy压缩格式
Snappy 是一个 C++ 的用来压缩和解压缩的开发包。其目标不是最大限度压缩或者兼容其他压缩格式,而是旨在提供高速压缩速度和合理的压缩率
-
使用snappy压缩需要在hadoop源码编译的时候集成。
-
-
MapReduce中如何使用压缩
-
方式1:在代码中使用conf设置 影响本程序
-
方式2:在集群配置文件中mapred-site.xml中设置 影响集群上所有mr程序。
-
-
注意,在当下企业中,直接使用MapReduce编程已经几乎没有了,所有使用MapReduce设置压缩的机会也几乎没有了。但是离线使用Hive进行数据分析,可以设置数据压缩,其底层原理就是今天所讲MapReduce压缩的机制。
-
-
Hadoop小文件问题
-
存储角度
-
文件不管多小,本身都是一个单独的 。都需要一条元数据来记录
-
小文件吃内存情况。
-
-
MapReduce计算角度
-
文件不管多小 本身都是一个切片 都需要一个maptask来处理。
-
浪费性能 浪费资源
-
-
使用CombineTextInputFormat来处理小文件
-
step1: CombineTextInputFormat.setMaxInputSplitSize(job, 4194304); // 4m
-
step2:虚拟存储过程
将待处理文件和上述设置的值进行比较 #1、小于等于 保持不变 #2、大于超过2倍 根据4M切分 大于不超过2倍 等分为2
-
step3:判断每一个切片和4M的大小情况 如果小于和后面的结合参与计算 直到大于4M
-
-
-
MapReduce程序可以没有reduce阶段的
-
只需要将reducetask个数设置为0即可。
job.setNumReduceTasks(0);
-
此时,maptask处理完数据之后 就不会进行shuffle了 直接输出结果到磁盘中。
-
关于MapReduce输出结果文件名称
#part-r-000000 r表示是reducetask输出的文件 part表示的就是分区 00000就是分区的标号 #part-m-000000 m表示是maptask输出的文件 part表示的就是切片 00000就是切片的标号
-
-
MapReduce中join的问题
-
适合处理两份数据之间的关联操作
-
分为map端join(map side join) reduce端join (reduce side join)
-
map端join适合大小表数据 使用分布式缓存技术将小表数据进行缓存
-
没有shuffle阶段 没有reducetask.
-
当下企业实战中 没有之间编写MapReduce处理join问题 但是后面使用数仓软件Apache hive,需要使用join进行数据处理 并且涉及到join优化,其底层的原理就是mapreduce join.
-
MapReduce 优化参数
-
MapReduce程序运行是由很多参数支撑的 大多数都是以默认的形式默认值存在。
-
需要进行优化调整的时候 用户可以进行重新定义覆盖。
-
默认的参数在哪里。 xxxx-defult.xml中。
-
用户设置的参数
-
代码中使用conf.set
-
mapred-site.xml 放置工程classpath下 也就是resources目录下。
-
-
容错 failover
-
所谓的容错指的是容忍错误的发生。说的再直白一点,发生了错误,对程序也没有影响。
-
容错主要可以解决单点故障问题,让问题错误的发送不至于影响正常的执行。
-
-
推测执行机制
-
找出拖后腿的task
-
启动备份task 两者同时处理同一份数据
-
谁先处理完 谁的结果作为最终结果。
-
企业中建议关闭该机制。
-
HDFS高阶
-
namenode元数据
-
元数据是什么
元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。 #记录数据的数据 描述数据的数据
-
hdfs中元数据指的是什么
-
文件系统的元数据(namespace、块的位置)
-
datanodes状态信息(健康、磁盘使用率)
-
-
-
回想首次启动HDFS集群的时候 进行format操作
-
本质就是初始化操作 初始化namenode工作目录和元数据文件。
-
元数据存储的目录由参数dfs.namenode.name.dir决定 在NN部署机器的本地linux文件系统中
针对课程环境 最终目录 /export/data/hadoopdata/dfs/name
-
-
secondarynamenode
-
要想成为namenode的备份 需要具备两个东西
-
数据状态要和namenode保持一致。
-
承担和namenode一样的职责
-
-
secondarynamenode根本不是namenode的备份,其主要职责帮助nameNode进行元数据的合并。
-
以上是关于hadoop离线day06--Hadoop MapReduceHDFS高阶的主要内容,如果未能解决你的问题,请参考以下文章
hadoop离线day05--Hadoop MapReduce
hadoop离线day05--Hadoop MapReduce