大数据
hadoop总结1 - - MapReduce和HDFS
Hadoop是一个分布式的集群环境,它不需要我们深入了解许多分布式平台的细节,直接帮我们在上面搭建好了一个平台。Hadoop的核心是HDFS和MapReduce。当然,Hive, hbase, storm, spark等技术,也都是基于hadoop的。下图展示了hadoop的生态圈:
MapReduce
MapReduce是一种分布式计算框架,它实现了在多台机器上并行计算,主要由map过程和reduce过程组成。map接受输入数据,它对输入的每一条数据都进行map函数的处理,然后指定输出的键值对,将其发送到reduce端。reduce端会首先保证所有的数据都按照key进行排序,对相同的key的数据,统一做reduce函数操作。
shuffle过程
为了保证map的输出能按照key值的顺序传到reduce端,MapReduce指定了一个排序过程,这个排序过程我们成为shuffle过程。shuffle包括map端shuffle和reduce端shuffle。
在map端,map的输出不是直接写到磁盘,而是写到一个内存缓冲区做预排序,当缓冲区达到80%,就溢写到磁盘。所有溢写文件会被合并成一个已排序的输出文件。
在reduce端,只要有一个map任务完成, reduce就开始复制其输出,当复制完所有map输出后,reduce便进入合并阶段,合并后的每个文件都是相同的key值,此数据作为reduce的输入。
combiner函数
MapReduce除了map和reduce,还提供了combiner函数,它使map的输出更加“紧凑”,减少了带宽的占用。例如: map输出结果(6,1),(7,1),(6,1),(6,1)(6,1),(7,1),(6,1),(6,1),统计每个数字出现的次数。没有combiner函数时,到reduce的输入数据为: {(6,1),(7,1),(6,1),(6,1)}增加了Combiner函数后,到reduce的输入数据为{(6,3)(7,1)}。
HDFS
HDFS是hadoop的另一核心内容,它提供了hadoop上的文件管理,类似于linux上的文件系统。通过hdfs,用户操作hadoop集群上的文件就如同操作本地文件一样。为了保证数据不丢失,hdfs将数据块在不同机器上进行备份。
hdfs架构
HDFS由NameNode, SecondaryNode, 多个DataNode组成。NameNode管理文件系统的命名空间,负载均衡。它维护文件系统的树形结构,这些信息以文件的形式永久保存在本地磁盘上—命名空间镜像文件(fs-image)和编辑日志(edit-logs)文件。NameNode也记录着每个文件中所在块的节点的信息,但是并不永久保存。SecondaryNode用来辅助NameNode,帮助Namenode合并编辑日志,减少namenode的启动时间。 多个DataNode分布在不同的机器上,用来存储数据,管理各自节点的文件块信息。
shell命令
HDFS使用命令行来操作文件,很多命令和linux系统下的操作非常类似,文件的一些权限等属性也和linux一样,这里不再列举。(以hadoop fs 开头的命令)
Yarn
Yarn负责hadoop上的资源管理。起初hadoop上,JobTracker 同时兼备了资源管理和作业控制两个功能, 这成为系统的一个最大瓶颈,严重制约了 Hadoop 集群扩展性。随着storm,spark等框架的出现,带来了很多局限性。所以,hadoop开发第二代,使用Yarn来单独进行资源的管理。
yarn的架构
Yarn由ResourseManager,NodeManager,ApplicationMaster, Container组成。
ResourceManager(RM)是全局的资源管理器,负责整个系统资源的管理和分配。
NodeManager是每个节点上的资源和任务管理器,一方面定时向RM汇报本节点的资源使用情况和各个Container的运行状态,另一方面,接受来自AM的Container启停请求。
ApplictionMaster(AM):每个应用程序对应一个AM。主要负责向RM请求资源、与NM通信来启停任务、监控所有任务的运行状态,并在任务运行失败时重新为任务申请资源并重启。