前一篇文章介绍了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.2h2namenodehdfs的namenode节点192.168.56.3h3resourcemanagerhdfs的resourcemanager节点192.168.56.4h4datanode、nodemanagerhdfs的namenode和nodemanager节点192.168.56.5h5datanode、nodemanagerhdfs的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_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>第一次使用需要格式化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等进程。
全文完。
