1. docker pull centos:latest
2. 运行容器
docker run -d -it --name=master -h=master \
-v /usr/local/bigdatas/config/:/root/bigdatas/config/ centos:latest /bin/bash
如果systemctl无效,需要用下面的语句:
docker run --privileged=true -itd --name=bigwork \
> -v /usr/local/docker/bigdatas/softs/:/root/bigdatas/softs \
> centos:latest /sbin/init
3. 进入容器
docker exec -it master bash
如果 容器显示 Existed :docker start 容器id或名称
输入内容,包含挂载目录
[root@master /]# ls
anaconda-post.log dev home lib64 mnt proc run srv tmp var
bin etc lib media opt root sbin sys usr
[root@master /]# cd
[root@master ~]# ls
anaconda-ks.cfg bigdatas
[root@master ~]# cd bigdatas
[root@master bigdatas]# ls
config
[root@master bigdatas]#
1. 安装JAVA略
2. 配置 ssh (https://blog.csdn.net/qq_32969313/article/details/64919735)
ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''
ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''
出错: ssh-kengen 找不到命令,需执行: yum install -y openssh;
但是无法连外网:重启docker: systemctl restart docker
a) docker ps -a 查看网运行的 容器 bigwork, 发现 Exited
重新运行: docker start bigwork
(参考: https://www.pianshen.com/article/4448212020/)
/vim /etc/ssh/sshd_config
UsePAM yes 改为 UsePAM no
UsePrivilegeSeparation sandbox 改为 UsePrivilegeSeparation no
执行:
/usr/sbin/sshd -D
是否执行成功:
[root@master ssh]# ps -ef | grep sshd
root 370 58 2 22:01 pts/1 00:00:00 /usr/sbin/sshd -D
root 372 341 0 22:01 pts/2 00:00:00 grep --color=auto sshd
ssh 登录
错误: 提示ssh命令不存在: yum -y install openssh-clients
(如果网络不通,重启 docker , systemctl restart docker)
[root@localhost java]# ssh localhost
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:wFcL5b84h2ebW/LP8mXSCztH4H5O4XCd13CdBjMpgxA.
ECDSA key fingerprint is MD5:5d:eb:5b:09:8b:86:7a:29:e3:d9:87:cf:72:d2:cb:75.
Are you sure you want to continue connecting (yes/no)? y
Please type 'yes' or 'no': yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
root@localhost's password:
Last login: Mon Jul 8 04:56:24 2019 from 192.168.140.1
[root@localhost ~]#
错误: 可能会提示 输入密码不对 (我输入的是本机密码);
>passwd root (然后两次设置密码)
>如果 passwd 命令不存在: yum install passwd
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
安装hadoop;
1. 解压
cd
cd bigdatas/config
tar xzvf hadoop.xxx.tar.gz -C /usr/local
...
cd /uar/local
mv hadoop.xxx.xx hadoop
cd hadoop/bin
./hadoop -version
提示配置问题
Error: JAVA_HOME is not set and could not be found.
执行 source /etc/profile
错误: 提示可能为 ./hadoop version (没有横杠, 去掉后,正常返回)
依照上面的配置:
https://blog.csdn.net/u013140345/article/details/79773212
登陆 docker:
docker login
(glootz):
password: xxxxxx
docker ps -a 看 master 容器的id
docker commit master容器id centos/hadoop
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
从 centos/hadoop 创建容器
master
1. /etc/hosts (原只有一个 master 记录, slave1, slave2也要同步配置)
172.17.0.2 master
172.17.0.3 slave1
172.17.0.4 slave2
2. /usr/local/hadoop/etc/hadoop/ 文件 slaves
将 localhost 注释 (master, slave1, slave2 三个同步配置, slaves 文件内,只添加slave1,slave2 两行)
添加:
slave1
slave2
两行;
3. 同样在 slave1, slave2 的 /etc/hosts 添加三行 记录
slave1 上原只有 slave1 记录, slave2 一样
4. 三个IP(原本各只有一个,都是生成好的)
//////////////////////////////////////////////////////////////////////////////////////////////////////
配置 ssh
配置 三台容器主机 的登录密码:
passwd
...:xxxxxxxx #要求8位以上
重复输入;
5. 在 master 上 ssh slave1 ,输入密码,正常登录;
6. 设置master 免密登录 slave1, slave2
参数: https://blog.csdn.net/zjh_746140129/article/details/81980416
在 master 上执行
cd ~/.ssh/ #如果没有要创建
ssh-keygen -t rsa
ll
cat id_rsa.pub >> authorized_keys
在进入 slave1, slave2 容器; (要先创建,这部很重要)
创建各自的
mkdir ~/.ssh/
回到 master 执行;
scp authorized_keys slave1:~/.ssh/ #要输入登录 slave1 的密码
scp authorized_keys slave2:~/.ssh/ #要输入登录 slave2 的密码
2022-01-07 新增 slavex 到 master 的免密登录 (以上为 slave1 说明)
[root@slave1 .ssh]# ssh-keygen -t rsa
... 一直回车
[root@slave1 .ssh]# ls
authorized_keys id_rsa id_rsa.pub known_hosts
[root@slave1 .ssh]# cp id_rsa.pub id_rsa_slave1.pub
[root@slave1 .ssh]# ls
authorized_keys id_rsa id_rsa.pub id_rsa_slave1.pub known_hosts
[root@slave1 .ssh]# scp id_rsa_slave1.pub master:~/.ssh/
回到 master: ~/.ssh
[root@master .ssh]# cat id_rsa_slave1.pub >> authorized_keys
[root@master .ssh]# cat id_rsa_slave2.pub >> authorized_keys
测试从 master ssh slave1, slave2 不用密码;
测试从 slavex 到 master 不用密码
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
7. 在 master 上启动 hadoop
cd /usr/local/hadoop
bin/hdfs namenode -format
....一大堆输出
sbin/start-all.sh
...需要 yes 输入;
错误: 2021-12-29
a. 执行 /bin>.hdfs namenode -format 没提示什么错误,有shutdown 字;
b. /sbin>./start-all.sh 提示: /usr/local/hadoop/bin/hdfs: line 28: which: command not found
运行命令: yum -y install which
重新执行 namenode 格式化;
c. 重新格式化后 命令: JPS,有显示 ResourceManager及Jps两项;
d. 再执行 /sbin>start-all.sh 还是报:
slavex: /usr/local/hadoop/bin/hdfs: line 35: /usr/local/hadoop/../libexec/hdfs-config.sh: No such file or directory
因为:slave1,2也要安装 which
8. 验证
在 master 执行 jps ,这里提示 command not found
重新 source /etc/profile 即可
[root@master jdk1.8.0_141]# jps
564 ResourceManager
424 SecondaryNameNode
891 Jps
238 NameNode
在 slave1 上验证
[root@slave1 /]# jps
307 DataNode
407 NodeManager
551 Jps
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
问题1:
每次关机再开机后,执行start-all.sh后,namenode并没有启动。出现这个问题的主要原因是hadoop的临时文件 默认位置为${HADOOP_HOME}/tmp目录,该目录在系统开机时会自动清空,存储在里面的namenode信息也就丢失了。解决办法:
创建目录比如${HADOOP_HOME}/hadoop.tmp,并修改core-site.xml
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/hadoop.tmp</value>
<description>Abase for other temporary directories.</description>
</property>
=======================================
2021-12-30 补充:(以上为2.8版)
2022-01-06
a. 提示现有 master 容器: docker commit masterId bigwork/datas:v1
b. 在 bigwork/datas:v1 重新运行 master:
docker run –privileged=true -itd –name=master -h=master \
-p 50070:50070 \
-v /usr/xxxx:/root/xxx bigwork/datas:v1 /sbin/init
c. ssh 连不上 slave1,2
在 master /etc/hosts 添加
172.17.0.2 master
172.17.0.3 slave1
172.17.0.4 slave2
再次 ssh 成功;
(在 slavex 上相同,没什么用, slave1 有配,slave2 没有配置)
d. master 上执行
hadoop/bin/hdfs namenode -format
hadoop/sbin/start-all.sh
成功
e. 在本地电脑打开 http://192.168.137.100:50070
可以访问
f. 上面补充 slavex 至 master 的免密
g. 参考配置
https://www.cnblogs.com/skyturtle/p/9979413.html (好文)
h. 将 master hadoop 的相关配置文件 拷贝到 slave
scp xxx.xml xx.xml xxx.xml slave1:/usr/local/hadoop/etc/hadoop/
主要修改 hdfs-site.xml 的 replication => 2 (共有两个slave,实际少于这数会报错; 默认为3)
i. 启动 hadoop 在 slave 没有 datanode
修改 hdfs-site.xml (百度上查 hadoop 2.7.6 hdfs-site.xml配置,发现没有以下注释的配置)
<!-- 增加 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node22:50090</value>
</property>
<!-- 注释 -->
<!--
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
-->
删除 hadoop.tmp 目录(是整个目录),以及 logs 下所有文件;
重启:
/bin>./hdfs namenode -format
/sbin>./start-all.sh