赞
踩
NameNode:Hadoop分布式文件系统的核心,架构中的主角色
NameNode维护和管理文件系统元数据,包括名称空间目录数结构、文件和块的位置信息、访问权限的信息
NameNode成为了访问HDFS的唯一入口
NameNode内部通过内存和磁盘文件两种方式管理元素据
DataNode是Haddop HDFS中的从角色,负责具体的数据块存储
DataNode的数量决定了HDFS集群的数据存储能力。通过和NameNode配合维护着数据块
这是HDFS在上传文件写数据过程中采用的一种数据传输方式
客户端将数据块写入第一个数据节点,第一个数据节点保存数据后再将复制到第二个数据节点,后者保存后将其复制到第三个数据节点
为什么datanode之间采用线性传输,而不是一次给三个datanode拓扑式传输?
因为数据以管道的方式,顺序的沿着一个方向传输,这样能够充分利用每个机器的带宽,避免网络连接和高延迟时的连接。最小化推送所有数据的延时。
mapreduce的思想核心是“分而治之”
分而治之:就是把一个复杂的问题,按照一定的“分解”方法分为等价的规模较小的若干部分,然后在逐个解决,分别找出各部分的结果,然后把各部分的结果组成整个问题的最终结果。
Map:表示第一阶段,负责“拆分”,即把复杂的任务分解为若干个“简单的子任务”来并行处理。可以进行拆分的前提是这些小任务可以并行计算,彼此之间没有依赖关系。
Reduce表示第二个阶段,负责“合并”,即对map阶段的结果进行全局汇总
这两个阶段合起来正是MapReduce思想的体现
MapReduce虽然有很多优势,也有相对局限性,局限性不代表不能做,而是在有些场景下实现的效果比较差,并不适合MapReduce来处理,主要表现在以下结果方面:
实时计算性能差
mapreduce主要应用与离线作业,无法做到秒级或者亚秒级得数据响应
不能进行流失计算
流失计算特点的数据是源源不断得计算,并且数据是动态的;而mapreduce作为一个离线计算框架,主要是针对静态数据集得,数据是不能动态变化的
一个完整的MapReduce程序在分布式运行时有三类
一个MapReduce编程模型中只能包含一个Map阶段和一个Reduce阶段,或者只有Map阶段
不能有诸多个Map阶段、多个Reduce阶段的情景出现
如果用户的业务逻辑非常复杂,那就只能多个Mapreduce程序串行运行
整个MapReduce程序中,数据都是以KV键值对的形式流转的
在实际编程解决各种业务问题中,需要考虑每个阶段的输入输出KV分别是什么
MapReduce内置了很多默认属性,比如排序,分组,都和数据的K有关,所以说KV的类型数据确定及其重要的
示例1:评估案例Π(PI)的值:
/export/server/hadoop-3.3.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar
hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi 2 2
//结果:Estimated value of Pi is 4.00000000000000000000
示例2:wordcount单词词频统计:
先将带有英语单词的文档进行上传
jar hadoop-mapreduce-examples-3.3.0.jar wordcount /input /output
//结果: File Input Format Counters
Bytes Read=105
File Output Format Counters
Bytes Written=53
<注意>输出位置要求是一个空文件
逻辑切片(128M)
按行读数据
调用Mapper类中的map方法处理数据
每读取解析出来一个<key,value>,调用一次map方法
分区partition
Map输出数据写入内存缓冲区,达到比例溢出到磁盘上。溢出spill的时候根据key进行排序sort
对溢出文件进行最终的merge合并,成为一个文件
ReduceTask会主动从MapTask复制拉取属于需要自己处理的数据
把拉取来的数据,全部进行合并,即把分散的数据合并成一个大的数据,在对合并后的数据排序
对排序后的键值对调用reduce方法。键相等的键值调用一次reduce方法。最后把这些输出的键值对写入HDFS文件中。
Shuffle:将map端的无规则输出按指定的规则“打乱”具有一定规则的数据,以便reduce端接收处理
1.copy 2.merge 3.sort
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。