Ubuntu配置hadoop(基于Docker)

大数据挖掘需要搭建Linux虚拟机上的hadoop集群

踩过的坑都在这里了

前言

在大数据挖掘和Linux这两门课都需要搭建Linux环境,老师的推荐都是VMware等虚拟机,我觉得用Docker容器更加方便一些,于是就找教程用Docker创建Ubuntu容器,但是踩了很多坑,还好都解决了,现在记录一下。

一、启动Docker容器

首先pull一个Ubuntu镜像

1
docker pull ubuntu

注意这边直接pull ubuntu的话会直接下载最新版本,可以通过ubuntu:18.04来下载指定版本

接着通过镜像运行一个容器

1
docker run -dit --name=main -p 9870:9870 -p 8088:8088 ubuntu

注意这里要使用-p指令开放9870和8088两个端口,之后会用到

使用docker exec命令进入容器

1
docker exec -it main /bin/bash
image-20230907221648062

二、安装jdk

Ubuntu中用压缩包安装jdk较为麻烦,需要配置系统环境变量配置文件,一步出错可能无法使用。所以本文在Ubuntu中使用命令安装jdk。其他方法安装jdk也可。

打开终端

执行以下命令:

1
sudo apt-get install openjdk-8-jdk

image-20230907201605154

如果报错bash: sudo: command not found的话,先执行下面两个命令

1
2
apt-get update # 更新apt-get
apt-get install sudo # 安装sudo

安装完成后查看Java是否安装成功

1
java -version

如下图所示则安装成功:

image-20230907201808967

如果需要卸载jdk则使用以下命令:

1
sudo apt remove openjdk*

三、配置环境文件

打开环境文件

1
sudo vim ~/.bashrc

如果没有vim编辑器则需要下载:

1
sudo apt-get install vim

或使用gedit编辑器也行

加入语句

文件顶部加入以下语句并保存:

1
2
3
4
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

image-20230907224228576

使环境生效

1
source ~/.bashrc

使用 echo $JAVA_HOME 显示JAVA_HOME即为成功

image-20230907224430938

四、安装ssh免密码登录

1
sudo apt-get install ssh openssh-server

安装完毕后先cd到~

1
cd ~

再创建.ssh文件夹

1
mkdir .ssh

再cd到.ssh中

1
cd .ssh

生成密钥

1
ssh-keygen -t rsa 

按三次回车

image-20230907230349029

将秘钥加入到授权中

1
cat id_rsa.pub >> authorized_keys

再验证ssh localhost 如下图,不用密码登录即为成功

image-20230907230905985

如果发生以下报错,那就看这个博客的解决方案 这里 image-20230907231020690

五、安装Hadoop

1)安装hadoop并解压

先cd到/usr/local

1
cd /usr/local

镜像下载链接https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.1/

1
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz

然后解压后进入文件夹

1
2
tar -zxvf hadoop-3.3.1.tar.gz
cd hadoop-3.3.1

2)配置相关文件

core-site.xml

打开/etc/hadoop中的core-site.xml 文件,加入如下语句并保存

注意在在configuration标签中加入

1
2
3
4
5
6
7
8
9
<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>

image-20230907232907417

hdfs-site.xml

和上面一样,打开/etc中的hdfs-site.xml 文件,加入如下语句并保存

1
2
3
4
5
6
7
8
9
10
11
12
<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安装目录

1
echo $JAVA_HOME

打开 hadoop-env.sh 文件配置如下并保存:

1
export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"  # 根据自己的路径写

六、运行Hadoop

1)首先初始化HDFS系统

在hadop3.3.0目录下使用如下命令进行初始化:

1
bin/hdfs namenode -format

成功后如下图:

image-20230908100159505

2)开启NameNode和DataNode守护进程

继续运行如下命令开启Hadoop:

1
sbin/start-dfs.sh

成功后如下图:

image-20230908100504572

如果出现以下报错,请查看这个博客 这里

image-20230908100616153

3)查看jps进程信息

1
jps

如下图即为成功: image-20230908101222750

关闭hadoop使用命令 sbin/stop-dfs.sh

打开浏览器输入http://localhost:9870,成功打开

image-20230908101314185

4)创建Hadoop用户组

使用/bin/bash作为shell:

1
sudo useradd -m hadoop -s /bin/bash 

设置密码:

1
sudo passwd hadoop

添加hadoop至管理员权限:

1
sudo adduser hadoop sudo

image-20230908102449452

七、配置yarn

搭建前请保证已经搭建好了HDFS的环境,即配置好所上内容。

1)终端输入hostname查看主机名

1
hostname

2)打开/etc/hadoop下yarn-site.xml,在configuration标签中加入如下内容,注意主机名要修改为自己的

1
2
3
4
5
6
7
8
9
<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标签中间加入)

1
2
3
4
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

4)在主文件夹输入命令启动yarn

1
sbin/start-yarn.sh

jps查看进程多了两个东西

image-20230908103109094

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

image-20230908103241262

至此,hadoop全部配置完成

创建镜像

为了后期使用方便,我们可以将容器保存为镜像

1
docker commit main hadoop_base

这样我们想要启动一个新的容器时只需要在镜像上启动就行了

1
docker run -dit -p 9870:9870 -p 8088:8088 main hadoop_base

参考链接:

https://blog.csdn.net/weixin_58707437/article/details/127931069