这是我参与「第四届青训营 」笔记创作活动的第8天
安装docker
添加docker到yum源
## 1.安装
[root@hadoop ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-bash: yum-config-manager: 未找到命令
## 2.尝试安装yum-config-manager
[root@hadoop apps]# yum install -y yum-config-manager
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
- base: mirrors.ustc.edu.cn
- epel: mirrors.ustc.edu.cn
- extras: mirrors.ustc.edu.cn
- updates: mirrors.ustc.edu.cn
没有可用软件包 yum-config-manager。
错误:无须任何处理
## 3.经查询,系统没有这个yum-config-manager命令,在yum-utils包里。
[root@hadoop apps]# yum -y install yum-utils
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
已安装:
yum-utils.noarch 0:1.1.31-54.el7_8
完毕!
## 4.再次安装
[root@hadoop apps]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
已加载插件:fastestmirror
adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
安装docker
##2. 安装docker
[root@hadoop yum.repos.d]# yum -y install docker-ce
##3. 配置
[root@hadoop yum.repos.d]# mkdir -p /etc/docker
[root@hadoop yum.repos.d]# mkdir -p /data/apps/docker
##4. 将daemon.json拷贝到/data/apps/docker
##5. 启动docker
[root@hadoop yum.repos.d]# systemctl start docker
[root@hadoop docker]# ps -ef | grep docker
root 5791 1 0 09:04 ? 00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root 6014 1896 0 09:05 pts/0 00:00:00 grep --color=auto docker
安装Hadoop
获取镜像
-
查看镜像
[root@hadoop docker]# docker search hadoop -
使用命令拉到本地:
docker pull registry.cn-hangzhou.aliyuncs.com/kaibb/hadoop -
下载完成之后,通过docker images 可以查看到该镜像:
[root@hadoop docker]# docker images
创建容器
有了镜像之后,我们根据该镜像创建三个容器,分别是一个master用来作为hadoop集群的namenode,剩下两个slave用来作为datanode。
-
创建master节点
[root@hadoop docker]# docker run -i -t --name master -h master -p 50070:50070 -p 9000:9000 -p 9870:9870 -p 8088:8088 -p 10000:10000 registry.cn-hangzhou.aliyuncs.com/kaibb/hadoop /bin/bash- -h : 设置了主机名;
- –name : 容器的名字;
- -p : 指定对外开放的端口,有其他组件的可以提前把端口映射出来
-
建立好Master节点的容器之后,再分别使用两次该命令,创建两个Slave节点。稍微改变其中的参数即可:
例如创建Slave1节点:
docker run -i -t --name slave1 -h slave1 registry.cn-hangzhou.aliyuncs.com/kaibb/hadoop /bin/bash
这样集群的基本环境就准备好了。
配置SSH
-
进入hadoop容器
[root@hadoop docker]# docker exec -it hadoop bash -
生成密钥
bash-4.1# /etc/init.d/sshd start bash-4.1# ssh-keygen -t rsa 将/root/.ssh下的id_rsa.pub添加到authorized_keys bash-4.1# cd /root/.ssh bash-4.1# cat id_rsa.pub > authorized_keys -
合并密钥并拷贝到容器中
## 1.拷贝到本地 [root@hadoop ssh]# docker cp master:/root/.ssh/authorized_keys ./authorized_keys_master [root@hadoop ssh]# docker cp slaves1:/root/.ssh/authorized_keys ./authorized_keys_slave1 [root@hadoop ssh]# docker cp slaves2:/root/.ssh/authorized_keys ./authorized_keys_slave2 ## 2.合并 [root@hadoop ssh]# touch authorized_keys [root@hadoop ssh]# cat authorized_keys_master authorized_keys_slave1 authorized_keys_slave2 > authorized_keys ## 3.上传 [root@hadoop ssh]# docker cp ./authorized_keys master:/root/.ssh/authorized_keys [root@hadoop ssh]# docker cp ./authorized_keys slaves1:/root/.ssh/authorized_keys [root@hadoop ssh]# docker cp ./authorized_keys slaves2:/root/.ssh/authorized_keys -
修改映射文件
## 查看本机ip:ifconfig/ip addr bash-4.1# vi /etc/hosts ... 172.17.0.2 master 172.17.0.3 slave1 172.17.0.4 slave2
配置hadoop
为了方便起见,我们可以直接在Master节点进行配置,然后使用scp命令发送到各节点覆盖原来的即可。
-
hadoop-env.sh:修改有关java的环境
export JAVA_HOME=/usr/java/default export HADOOP_PREFIX=/usr/local/hadoop export HADOOP_HOME=/usr/local/hadoop -
core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/hadoop/tmp</value> </property> </configuration> -
hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/hadoop/data</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/hadoop/name</value> </property> </configuration> -
mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> -
yarn-site.xml
<configuration> <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</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> </configuration> -
slaves
master slave1 slave2 -
相关目录最好需要手动创建,然后分发给其他节点上
mkdir /hadoop/data mkdir /hadoop/name mkdir /hadoop/tmp scp -r hadoop root@Slave1:/ scp -r hadoop root@Slave2:/ -
将这些文件通过scp发送到各个Slave节点上覆盖原来的文件:
scp core-site.xml hadoop-env.sh hdfs-site.xml mapred-site.xml yarn-site.xml slave1:/opt/tools/hadoop/etc/hadoop/
运行hadoop
-
进行格式化操作:
hadoop namenode -format -
启动集群:
./start-all.sh -
使用命令查看各节点信息:hadoop dfsadmin -report