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格式化:java.io.IOException: Incompatible clusterIDs in /home/lxh/hadoop/hdfs/data: namenode clust


下一篇:HDFS架构以及namenode和secondarynamenode的工作机制以及查看DataNode分块情况等