前言
需要搭建Docker虚拟机上的hadoop集群
踩过的坑都在这里了
基本上参照这篇博客 这里
自己搭建的时候遇到很多问题,踩过的坑都在这里了
一、启动Docker容器
首先pull一个Ubuntu镜像
docker pull ubuntu
注意这边直接pull ubuntu的话会直接下载最新版本,可以通过ubuntu:18.04来下载指定版本
接着通过镜像运行一个容器
docker run -dit --name=main -p 9870:9870 -p 8088:8088 ubuntu
注意这里要使用-p指令开放9870和8088两个端口,之后会用到
使用docker exec命令进入容器
docker exec -it main /bin/bash
二、安装jdk
在Ubuntu
中用压缩包安装jdk较为麻烦,需要配置系统环境变量
和配置文件
,一步出错可能无法使用。所以本文在Ubuntu
中使用命令安装jdk。其他方法安装jdk也可。
打开终端
执行以下命令:
sudo apt-get install openjdk-8-jdk

如果报错bash: sudo: command not found的话,先执行下面两个命令
apt-get update # 更新apt-get
apt-get install sudo # 安装sudo
安装完成后查看Java是否安装成功
java -version
如下图所示则安装成功:

如果需要卸载jdk则使用以下命令:
sudo apt remove openjdk*
三、配置环境文件
打开环境文件
sudo vim ~/.bashrc
如果没有vim编辑器则需要下载:
sudo apt-get install vim
或使用gedit编辑器也行
加入语句
文件顶部加入以下语句并保存:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 #目录要换成自己jdk所在目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

使环境生效
source ~/.bashrc
使用 echo $JAVA_HOME
显示JAVA_HOME
即为成功

四、安装ssh免密码登录
sudo apt-get install ssh openssh-server
安装完毕后先cd到~
cd ~
再创建.ssh文件夹
mkdir .ssh
再cd到.ssh中
cd .ssh
生成密钥
ssh-keygen -t rsa
按三次回车

将秘钥加入到授权中
cat id_rsa.pub >> authorized_keys
再验证ssh localhost 如下图,不用密码登录即为成功
如果发生以下报错,那就看这个博客的解决方案 这里
五、安装Hadoop
1)安装hadoop并解压
先cd到/usr/local
cd /usr/local
镜像下载链接https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.1/
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz
然后解压后进入文件夹
tar -zxvf hadoop-3.3.1.tar.gz
cd hadoop-3.3.1
2)配置相关文件
core-site.xml
打开/etc/hadoop中的core-site.xml 文件,加入如下语句并保存
注意在在
configuration
标签中加入
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop-3.3.1/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>

hdfs-site.xml
和上面一样,打开/etc中的hdfs-site.xml 文件,加入如下语句并保存
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop-3.3.1/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop-3.3.1/tmp/dfs/data</value>
</property>
hadoop-env.sh
查看你的 jdk安装目录
echo $JAVA_HOME
打开 hadoop-env.sh 文件配置如下并保存:
export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64" # 根据自己的路径写
六、运行Hadoop
1)首先初始化HDFS系统
在hadop3.3.0目录下使用如下命令进行初始化:
bin/hdfs namenode -format
成功后如下图:
2)开启NameNode和DataNode守护进程
继续运行如下命令开启Hadoop:
sbin/start-dfs.sh
如果出现以下报错,请查看这个博客 这里
3)查看jps进程信息
jps
如下图即为成功:
关闭hadoop使用命令 sbin/stop-dfs.sh
打开浏览器输入http://localhost:9870,成功打开

4)创建Hadoop用户组
使用/bin/bash作为shell:
sudo useradd -m hadoop -s /bin/bash
设置密码:
sudo passwd hadoop
添加hadoop至管理员权限:
sudo adduser hadoop sudo

七、配置yarn
搭建前请保证已经搭建好了HDFS的环境,即配置好所上内容。
1)终端输入hostname查看主机名
hostname
2)打开/etc/hadoop下yarn-site.xml,在configuration
标签中加入如下内容,注意主机名要修改为自己的
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--Resource Manager-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>你的主机名</value><!--你的hostname的主机名-->
</property>
3)打开mapred-site.xml 文件,配置如下(在configuration标签中间加入)
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
4)在主文件夹输入命令启动yarn
sbin/start-yarn.sh
jps查看进程多了两个东西

在浏览器输入http://localhost:8088

至此,hadoop全部配置完成
创建镜像
为了后期使用方便,我们可以将容器保存为镜像
docker commit main hadoop_base
这样我们想要启动一个新的容器时只需要在镜像上启动就行了
docker run -dit -p 9870:9870 -p 8088:8088 main hadoop_base
参考链接:
https://blog.youkuaiyun.com/weixin_58707437/article/details/127931069