Hadoop
Posted 单词计数程序大牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop相关的知识,希望对你有一定的参考价值。
1. HDFS架构是怎样的?
hadoop1.x中采用master/slave架构,hdfs集群有一个namenode和多个datanode组成。
namenode
namenode负责原数据的管理,包括文件目录和文件的元数据管理。
namenode文件到block块位置的映射,namenode并不持久化的datanode的块位置信息,是在datanode启动时汇报给namenode的。
监控datanode的状态,datanode会向namenode发送心跳,定时汇报块位置信息,如果出现了故障,namenode会做故障迁移。
DataNode
负责实际的存储和读写操作,每一个Block块的位置是64m(2.x是128mb),会把上传的文件根据大小会进行切块,并做备份存储。默认是三个备份
secondnamenode
secondnamenode并不是namenode的备份机,它是协助namenode进行元数的管理的,在达到checkpoint时,会把namenode中的edit和fsimage文件拉取过来进行合并,合并在发送给namenode。
hadoop2.x中
namenode由active namenode和standby namenode组成但是只有active namenode提供服务。namenode可以横向进行拓展。
ZKFailoverController,监控房namenode的状态,在namenode出现故障,依靠zookeeper主备选举和切换,是一个独立的进程。
journal node:在active namenode进行操作后,元数据会同步到journal node中,备份节点会进行读取,这样就可以保证了主备namenode的元数据一直性,在发生故障后进行切换。
2. yarn的架构是怎么样的?
yarn的架构主要分为resource manager,application master,nodemanager,然后resourcemanager又包含Scheduler和application manager。Scheduler是负责资源的分配,applicaton mannager是负责全局任务的管理提交,am的监控与调度器协商资源,。nodemanager是每个节点上的资源和任务管理器,接收来自am的请求,并汇报任务执行与资源的情况。application master负责与rm协商资源,nm的通信,进一步分配任务资源。
3.mapreduce 的过程
首先根据输入的文件切片,默认有多少个切片就是多少个mapreduce task。进行文件的读取,默认是一行一行的读取。之后进入编写好的map方法,有多少键值就调用多少次的map方法。content.write()会进行数据收集。之后会进行分区,决定map的结果分配到哪一个reduce上,默认是hashpartition。在进行数据的写到内存,内存大小默认是100mb,当达到一个阈值的时候会进行溢写,每一次溢写都会产生一个临时文件存储到磁盘,在溢写之前会进行排序,有规约也会进行规约。最后再将溢写的文件进行合并。到此map结束。reduce阶段先将数据拉取到本地,之后再对文件进行合并,merge操作一般先是内存到磁盘,之后再是磁盘到磁盘,之后对merge文件排序,执行reduce的方法,至此整个mapreduce结束。
4. yarn调度mapreduce流程是怎么样的?
clent向ResourceManager申请执行job。
ResourceManager会个客户端返回一个hdfs目录以及application id
client会将切片信息,job的配置信息以及jar包上传到hdfs目录下。
client请求rm启动mrappmaster
rm将请求初始化一个任务,放到执行队列里面。
rm找到空闲的nodemanage创建container,启动mrappmaster。
将client提交的hdfs资源下载到本地
mrappmaster根据资源信息请求rm启动maptask。
rm会找空闲的nodemanger创建maptask的container任务
appmaster将资源发送给各个nodemanager,启动对应的maptask,监控每一个nn的情况。
maptask执行之后,会向rm申请执行reducetask的资源。
rm再去寻找空闲的nodemanager开启reducetask container。
mrapmaster启动reducetask任务,并监控任务执行情况。
5.hdfs写入流程
client申请上传文件,namenode会检查是否存在同名文件,校验权限。运行上传,文件进行切片,申请上传第一个block块,namenode返回datanode的地址列表。客户端与datanode简历pipeline管道,开始上传packget 默认是64k,首先上传到第一个datanode,之后datanode继续转发给其他datanode一直到所以datanode备份完成,通知客户端上传完成,继续上传第二个block块。
6. hdfs读流程
申请下载文件,namenode返回文件block的地址,根据地址列表卸载
7.hdfs创建文件的过程
客户端通过clientprotocol协议向Rpcserver发起RPC请求
FSNameSystem封装了各种hdfs操作的实现细节,RPCServer调用FSNameSystem中的相关方法创建目录。
FSDirectory封装了各种目录树操作的实现细节,FSNameSystem调用其中的方法创建目标文件,并通过日志系统备份文件修改。
最后RpcServer将RPC响应返回给客户端
8.Hadoop1.x和hadoop2.x的区别
资源调度方式的改变,在1.x中jobtrake负责任务调度和资源管理,单点任务负担重,在2.x中yarn作为集群的调度工具,在yarn中使用ResourceManager进行资源管理,单独开启一个container作为ApplicationMaster进行任务管理。
HA模式,在1.x中只有一个namenode存在单点故障,2.x中存在一个active namenode和standby namenode。
HDFS Federation,在hdfs2.x中出现,使namenode可以横向拓展成多个。每个namenode分管一部分目录。
9. hadoop的常用配置文件有哪些?
hadoop-env.xml:用于定义运行环境相关的配置信息,java_home环境变量,hadoop特定的jvm选项,指定日志所在目录,以及mster和slave的位置。
core-site.xml:用于定义系统级别的参数,如HDFS URL,hadoop的临时目录等。
hdfs-site.xml:hdfs相关的设定,如文件的副本的个数,块大小等。
mapred.xml:mapreduce的相关设定,如reduce任务的默认个数,任务能够使用内存的上下限。
10. 小文件过多会有什么危害,如何避免?
hadoop上大量的hdfs的元数据存在namenode的内存中,因此过多的小文件必然会压垮namenode的内存。每个元数据大小是150byte。
解决这个问题就是进行小文件合并,在客户端执行上传时执行一定的策略先合并,或者是使用hadoop的CombineFileInputFormat<K,V>进行小文件合并。
11.hadoop集群启动会启动哪些进程,各自的作用是什么?
NameNode:负责文件系统目录树以及文件的元数据,这些信息保存在磁盘上的两个文件上,fimage,edit文件上。记录每个datanode块的位置信息,这些信息保存在内存中。
响应客户端的数据块的请求。监控DataNode的状态故障迁移等。
secondnamenode:定期合并fsimage和edit。
datanode:负责具体数据的存储,向namenode发送其存储数据的block列表。
resourcemanager:负责job的调度,资源的分配将任务分配给nodemanager
nodemanager:运行ResourceManager分配的任务,将任务进度向application master报告。
journalNode(高可用):高可用情况下存放namenode的editlog文件。
以上是关于Hadoop的主要内容,如果未能解决你的问题,请参考以下文章