首先,需要对一台机器进行单机和伪分布式的设置及验证,可以参考单机伪分布式设置。
选择典型的集群规划,即一台Master,两台Slave的设置。 主机名及局域网IP配置如下:
主机名 | 角色 | IP |
---|---|---|
Master | 主机 | 192.168.1.108 |
Slave1 | 从机1 | 192.168.1.106 |
Slave2 | 从机2 | 192.168.1.107 |
对于集群中的任意主机和从机都需要完成如下配置: 1. 网络配置 2. SSH无密码登陆 3. java及apache环境设置
首先,默认每个机器都已经能够连上互联网,有自己的ip
$ ifconfig #查看ip及网关
$ ping www.baidu.com
$ vim /etc/hostname #修改主机名
Master
$ vim /etc/hosts #修改主机名与IP的映射
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.108 Master
192.168.1.106 Slave1
192.168.1.107 Slave2
$ ping Master
$ ping Slave1
$ ping Slave2
需要注意的是,上述配置只表示了主机的配置,对应的从机也需要设置相应的配置及验证。
这里的要求是Master和Slave1、Slave2可以相互无密码ssh登陆。 下面以Master无密码登陆Slave1举例配置。 同样地,还需要配置Master~Slave2、Slave1~Master、Slave2~Master。
$ cd ~/.ssh # 如果没有该目录,先执行一次ssh localhost
$ ssh-keygen -t rsa # 生成的密钥保存为.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys #将本机的公匙在本机添加授权
$ ssh Master # 免密码登陆本机验证
$ scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/ #将本机的公匙给Slave1
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys #将本机的公匙在Slave1添加授权
$ ssh Slave1 # 免密码登陆Slave1验证
这里可以参考单机伪分布式设置。
主机的安装,主要在原来伪分布式的基础上,修改如下5个配置文件。
1.文件slaves
$ vim etc/hadoop/slaves
Slave1
Slave2
2.文件core-site.xml
(注意原来的localhost这里变成了Master)
$ vim etc/hadoop/core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
3.文件hdfs-site.xml
(注意加了secondary,另外slave的个数变化了)
$ vim etc/hadoop/hdfs-site.xml
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>Master:50090</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
4.文件mapred-site.xml
(无变化)
$ cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
$ vim etc/hadoop/mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
5.文件yarn-site.xml
(注意增加了master)
$ vim etc/hadoop/yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
配置好后,下面需要将Master上的hadoop文件夹复制到各个节点上。因为之前跑过伪分布式模式,所以建议切换到集群模式之前先删除临时文件。
$ cd /usr/local
$ rm -r ./hadoop/tmp
$ tar -zcf ./hadoop.tar.gz ./hadoop
$ scp ./hadoop.tar.gz Slave1:/home/hadoop
$ scp ./hadoop.tar.gz Slave2:/home/hadoop
然后在Slave1,Slave2上执行
$ cd ~
$ tar -zxf ~/hadoop.tar.gz -C /usr/local
$ chown -R hadoop:hadoop /usr/local/hadoop
下面,就可以在Master节点上启动hadoop
$ cd /usr/local/hadoop
$ bin/hdfs namenode -format
$ sbin/start-dfs.sh
$ sbin/start-yarn.sh
$ jps #验证
$ bin/hdfs dfsadmin -report
应该能看到Master
节点启动了NameNode
、SecondrryNameNode
、ResourceManager
进程。
Slave
节点则启动了DataNode
和NodeManager
进程。
同时,登陆http://master:50070/
查看相关状态
执行分布式实例与伪分布式相同
$ bin/hdfs dfs -mkdir -p /user/hadoop
$ bin/hdfs dfs -put etc/hadoop input
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar grep input output 'dfs[a-z.]+'
$ /usr/local/hadoop/sbin/mr-jobhistory-daemon.sh start historyserver #手动开启 jobhistory server
$ bin/hdfs dfs -cat output/*
关闭
$ sbin/stop-dfs.sh
$ sbin/stop-yarn.sh
$ sbin/stop-all.sh
slaves
,core-site.xml
,hdfs-site.xml
,mapred-site.xml
,yarn-site.xml
的区别。hdfs dfsadmin -report hdfs namenode -format(需要实现删除tmp临时文件) service iptables stop service iptables status 查看log日志文件
将主机的分布式模式改变成伪分布式模式。从机的不变。