节点ip
master : 172.17.0.2 fedora
slave : 172.17.0.3 ubuntu(docker)
完全分布式是相对于standalone节点部署而言的部署方式。
其实这个部署过程中我犯了个错误,就是本机和容器里面都用了root用户= =
因此操作时本机需要su获取超级用户权限。
fedora和centos的亲缘关系,我们可以把能搜集到的centos资料直接拿来用,开搞。
首先docker pull ubuntu获取ubuntu官方镜像。分别创建两个实例,master、slave,并配置好jdk、hadoop环境变量。
1.配置hosts文件
修改集群中所有机器的/etc/hosts文件,添加如下配置:
172.17.0.2 master
172.17.0.3 slave
master、slave1、slave2等等,指的是机器的机器名(使用命令hostname可以查看本机的机器名),如果不是机器名的话会报错,并且集群中所有结点的机器名都应该不一样。
所谓修改hostname,不过是把上述配置放在hosts配置文件的头几行就行了= =
(我尝试的是头几行可用,其他也有说是末尾加的都可以吧。)
判断是否配置成功,可以从master命令行直接ping slave
试试,ping通即可。
题外话:
由于对docker感兴趣的原因,我一开始使用了docker折腾hadoop,部署master和slave。然而容器在创建之后不能通过修改hosts文件改变hostname,hostname命令也不惯用。这样就要重新创建容器,在创建容器时(使用docker run
命令),使用-h
参数来表明hostname。
如我创建slave节点容器时,sudo docker run -h slave -it --name slave ubuntu /bin/bash
docker start
命令没有-h/-hostname参数,因此不能修改正在运行的容器的hostname。
2.SSH无密码登录
安装openssh-server
sudo apt-get install openssh-server```
安装完成后,启动服务
ubnutu
sudo /etc/init.d/ssh start
fedora
sudo systemctl start sshd.service
查看服务是否正确启动:ps -e | grep ssh
设置免密码登录,**去掉**```/etc/ssh/sshd_config```其中2行的注释,每台服务器都要设置:
RSAAuthentication yes
PubkeyAuthentication yes```
生成私钥和公钥:
ssh-keygen -t rsa ```
一直回车= = 效果如图
![snapshot1.png](http://upload-images.jianshu.io/upload_images/53103-adaf9ee3816a5770.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
尝试两台机器互相ssh登陆,能登陆不报错就pass。
#3.修改hadoop配置文件
######修改hadoop-2.6.0/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_25```
hadoop2.6.0/etc/core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>$HADOOP_HOME/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
hadoop-2.6.0/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>$HADOOP_HOME/dfs/name</value>
<description>Path on the local filesystem where the NameNode stores the namespace and transactions logs persistently.</description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>$HADOOP_HOME/dfs/data</value>
<description>Comma separated list of paths on the local filesystem of a DataNode where it should store its blocks.</description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
<description>why is 2?????????</description>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
cp mapred-site.xml.template mapred-site.xml后修改
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
slaves文件(节点hostname)
master
slave
hadoop-2.6.0/etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-service</name>
<value>mapreduce.shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-service</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>
启动
- 启动HDFS
使用以下命令分别启动NameNode和DataNode:
bin/hadoop namenode -format
sbin/hadoop-daemon.sh start namenode
sbin/hadoop-daemon.sh start datanode(如果有多个datanode,需使用hadoop-daemons.sh)或者一次启动:sbin/ start-dfs.sh
- 启动YARN
你可以使用以下命令分别启动ResourceManager和NodeManager:
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager(如果有多个datanode,需使用yarn-daemons.sh)或者一次启动过:sbin/start-yarn.sh
可能logs文件夹会提示有用户权限问题,chown一下就可以了。
(chown -R <user> logs
)
结果:
访问http://master:8088 , http://slave:8088:
参考
Ubuntu14.04安装配置Hadoop2.6.0(完全分布式)与 wordcount实例运行
CentOS7安装Hadoop2.7完整流程
http://www.cnblogs.com/kinglau/p/3794433.html
centos安装配置hadoop超详细过程
Hadoop YARN安装部署初探
docker hostname