Written By Landasika
拉取sequenceiq/hadoop-docker
镜像
$ docker pull sequenceiq/hadoop-docker
并在后台运行容器,命名为myhadoop0,映射常用端口,并执行初始化命令
$ docker run -d --name myhadoop0 -p 50070:50070 -p 9000:9000 -p 8088:8088 -p 8040:8040 -p 8042:8042 -p 49707:49707 -p 50010:50010 -p 50075:50075 -p 50090:50090 sequenceiq/hadoop-docker /etc/bootstrap.sh -bash
进入容器
$ docker exec -it myhadoop0 bash
测试MapReduce样例程序
# /usr/local/hadoop-2.7.0/bin/hadoop jar /usr/local/hadoop-2.7.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.0.jar grep input output 'dfs[a-z.]+'
在浏览器打开本机localhost:50070
出现Hadoop的Overview页面,即部署成功Hadoop环境
错误导致原因
1缺少权限
2没有运行终端
注:–privileged 加权限
-it 指定一个伪终端
docker run --privileged -it -d --name.........(加权限和指定一个伪终端)
docker pull ubuntu:18.04
由于我的虚拟机还有web服务功能,所以端口映射没有用80
拉起镜像
docker run --privileged -it -d --name ubuntu01 -p 801:80 ubuntu:18.04
装了docker里的ubuntu,同样我们也要进行一些配置
docker exec -it XXX(容器ID) /bin/bash
sudo cp /etc/apt/sources.list /etc/apt/sources_copy.list
这里一般来说可能会有没有装vim的情况
apt-get update
apt-get install vim
echo > /etc/apt/sources.list
sudo vim /etc/apt/sources.list
把里面内容都删了,更换为下面的内容
这里建议更新为清华源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
然后更新源
apt-get update
由于多个节点之间需要通过SSH进行通信,所以需要安装ssh
apt-get install openssh-server
安装好之后,运行ssh
/etc/init.d/ssh start或者 service ssh start
确认下是否安装运行正常
ps -e|grep ssh
将启动命令写入bashrc文件,这样就可以每次打开镜像自动开启ssh服务。
vim ~/.bashrc
在最后一行加上
/etc/init.d/ssh start
ssh-keygen -t rsa #一直回车
cd /root/.ssh/
cat id_rsa.pub >> authorized_keys
然后修改/etc/ssh/sshd_config文件,把图中两个箭头所指的地方注释去掉
vim /etc/ssh/sshd_config
重启ssh
service ssh restart
设置ssh密码
passwd
apt-get install default-jdk
配置java环境变量(打开~/.bashrc文件,加入以下内容)
export JAVA_HOME=jdk路径#(可以用 update-alternatives --config java)这条命令查找,注意得出的路径把最后的/bin/java去掉)
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=.:${JAVA_HOME}/bin:$PATH
source ~/.bashrc
apt-get install net-tools
这里保存一下镜像,避免一会配置出问题
docker ps
docker commit [容器id] [新镜像名] #这里假定新新镜像名为ubuntu/jdkandssh
docker images
接下来的步骤是在虚拟机操作
到hadoop镜像站下载hadoop
打开下载到的文件夹,把文件移动到home/用户名/build文件中
这两步是在宿主机运行的
首先创建build目录
cd /root
mkdir build
cd build
这里使用清华源的镜像
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.10.1/hadoop-2.10.1.tar.gz
tar -zxvf hadoop-2.10.1.tar.gz -C /usr/local
hadoop配置java路径(用绝对路径,不出错)
cd /usr/local/hadoop-2.10.1
vim etc/hadoop/hadoop-env.sh
进入/usr/local/hadoop-2.10.1/etc/hadoop目录,涉及的配置文件有:core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml、workers
cd /usr/local/hadoop-2.10.1/etc/hadoop
<configuration>
<property>
<name>hadoop.tmp.dirname>
<value>file:/usr/local/hadoop/tmpvalue>
<description>Abase for other temporary directories.description>
property>
<property>
<name>fs.defaultFSname>
<value>hdfs://master:9000value>
property>
configuration>
<configuration>
<property>
<name>dfs.namenode.name.dirname>
<value>file:/usr/local/hadoop-x.x.x/namenode_dirvalue>
property>
<property>
<name>dfs.datanode.data.dirname>
<value>file:/usr/local/hadoop-x.x.x/datanode_dirvalue>
property>
<property>
<name>dfs.replicationname>
<value>3value>
property>
configuration>
复制mapred-site.xml.template,再修改文件名
cp mapred-site.xml.template mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
configuration>
<configuration>
<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue>
property>
<property>
<name>yarn.resourcemanager.hostnamename>
<value>mastervalue>
property>
configuration>
docker run --privileged -it -d -h master --name master ubuntu/sshandjdkandhadoop
docker run --privileged -it -d -h slave01 --name salve01 ubuntu/sshandjdkandhadoop
docker run --privileged -it -d -h slave02 --name slave02 ubuntu/sshandjdkandhadoop
查看3个容器的ip地址,分别加入到彼此的etc/hosts文件中
不然下一步报错
然后将节点加入slave文件中
cd /usr/local/hadoop-2.10.1
vim etc/hadoop/slaves
#将localhost替换成节点名
slave01
slave02
为了方便,设置节点之间免密登录(基于密钥的验证)
实际上就是把公钥加入到节点之间,并授权即可(这部分可以了解一下私钥和公钥的概念的RSA加密算法)
因为在前面已经将公钥生成为authorized_key了,所以直接将这个公钥传到各个slave节点上
彼此加上对方两个主机的ssh
cd /root/.ssh/
scp authorized_keys root@slave01:~/.ssh/
验证是否成功
cd /usr/local/hadoop0x.x.x
./bin/hdfs namenode -format
./sbin/start-all.sh
并使用jps查看结果(由于我已经格式化过了,就不再格式化了)
直接输入
hadoop version
会报错:
解决
配置环境变量,根目录下的 .bashrc 文件
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
再次执行,将所有更改应用到当前运行的系统
source ~/.bashrc
l
cd /usr/local/hadoop0x.x.x
./bin/hdfs namenode -format
./sbin/start-all.sh
并使用jps查看结果(由于我已经格式化过了,就不再格式化了)
[外链图片转存中...(img-gWaJB5az-1662569474018)]
### 验证
直接输入
```shell
hadoop version
会报错:
[外链图片转存中…(img-dRrW3tT7-1662569474018)]
解决
配置环境变量,根目录下的 .bashrc 文件
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
再次执行,将所有更改应用到当前运行的系统
source ~/.bashrc
[外链图片转存中…(img-FxOObZgb-1662569474019)]