虚拟机搭建以及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 vim
yum -y install openssh-clients
yum -y install openssh-server
如果显示没有yum命令自己百度安装。 注意:顺序不可以乱
配置Master容器的ssh密钥
/usr/sbin/sshd
/usr/sbin/sshd-keygen -A
/usr/sbin/sshd
ssh-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-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 Master
172.17.0.3 Slave1
172.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 Slave1
rm -rf /usr/local/hadoop-2.7.5/hdfs
mkdir -p /usr/local/hadoop-2.7.5/hdfs/data
ssh Slave2
rm -rf /usr/local/hadoop-2.7.5/hdfs
mkdir -p /usr/local/hadoop-2.7.5/hdfs/data
删除Master中的name子文件夹
ssh Master
rm -rf /usr/local/hadoop-2.7.5/hdfs
mkdir -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_162
export HADOOP_HOME=/usr/local/hadoop-2.7.5
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
输入一下命令立即执行修改好的文件
source /etc/profile
输入jps可以查看datanode是否被启动
- 回到Master容器,查看容器启动状态
hadoop dfsadmin -report
至此完成Hadoop 的配置。