Hadoop 介绍
TODO
Hadoop 的几种角色
- NameNode:存储管理整个集群中所有数据的元数据(包括文件名称、大小、位置、属性、创建时间、修改时间等等),多个 NameNode 可以实现高可用性。相当于一个领导者,负责调度 比如你需要存一个640m的文件 如果按照64m分块 那么namenode就会把这10个块(这里不考虑副本)分配到集群中的datanode上 并记录对于关系 。当你要下载这个文件的时候namenode就知道在那些节点上给你取这些数据了。它主要维护两个map 一个是文件到块的对应关系 一个是块到节点的对应关系。
- Datanode: 是文件系统的工作节点,他们根据客户端或者是namenode的调度存储和检索数据,并且定期向namenode发送他们所存储的块(block)的列表。集群中的每个服务器都运行一个DataNode后台程序,这个后台程序负责把HDFS数据块读写到本地的文件系统。当需要通过客户端读/写某个 数据时,先由NameNode告诉客户端去哪个DataNode进行具体的读/写操作,然后,客户端直接与这个DataNode服务器上的后台程序进行通 信,并且对相关的数据块进行读/写操作。
ResourceManager: ResourceManage 即资源管理,在YARN中,ResourceManager 负责集群中所有资源的统一管理和分配,它接收来自各个节点(NodeManager)的资源汇报信息,并把这些信息按照一定的策略分配给各个应用程序(实际上是ApplicationManager)。RM包括Scheduler(定时调度器)和ApplicationManager(应用管理器)。Schedular负责向应用程序分配资源,它不做监控以及应用程序的状态跟踪,并且不保证会重启应用程序本身或者硬件出错而执行失败的应用程序。ApplicationManager负责接受新的任务,协调并提供在ApplicationMaster容器失败时的重启功能。
NodeManager: NodeManager 是 ResourceManager 在每台机器上的代理,负责容器管理,并监控它们的资源使用情况,以及向ResourceManager/Scheduler提供资源使用报告。
- Secondary NameNode: 是一个用来监控HDFS状态的辅助后台程序。就想NameNode一样,每个集群都有一个Secondary NameNode,并且部署在一个单独的服务器上。Secondary NameNode不同于NameNode,它不接受或者记录任何实时的数据变化,但是,它会与NameNode进行通信,以便定期地保存HDFS元数据的 快照。由于NameNode是单点的,通过Secondary NameNode的快照功能,可以将NameNode的宕机时间和数据损失降低到最小。同时,如果NameNode发生问题,Secondary NameNode可以及时地作为备用NameNode使用。(TODO 解释需要修正)
Hadoop 安装
容量规划
三台机器:hostc, hostb, hostc
角色:
- hosta : NameNode,DataNode,ResourceManager,NodeManager,HistoryServer
- hostb : DataNode,NodeManager
- hostc : DataNode,NodeManager
下载
下载 Hadoop 2.6.5,并解压
$ mkdir downloads
$ cd downloads
$ wget http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.6.5/hadoop-2.6.5.tar.gz .
$ tar -zxvf ./hadoop-2.6.5.tar.gz
$ mv ./hadoop-2.6.5 <distdir>
配置 Hadoop
配置主机 hosts 文件
$ sudo vim /etc/hosts
hosta 192.168.0.151
hostb 192.168.0.152
hostc 192.168.0.153
配置 hadoop-env.sh
$ vim ./etc/hadoop/hadoop-env.sh
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/java/jdk1.7.0_79
配置 core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://hosta:9000</value>
<description>Namenode 地址</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/admin/hadoop-2.6.5/var/tmp</value>
<description>Namenode 的本地临文件夹</description>
</property>
更多配置可以参考 ./share/doc/hadoop/hadoop-project-dist/hadoop-common/core-default.xml 文件。
配置 hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>2</value>
<description>
副本个数,配置默认是3, 应小于datanode机器数量
</description>
</property>
更多配置可以参考 ./share/doc/hadoop/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml 文件。
配置 mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<description>
yarn 是最新的调度方式。
</description>
</property>
更多配置可以参考 ./share/doc/hadoop/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml 文件。
配置 yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hosta</value>
<description>ResourceManager 地址</description>
</property>
更多配置可以参考 ./share/doc/hadoop/hadoop-yarn/hadoop-yarn-common/yarn-default.xml
格式化 namenode
就像操作系统的磁盘第一次使用前要格式化一样,hdfs同样也是一种文件系统,也需要格式化。只需要在 namenode 上执行。
$ ./bin/hdfs namenode -format
启动 Hadoop
启动 namenode
$ ./sbin/hadoop-daemon.sh start namenode
验证:
可以通过 http://hosta:50070 来访问 Namenode Web 界面,如图:
启动 datanode
$ ./sbin/hadoop-daemon.sh start datanode
可以通过 http://hosta:50070/dfshealth.html#tab-datanode 来查看 datanode 是否注册上了,如图:
启动 resourcemanager
$ ./sbin/yarn-daemon.sh start resourcemanager
可以通过 http://hosta:8088/ 来查看 resourcemanager 是否启动成功,如图:
启动 nodemanager
$ ./sbin/yarn-daemon.sh start nodemanager
可以通过 http://hosta:8088/ 来查看 nodemanager 是否注册成功,如图:
启动 historyserver
$ ./sbin/mr-jobhistory-daemon.sh start historyserver
可以通过 http://hosta:19888/ 来查看 historyserver 是否启动成功,如图:
常见问题
datanode 无法和 namenode 通信
查看datanode 看到有如下日志出现 beginning handshake with NN Datanode denied communication with namenode because hostname cannot be ,需要修正 namenode 的 hosts 文件。
配置 SSH
SSH 不是必须的,主要用来方便管理集群。