前一篇文章介绍了hadoop伪分布式模式的搭建,本篇文章介绍分布式模式的搭建。
分布式和伪分布式的区别,只是hadoop是真真正正跑在多个机器上,他们的配置其实是十分相似的。不过有以下几点需要注意:
- hadoop的分布式模式只能运行在linux上,在windows上时不可以的,至少在hadoop2.5.1这个版本上不可以。至于原因,有很多,本人尝试过在多个windows上跑hadoop,都以失败告终(例如windows下根本就没有免密码登录这个概念)。
- hadoop运行的各个机器,都必须要有一个主机名。也就是说各个机器上的hadoop之间进行通信时,使用的都是主机名,而非ip。因此某些ip爱好者(例如我自己),如果希望配置hadoop的各个节点时直接使用ip地址,都省省吧。
- SSH免密码登录必不可少。
前提
由于是真正的分布式,所以需要多台机器。建议至少4台linux机器,一个是namenode
,一个是resourcemanager
,另外两台同时运行datanode
和nodemanager
,以便模拟当一台机器宕机后,hadoop能否正常工作。
规划
四台机器的功能如下:
ip | 主机名 | 运行的hadoop节点 | 说明 |
---|---|---|---|
192.168.56.2 | h2 | namenode | hdfs的namenode节点 |
192.168.56.3 | h3 | resourcemanager | hdfs的resourcemanager节点 |
192.168.56.4 | h4 | datanode、nodemanager | hdfs的namenode和nodemanager节点 |
192.168.56.5 | h5 | datanode、nodemanager | hdfs的namenode和nodemanager节点 |
配置hadoop分布式模式需要如下几步
第一步,配置基础环境。
4台机器配置如下环境:
- 解压JDK,配置JAVA_HOME和PATH环境变量
- 解压HADOOP,并配置HADOOP_PREFIX和PATH环境变量。注意:PATH要把hadoop目录下的bin和sbin都加进去
- 配置ssh免密码登录
- 配置各个机器的主机名(centos在/etc/sysconfig/network修改,ubuntu在/etc/hostname中修改)。注意:这里的主机名要和hosts文件中的主机名一致。
- 配置hosts文件。假设四台机器的ip分别为192.168.56.2,192.168.56.3,192.168.56.4,192.168.56.5。这里给它们分别起名字分别为h2,h3,h4,h5。
那么host文件这么写:
192.168.56.2 h2
192.168.56.3 h3
192.168.56.4 h4
192.168.56.5 h5
四台机器都是用同样的hosts文件。
第二步,修改hadoop配置文件。
hadoop所以配置文件都在${HADOOP_HOME}/etc/hadoop中
修改core-site.xml如下:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://h2:9000</value>
</property>
<property>
<name>hadoop.native.lib</name>
<value>true</value>
<description>Should native hadoop libraries, if present, be used.</description>
</property>
<!-- 允许任意地址访问 -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<!-- 允许任意地址访问 -->
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
</configuration>
修改hdfs-site.xml如下:
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 修改hdfs文件的保存位置 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/root/hadoop/dfs/name</value>
</property>
<!-- 修改hdfs文件的保存位置 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/root/hadoop/dfs/data</value>
</property>
<!-- 修改hdfs文件块大小为1MB -->
<property>
<name>dfs.blocksize</name>
<value>1048576</value>
</property>
</configuration>
修改mapred-site.xml:
<configuration>
<!-- 使用yarn作为mapreduce的实现 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
修改yarn-site.xml:
<configuration>
<!-- 指定resourcemanager的主机名(resourcemanager为yarn的核心) -->
<property>
<description>The hostname of the RM.</description>
<name>yarn.resourcemanager.hostname</name>
<value>h3</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定yarn临时文件保存位置 -->
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/root/hadoop/mapred/local</value>
</property>
</configuration>
启动hadoop
第一次使用需要格式化hdfs
在h2机器上,执行${HADOOP_HOME}/bin/hdfs.bat namenode -format
来格式化hdfs
启动dfs
在h2机器上,执行${HADOOP_HOME}/sbin/start-dfs
来启动hdfs
在浏览器中输入http://192.168.56.2:50070 可看到hdfs已启动
同时在进程列表中可看到nodemanager
,secondarynamenode
等进程,同时在h4和h5机器上可以看到datanode
等进程。
启动yarn(mapreduce)
在h3机器上,执行${HADOOP_HOME}/sbin/start-yarn
来启动yarn
在浏览器中输入http://192.168.56.3:8088 可看到yarn已启动
同时在进程列表中可看到resourcemanager
进程,在h4和h5机器上课看到nodemanager
等进程。
全文完。