虚拟机搭建以及Docker安装

参见云架构和虚拟化的大作业。


实现阶段

容器互连

  1. 拉取Hadoop镜像

    1. docker pull registry.cn-beijing.aliyuncs.com/bitnp/docker-spark-hadoop
  2. 查看镜像

    1. docker images

    image.png

  3. 创建容器

    1. docker run -it --name Master -h Master registry.cn-beijing.aliyuncs.com/bitnp/docker-spark-hadoop /bin/bash
    1. docker run -it --name Slave1 -h Slave1 registry.cn-beijing.aliyuncs.com/bitnp/docker-spark-hadoop /bin/bash
    1. docker run -it --name Slave2 -h Slave2 registry.cn-beijing.aliyuncs.com/bitnp/docker-spark-hadoop /bin/bash

    这里创建完成之后会直接进入容器当中,按住Ctrl + P + Q可以在不关闭容器的情况下退出容器,如果按住Ctrl + C则会退出容器。

  4. Ctrl+P+Q暂时退出容器,输入如下命令查看三个容器的IP

    1. docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)

    image.png
    记住这三个IP地址。

  5. 在容器中安装相应的包

首先进入Master容器

  1. docker attach Master

接下来使用yum进行安装

  1. yum -y install vim
  2. yum -y install openssh-clients
  3. yum -y install openssh-server

如果显示没有yum命令自己百度安装。 注意:顺序不可以乱

  1. 配置Master容器的ssh密钥

    1. /usr/sbin/sshd
    2. /usr/sbin/sshd-keygen -A
    3. /usr/sbin/sshd
    4. ssh-keygen -t rsa

    这里前三个命令会告诉你找不到文件,不用理会,顺序输入即可。 最后一条命令是用于生成ssh,如果不小心重复生成,在override中输入y或者yes对原始密钥进行覆盖。

  2. 存储密钥

    1. cat /root/.ssh/id_rsa >> /root/.ssh/authorized.keys

    输入cat命令查看保存的密钥:

    1. cat /root/.ssh/authorized.keys

    密钥的形式大致如下:

    1. ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCnfGoobPBQlX38ePTP88oTWeYZvaR73ADrDPTyEEX6Fy4Og4IQcd6pq5g0vjUdVxCVnes7Us+CpKvPkrqjAqDPm/oY61jplDZCzxEG45kbHl06SY8X/+Km12PsKjOKWDJzCwTs1u0EnXL1UDmFePGhv/MJNPti+hM+itNM/QWfk6ObzFjDY6sGexe3zRqi9fdZLZVNFL3PPIfS0cHdA/Vw+
    2. 8FXeEfFifTwRNwOVG9rKEsL2TyhCcynn4hRJ9AFwl18GvJn5eLxuPeVVuKn8yzGpDhVvuntdGVxCcGgaWiwyb/W8mtxozXP1C5fKkM6fghj46kK9MdtR14f49Tkc5JB root@Master

    最后结尾一定是**用户名**+ **@容器名称**。如果不是请重新进行上述步骤,或者直接删除容器(方法自行百度)重新创建。

    创建一个word或者txt文件,保存上面的密钥,后面有用。

再次输入如下命令

  1. /usr/sbin/sshd

尝试自连:

  1. ssh localhost

如果可以连接到localhost,并且不需要密码,则说明配置成功。

  1. 修改容器的配置

输入下面的命令,进入配置页面

  1. vim /etc/ssh/sshd_config

找到#Port 22这一行,按住i键进入编辑模式,在这一行之后添加如下配置。

  1. #Port 22
  2. #PermitRootLogin yes
  3. #PubkeyAuthentication yes
  4. #PasswordAuthentication yes
  5. #ChallengeResponseAuthentication no
  6. #UsePAM yes
  7. #PrintLastLog no

按住ESC退出编辑模式,键盘输入:wq保存并退出。
继续输入一下命令进行配置:

  1. vim /etc/ssh/ssh_\config

在第35行左右修改配置如下:

  1. StrictHostKeyChecking no

注意需要去除前面的#,后面的ask改为no
image.png

  1. 修改hosts文件

    1. vim /etc/hosts

    把前面三个容器的IP地址写入:

    1. 127.0.0.1 localhost
    2. ::1 localhost ip6-localhost ip6-loopback
    3. fe00::0 ip6-localnet
    4. ff00::0 ip6-mcastprefix
    5. ff02::1 ip6-allnodes
    6. ff02::2 ip6-allrouters
    7. 172.17.0.2 Master
    8. 172.17.0.3 Slave1
    9. 172.17.0.4 Slave2

    这里如果是在Master容器当中,那么就只需要写入Slave1Slave2的IP即可。

  2. 接下来就按照步骤5-9分别对Slave1Slave2分别进行配置和生成SSH。

    注意一定要把生成的SSH记录下来。

  3. 分别进入三个容器,修改/root/.ssh/authorized.keys文件

    1. vim /root/.ssh/authorized.keys

    把三个容器的ssh密钥复制粘贴进去,保存退出。

  4. ssh互连

这里进入了Master容器:

  1. ssh Slave1

如下即为成功:
image.png

Hadoop实战

先进入Master容器

  1. 修改core-site配置

首先查找路径

  1. find / -name core-site.xml

image.png
复制第一个路径,用vim进行修改:

  1. vim /usr/local/hadoop-2.7.5/etc/hadoop/core-site.xml

修改内容如下:
image.png

  1. 修改yarn-site配置

同上,先找到文件,再修改

  1. find / -name yarn-site.xml
  1. vim /usr/local/hadoop-2.7.5/etc/hadoop/yarn-site.xml

修改配置如下:把spark-master改为Master,再添加一个配置

  1. <property>
  2. <name>yarn.resourcemanager.address</name>
  3. <value>Master:8032</value>
  4. </property>
  5. <property>
  6. <name>yarn.resourcemanager.scheduler.address</name>
  7. <value>Master:8030</value>
  8. </property>
  9. <property>
  10. <name>yarn.resourcemanager.resource-tracker.address</name>
  11. <value>Master:8031</value>
  12. </property>
  13. <property>
  14. <name>yarn.resourcemanager.admin.address</name>
  15. <value>Master:8033</value>
  16. </property>
  17. <property>
  18. <name>yarn.resourcemanager.webapp.address</name>
  19. <value>Master:8088</value>
  20. </property>
  21. <property>
  22. <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
  23. <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  24. </property>
  1. 修改mapred-site配置

步骤同上:

  1. find / -name mapred-site.xml
  1. vim /usr/local/hadoop-2.7.5/etc/hadoop/mapred-site.xml

删除后面两个property

  1. <configuration>
  2. <property>
  3. <name>mapreduce.framework.name</name>
  4. <value>yarn</value>
  5. </property>
  6. </configuration>
  1. 修改hdfs-site 配置

    1. find / -name hdfs-site.xml
    1. vim /usr/local/hadoop-2.7.5/etc/hadoop/hdfs-site.xml

    删除第一个和第四个property

    1. <configuration>
    2. <property>
    3. <name>dfs.replication</name>
    4. <value>2</value>
    5. </property>
    6. <property>
    7. <name>dfs.namenode.name.dir</name>
    8. <value>file:/usr/local/hadoop-2.7.5/hdfs/name</value>
    9. </property>
    10. </configuration>
  2. 重复上述1-4为其他两个容器配置

注意在配置最后一个文件的时候,保留data配置,删除name配置,也就是删除第一个和第三个property

  1. <configuration>
  2. <property>
  3. <name>dfs.replication</name>
  4. <value>2</value>
  5. </property>
  6. <property>
  7. <name>dfs.namenode.data.dir</name>
  8. <value>file:/usr/local/hadoop-2.7.5/hdfs/name</value>
  9. </property>
  10. </configuration>
  1. 删除Slave1和Slave2中的hdfs目录

    1. ssh Slave1
    2. rm -rf /usr/local/hadoop-2.7.5/hdfs
    3. mkdir -p /usr/local/hadoop-2.7.5/hdfs/data
    4. ssh Slave2
    5. rm -rf /usr/local/hadoop-2.7.5/hdfs
    6. mkdir -p /usr/local/hadoop-2.7.5/hdfs/data
  2. 删除Master中的name子文件夹

    1. ssh Master
    2. rm -rf /usr/local/hadoop-2.7.5/hdfs
    3. mkdir -p /usr/local/hadoop-2.7.5/hdfs/name
  3. 在Master容器中格式化HDFS目录

    1. hdfs namenode -format
  4. 进入sbin文件,启动hadoop集群

    1. cd /usr/local/hadoop-2.7.5/sbin
    2. ./start-all.sh
  5. jps查看namenode结点是否被启动

image.png

  1. Master、Slave1、Slave2三个容器中,配置/etc/profile文件

输入:

  1. vim /etc/profile

在文件末尾添加如下配置:

  1. export JAVA_HOME=/usr/local/jdk1.8.0_162
  2. export HADOOP_HOME=/usr/local/hadoop-2.7.5
  3. export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  1. 输入一下命令立即执行修改好的文件
  1. source /etc/profile

输入jps可以查看datanode是否被启动
image.png

  1. 回到Master容器,查看容器启动状态
    1. hadoop dfsadmin -report
    image.png
    至此完成Hadoop 的配置。