Hadoop——安装以及整体了解
Posted mmい
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop——安装以及整体了解相关的知识,希望对你有一定的参考价值。
安装
折腾了好久最后在这篇文章的指导下完成了Hadoop伪分布式安装,感谢!
重要概念
在阅读《Hadoop实战》时觉得比较重要的一些概念记录下来。
1.MapReduce编程模型的原理
利用一个输入的[key,value]集合来产生一个输出的[key,value]集合:用户自定义的Map函数接收一个输入的[key,value]集合,然后产生一个中间[key,value]集合,MapReduce把所有具有相同key值的value集合在一起,然后传递给Reduce函数。用户自定义的Reduce函数接收key和相关的value集合。Reduce函数合并这些value值,形成一个较小的value集合。
2.分布式并行计算
Hadoop中有一个作为主控的JobTracker,用于调度和管理其他的TaskTracker。JobTracker可以位于NameNode和DataNode上,但是TaskTracker只能位于DataNode上,Map/Reduce框架和分布式文件系统是运行在一组相同的节点上的,也就是说,DataNode既是数据存储节点也是计算节点;JobTracker将Map任务和Reduce任务分发给空闲的TaskTracker,让这些任务并行运行,并负责监控任务的运行情况,如果一个TaskTracker出现故障,会重新分配给另一个空闲的TaskTracker重新运行;
3.数据合并、数据分割、Reduce、任务管道
Map任务的中间结果会先进行数据合并,即将中间结果中有相同key的[key,value]集合合并成一对。这个过程和Reduce很像,但是它是在本地进行的,紧跟着Map函数后执行的,能减少中间结果中[key,value]的数目,从而降低网络流量,要知道“移动计算要比移动数据更经济”。
然后将Map任务输出的中间结果按key的范围分割为R份(R是预先定义的Reduce任务的个数),以文件的形式存储在本地磁盘上,中间结果的位置会通知主控程序JobTracker,再由它来通知Reduce任务到哪一个TaskTracker上去取中间结果。
注意:所有的Map任务产生的中间结果均按其key值通过一个Hash函数划分为R份,R个Reduce任务各自负责一段key区间。每个Reduce需要向许多个Map任务节点取得落在其负责的Key区间内的中间结果,然后执行Reduce函数,有R个Reduce任务就会产生R个最终结果,很多情况下这R个最终结果并不需要合并成一个最终结果,因为这个R个最终结果又可以作为另一个计算任务的输入,开始另一个并行计算任务,这也就形成了任务管道。
4.HDFS
HDFS通过三个重要的角色来进行文件系统的管理:NameNode,DataNode,Client;
- NameNode可以看做是分布式文件系统中的管理者,主要负责文件系统的命令空间(对于整个集群有单一的命名空间),集群的配置信息和存储块的复制。NameNode会将文件系统的Metadata元数据(主要包括文件信息,每一个文件对应的文件块的信息和每一个文件块在DataNode中的信息等,并不包含具体的文件内容)存储在内存中。
- DataNode是文件存储的基本单元(存储了文件的具体内容),它将文件块存储在本地文件系统中,保存了所有的文件块的Metadata元数据,同时周期性的将所有岑仔的文件块信息发送给NameNode.
- Client就是需要获取分布式文件系统文件的应用程序。
作为分布式文件系统,HDFS在数据管理方面还有值得借鉴的几个功能:
- 文件块(Block)的放置:一个Block会有三份备份,一份放在NameNode指定的DataNode上,另一份放在于指定DataNode不在同一台机器上的DataNode上,最后一份放在与指定DataNode同一机架(Rack)的DataNode上。采用这种配置方式主要是考虑同一Rack失败的情况,以及不同Rack之间进行数据复制会带来的性能问题;
- 心跳检测:用心跳检测DataNode的健康状况,如果发现问题就采用数据备份的方式来保证数据的安全性。
- 数据复制:使用Hadoop的balancer命令配置Threshold来平衡每一个DataNode的磁盘利用率。假设设置了Threshold为10%,那么执行balancer命令时,首先会统计所有DataNode的磁盘利用率的平均值,然后判断如果某一个DataNode的磁盘利用率超过这个平均值,那么将会把这个DataNode的Block转移到磁盘利用率较低的DataNode上。
- 数据校验:采用CRC32做数据校验。在写入文件块的时候,除了会写入数据外还会写入校验信息,在读取的时候则需要先校验后读入。
- 数据管道性的写入:当客户端要写入文件到DataNode上时,首先会读取一个Block然后将其写入到第一个DataNode上,接着由第一个DataNode将其传递到备份的DataNode上,直到所有要写入这个Block的DataNode都成功写入后,客户端才会开始写下一个Block。
- 安全模式:分布式文件系统启动时会进入安全模式(文件系统中的内容不允许修改也不允许删除,直到安全模式结束)。安全模式主要是为了在系统启动时检查各个DataNode上数据块的有效性,同时根据策略进行必要的复制或删除部分的数据块。如果系统刚启动时你进行修改删除操作会得到不允许修改的错误提示,只需要等待一会儿即可。
5.Hadoop集群
先介绍下Hadoop对各个节点的角色定义,分别从三个角度将主机划分为两种角色:
- 最基本的划分为Master和Slave,即主人和奴隶;
- 从HDFS的角度,将主机划分为NameNode和DataNode;
- 从MapReduce的角度,将主机划分为JobTracker和TaskTracker;
一般来说,一个Hadoop中由两层拓扑结构组成,每个机架会有30~40台机器,这些机器共享一个1GB带宽的网络交换机。在所有机架之上还有一个核心交换机或路由器,通常来说其网络交换能力为1GB或更高。
6.配置文件参数说明
conf/core-site.xml
- fs.default.name:NameNode的IP地址及端口号。
conf/hdfs-site.xml
- dfs.name.dir:NameNode存储名字空间及汇报日志的位置
- dfs.data.dir:DataNode存储数据块的位置
conf/mapred-site.xml
- mapreduce.jobtracker.address:JobTracker的IP地址及端口。
- mapreduce.jobtracker.system.dir:MapReduce在HDFS上存储文件的位置,例如/Hadoop/mapred/system/
- mapreduce.jobtracker.hosts.filename/:允许的TaskTrackers列表。
- mapreduce.jobtracker.host.exclude.filename:禁止的TaskTrackers列表。
一般而言,除了规定端口,IP地址,文件的存储位置外,其它配置都不是必须修改的,可以根据需要决定采用默认配置还是自己修改。以上配置都被默认为最终参数,这些参数都不可以在程序中再次修改。
7.MapReduce原理
以上是关于Hadoop——安装以及整体了解的主要内容,如果未能解决你的问题,请参考以下文章
大数据-Hadoop生态-HDFS的读写数据流程以及机架感知