虚拟机搭建以及Docker安装
参见云架构和虚拟化的大作业。
实现阶段
容器互连
拉取Hadoop镜像
docker pull registry.cn-beijing.aliyuncs.com/bitnp/docker-spark-hadoop
查看镜像
docker images

创建容器
docker run -it --name Master -h Master registry.cn-beijing.aliyuncs.com/bitnp/docker-spark-hadoop /bin/bash
docker run -it --name Slave1 -h Slave1 registry.cn-beijing.aliyuncs.com/bitnp/docker-spark-hadoop /bin/bash
docker run -it --name Slave2 -h Slave2 registry.cn-beijing.aliyuncs.com/bitnp/docker-spark-hadoop /bin/bash
这里创建完成之后会直接进入容器当中,按住
Ctrl + P + Q可以在不关闭容器的情况下退出容器,如果按住Ctrl + C则会退出容器。Ctrl+P+Q暂时退出容器,输入如下命令查看三个容器的IPdocker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)

记住这三个IP地址。在容器中安装相应的包
首先进入Master容器
docker attach Master
接下来使用yum进行安装
yum -y install vimyum -y install openssh-clientsyum -y install openssh-server
如果显示没有yum命令自己百度安装。 注意:顺序不可以乱
配置Master容器的ssh密钥
/usr/sbin/sshd/usr/sbin/sshd-keygen -A/usr/sbin/sshdssh-keygen -t rsa
这里前三个命令会告诉你找不到文件,不用理会,顺序输入即可。 最后一条命令是用于生成ssh,如果不小心重复生成,在override中输入
y或者yes对原始密钥进行覆盖。存储密钥
cat /root/.ssh/id_rsa >> /root/.ssh/authorized.keys
输入cat命令查看保存的密钥:
cat /root/.ssh/authorized.keys
密钥的形式大致如下:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCnfGoobPBQlX38ePTP88oTWeYZvaR73ADrDPTyEEX6Fy4Og4IQcd6pq5g0vjUdVxCVnes7Us+CpKvPkrqjAqDPm/oY61jplDZCzxEG45kbHl06SY8X/+Km12PsKjOKWDJzCwTs1u0EnXL1UDmFePGhv/MJNPti+hM+itNM/QWfk6ObzFjDY6sGexe3zRqi9fdZLZVNFL3PPIfS0cHdA/Vw+8FXeEfFifTwRNwOVG9rKEsL2TyhCcynn4hRJ9AFwl18GvJn5eLxuPeVVuKn8yzGpDhVvuntdGVxCcGgaWiwyb/W8mtxozXP1C5fKkM6fghj46kK9MdtR14f49Tkc5JB root@Master
最后结尾一定是
**用户名**+**@容器名称**。如果不是请重新进行上述步骤,或者直接删除容器(方法自行百度)重新创建。创建一个word或者txt文件,保存上面的密钥,后面有用。
再次输入如下命令
/usr/sbin/sshd
尝试自连:
ssh localhost
如果可以连接到localhost,并且不需要密码,则说明配置成功。
- 修改容器的配置
输入下面的命令,进入配置页面
vim /etc/ssh/sshd_config
找到#Port 22这一行,按住i键进入编辑模式,在这一行之后添加如下配置。
#Port 22#PermitRootLogin yes#PubkeyAuthentication yes#PasswordAuthentication yes#ChallengeResponseAuthentication no#UsePAM yes#PrintLastLog no
按住ESC退出编辑模式,键盘输入:wq保存并退出。
继续输入一下命令进行配置:
vim /etc/ssh/ssh_\config
在第35行左右修改配置如下:
StrictHostKeyChecking no
注意需要去除前面的#,后面的ask改为no
修改hosts文件
vim /etc/hosts
把前面三个容器的IP地址写入:
127.0.0.1 localhost::1 localhost ip6-localhost ip6-loopbackfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6-allrouters172.17.0.2 Master172.17.0.3 Slave1172.17.0.4 Slave2
这里如果是在
Master容器当中,那么就只需要写入Slave1和Slave2的IP即可。接下来就按照步骤
5-9分别对Slave1和Slave2分别进行配置和生成SSH。注意一定要把生成的SSH记录下来。
分别进入三个容器,修改
/root/.ssh/authorized.keys文件vim /root/.ssh/authorized.keys
把三个容器的ssh密钥复制粘贴进去,保存退出。
ssh互连
这里进入了Master容器:
ssh Slave1
Hadoop实战
先进入Master容器
- 修改core-site配置
首先查找路径
find / -name core-site.xml

复制第一个路径,用vim进行修改:
vim /usr/local/hadoop-2.7.5/etc/hadoop/core-site.xml
修改内容如下:
- 修改yarn-site配置
同上,先找到文件,再修改
find / -name yarn-site.xml
vim /usr/local/hadoop-2.7.5/etc/hadoop/yarn-site.xml
修改配置如下:把spark-master改为Master,再添加一个配置
<property><name>yarn.resourcemanager.address</name><value>Master:8032</value></property><property><name>yarn.resourcemanager.scheduler.address</name><value>Master:8030</value></property><property><name>yarn.resourcemanager.resource-tracker.address</name><value>Master:8031</value></property><property><name>yarn.resourcemanager.admin.address</name><value>Master:8033</value></property><property><name>yarn.resourcemanager.webapp.address</name><value>Master:8088</value></property><property><name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name><value>org.apache.hadoop.mapred.ShuffleHandler</value></property>
- 修改mapred-site配置
步骤同上:
find / -name mapred-site.xml
vim /usr/local/hadoop-2.7.5/etc/hadoop/mapred-site.xml
删除后面两个property
<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property></configuration>
修改hdfs-site 配置
find / -name hdfs-site.xml
vim /usr/local/hadoop-2.7.5/etc/hadoop/hdfs-site.xml
删除第一个和第四个
property<configuration><property><name>dfs.replication</name><value>2</value></property><property><name>dfs.namenode.name.dir</name><value>file:/usr/local/hadoop-2.7.5/hdfs/name</value></property></configuration>
重复上述1-4为其他两个容器配置
注意在配置最后一个文件的时候,保留data配置,删除name配置,也就是删除第一个和第三个property
<configuration><property><name>dfs.replication</name><value>2</value></property><property><name>dfs.namenode.data.dir</name><value>file:/usr/local/hadoop-2.7.5/hdfs/name</value></property></configuration>
删除Slave1和Slave2中的hdfs目录
ssh Slave1rm -rf /usr/local/hadoop-2.7.5/hdfsmkdir -p /usr/local/hadoop-2.7.5/hdfs/datassh Slave2rm -rf /usr/local/hadoop-2.7.5/hdfsmkdir -p /usr/local/hadoop-2.7.5/hdfs/data
删除Master中的name子文件夹
ssh Masterrm -rf /usr/local/hadoop-2.7.5/hdfsmkdir -p /usr/local/hadoop-2.7.5/hdfs/name
在Master容器中格式化HDFS目录
hdfs namenode -format
进入sbin文件,启动hadoop集群
cd /usr/local/hadoop-2.7.5/sbin./start-all.sh
jps查看namenode结点是否被启动

- 在Master、Slave1、Slave2三个容器中,配置
/etc/profile文件
输入:
vim /etc/profile
在文件末尾添加如下配置:
export JAVA_HOME=/usr/local/jdk1.8.0_162export HADOOP_HOME=/usr/local/hadoop-2.7.5export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
输入一下命令立即执行修改好的文件
source /etc/profile
输入jps可以查看datanode是否被启动
- 回到Master容器,查看容器启动状态
hadoop dfsadmin -report

至此完成Hadoop 的配置。
