没有合适的资源?快使用搜索试试~ 我知道了~
首页MapReduce(原理、资源设置、代码、优化等)hadoop总结
一、Hadoop基础 1、分布式概念 2、Hadoop特性 3、Hadoop四大核心模块介绍 4、Hadoop HDFS构架解析 5、YARN构架解析 二、HDFS 1、文件系统 2、初始化与启动 3、编程API 三、YARN资源管理 1、各模块职能 2、内存、CPU资源 四、MapReduce编程 五、MapReduce的优化 六、基于Zookeeper的HA 七、MapReduce经典案例 。 。 。
资源详情
资源评论
资源推荐

一、Hadoop基础
1、分布式概念
通过爬虫>爬到网页存储>查找关键字
一台机器存储是有限的
Google采用多台机器,使用分布式的概念去存储处理
【关于计算】10TB数据,一台机器无法处理,可以用10台机器处理
每台机器可以处理1TB
Mapreduce额核心思想:分而治之
分为Map和Reduce
每个Map处理的数据是独立
Reduce就是合
10TB的数据“分”1TB,之后将结果“合”在一起存储
【关于存储】HDFS诞生>分布式文件系统
数据存储在HDFS上,然后MapReduce进行处理HDFS上的数据
【分布式存储】分布式数据库:HBase
Google称它为:BigTable、DFS、MapReduce
【谷歌三驾马车】
2、Hadoop特性
可靠、可扩展、分布式计算框架
【存储的可靠性】:如果存储数据的机器损坏了
HDFS提供了一个策略,给数据提供一个副本数(默认三个)
牺牲了硬盘作为代价,但是是划算的
HDFS存储形式:以块存储
块损坏了,同样提供了一个策略,对每个存储文件会生产一个校验码,之后定期在对它生产一个校验码,进行
匹配。如果不匹配,说明块已经损坏
【计算的可靠性】:
【可扩展性】可以添加任意的多台机器,添加配置
3、Hadoop四大核心模块介绍
Hadoopcommon:支持其他模块的工具类,为Hadoop模块提供基础设置
HadoopHDFS:分布式文件系统,提供存储
HadoopYARN:任务调度和集群资源管理
HadoopMapReduce:分布式离线计算框架
4、HadoopHDFS构架解析
设计理念,一次写入,多次读取
分布式应用都有主从的构架:
主节点(领导者):namenode
从节点:datanode

HDFS存储的是文件,文件的属性有哪些:
名称、位置、副本数、权限、拥有者(权限)、存储的块....以上这些信息称之为:元数据(命名空间)
元数据给到namenode进行存储
文件具体存储在datanode上
HDFS以块的形式存储,块block,1系列中块的大小为64MB,2系列中默认大小为128MB
500MB的文件,块大小为256MB,第一个块大小为:256MB,第二个块大小为:244MB
对于HDFS文件系统来说
read读
write写
读取流程:
/user/beifeng/mapreduce/input/wc.input
首先需要知道这个文件的位置,需要先去找namenode
“就近原则”
客户端>namenode
客户端>datanode
写的过程:
/user/beifeng/mapreduce/onput/part00000
客户端>namenode
客户端>datanode
数据流并没有经过namenode,是客户端直接和对datanode进行交互,缓解namenode工作的压力
5、YARN构架解析
分布式框架,也是主从框架
主节点:ResourceManager管理整个集群资源
从节点:NodeManger
客户端提交应用给ResourceManager
资源在各个的NodeManager上
YARN如何调度任务

客户端>submitJob任务>ResourceManager
任务分为Map和Reduce,一个job有很多任务,如何管理?
每一个应用都有一个APPmstr应用管理者
对于任务进行管理、监控和调度
应用管理者:ApplicationMaster
一个Map是在单独的资源里运行,不会被其他的任务抢走资源
为了实现这样的目的,提出了一个概念【Container容器】:
将任务放在某一个空间里,这个空间就属于某个任务
Map和Reduce所需资源都会放在一个容器中
容器在NodeManager中,任务在容器中运行
小结YARN:通过每个应用的应用管理者去申请资源然后封装在容器中,告诉资源管理者,然后容器中启动任
务
Hadoop2系列才有的思想,Hadoop1系列设计比较冗余
二、HDFS
1、文件系统
1)NameNode
Namenode是一个中心服务器,单一节点(简化系统的设计和实现),负责管理文件系统的名字空间
(namespace)以及客户端对文件的访问;
副本存放在哪些DataNode上由NameNode来控制,根据全局情况做出块放置决定,读取文件时NameNode尽
量让用户先读取最近的副本,降低带块消耗和读取时延;
Namenode全权管理数据块的复制,它周期性地从集群中的每个Datanode接收心跳信号和块状态报告
(Blockreport)。接收到心跳信号意味着该Datanode节点工作正常。块状态报告包含了一个该Datanode上所有数
据块的列表。
文件操作,NameNode负责文件元数据的操作,DataNode负责处理文件内容的读写请求,跟文件内容相关的
数据流不经过NameNode,只会询问它跟那个DataNode联系,否则NameNode会成为系统的瓶颈。
2)DataNode
一个数据块在DataNode以文件存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据(数据块的长
度、校验和、时间戳);
DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。
心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某
个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。
集群运行中可以安全加入和退出一些机器
3)Block
文件切分成块(默认大小128M),以块为单位,每个块有多个副本存储在不同的机器上,副本数可在文件生成
时指定(默认3)
NameNode是主节点,存储文件的元数据如文件名、文件目录结构、文件属性(生成时间、副本数、文件权
限),以及每个文件的块列表以及块所在的DataNode等等
DataNode在本地文件系统存储文件块数据,以及块数据的校验和

可以创建、删除、移动或重命名文件,当文件创建、写入和关闭之后不能修改文件内容。
4)数据损坏(curruption)处理
当DataNode读取block的时候,它会计算checksum
如果计算后的checksum与block创建时值不一样,说明该block已经损坏。Client读取其它DN上的block。
NameNode标记该块已经损坏,然后复制block达到预期设置的文件备份数
DataNode在其文件创建后三周验证其checksum
2、初始化与启动
1)NameNode初始化(格式化)
创建fsimage文件,存储fsimage信息
创建edits文件
2)启动
NameNode加载fsimage和edits文件(到内存并保留),并生成新的fsimage和一个空的edits文件
DataNode向NameNode注册,发送BlockReport
安全模式
3)SecondaryNameNode(运行时定期合并edits文件至fsimage,避免意外宕机丢失edits)
安全模式下,集群属于只读状态。但是严格来说,只是保证HDFS
息此时NameNode还不一定已经知道了。所以只有NameNode已了解
作都会失败。
对于全新创建的HDFS集群,NameNode启动后不会进入安全模式,
1
2
3
4

3、编程API
packageorg.apache.hadoop.hdfs.crud;
importjava.io.BufferedInputStream;
importjava.io.FileInputStream;
importjava.io.IOException;
importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.fs.FSDataInputStream;
importorg.apache.hadoop.fs.FSDataOutputStream;
importorg.apache.hadoop.fs.FileStatus;
importorg.apache.hadoop.fs.FileSystem;
importorg.apache.hadoop.fs.Path;
importorg.apache.hadoop.hdfs.DistributedFileSystem;
importorg.apache.hadoop.hdfs.protocol.DatanodeInfo;
importorg.apache.hadoop.io.IOUtils;
publicclassHdfsCrud{
//文件系统连接到hdfs的配置信息
privatestaticConfigurationgetConf(){
//创建配置实例
Configurationconf=newConfiguration();
//这句话很关键,这些信息就是hadoop配置文件中的信息
conf.set("fs.defaultFS","hdfs://ns1");
returnconf;
}
/*
*获取HDFS集群上所有节点名称信息
*/
publicstaticvoidgetDateNodeHost()throwsIOException{
//获取连接配置实例
Configurationconf=getConf();
//创建文件系统实例
FileSystemfs=FileSystem.get(conf);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
剩余54页未读,继续阅读
















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0