最近调试程序,由于各种原因把,不允许开发机器连接Hadoop集群,只能在本机部署了,我使用了Docker和WSL(适用于Linux的Windows子系统)两种方法,经过对比,最终决定用WSL,Docker还不算稳定,动不动就闪退了。

环境

  • Hadoop 3.2.2
  • JDK 1.8.221
  • WSL子系统,我选择的是Ubuntu22.04 LTS

如果没开启WSL子系统,可通过如下命令进行开启:

1
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

JDK 默认算你配好的,如果只使用Hadoop,那么JDK11也是阔以滴,但我还需要用Hive,所以只能用JDK1.8了。

部署Hadoop

下载Hadoop安装包

在WSL终端中(不是PowerShell),执行如下命令:

1
wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.2/hadoop-3.3.2.tar.gz

如果提示证书有问题,可以添加--no-check-certificate参数跳过验证。

解压缩

先创建一个文件夹,方便管理

1
mkdir ~/hadoop

解压到该文件

1
tar -xvzf hadoop-3.3.2.tar.gz -C ~/hadoop

配置SSH免密

先执行如下命令尝试使用ssh连接

1
ssh localhost

如果提示端口不同,那说明没启动ssh,为了避免个别发行版没装ssh,先安装一发

1
sudo apt install ssh 

然后启动ssh

1
sudo apt-get install ssh

配置免密

1
2
3
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys

配置Hadoop

配置环境变量

1
2
3
4
5
# 我使用的是zsh,所以我修改zshrc,
vim ~/.zshrc

# 如果没装zsh,执行如下
vim ~/.bashrc

添加以下环境变量:

1
2
3
4
5
# 这个无所谓的,你配置JAVA17都可以,hadoop会读取hdoop-env.sh的java_home
export JAVA_HOME=/usr/local/java/jdk1.8.0_221
export HADOOP_HOME=~/hadoop/hadoop-3.3.2
export PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

运行以下命令以获取最新变量:

1
2
source ~/.zshrc
# 或者 source ~/.bashrc

配置hadoop-env.sh

1
vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh

只需要设置JAVA_HOME即可

1
export JAVA_HOME=/usr/local/java/jdk1.8.0_221

配置core-site.xml

1
vim $HADOOP_HOME/etc/hadoop/core-site.xml

添加如下配置:

1
2
3
4
5
6
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>

配置hdfs-site.xml

1
vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml

添加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/charles/hadoop/dfs/nn</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/charles/hadoop/dfs/dn</value>
</property>
</configuration>

创建配置中的路径

1
2
mkdir -p /home/charles/hadoop/dfs/nn
mkdir -p /home/charles/hadoop/dfs/dn

配置mapred-site.xml

1
vim $HADOOP_HOME/etc/hadoop/mapred-site.xml

添加如下内容:

1
2
3
4
5
6
7
8
9
10
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>

配置yarn-site.xml

1
vim $HADOOP_HOME/etc/hadoop/yarn-site.xml

添加如下配置:

1
2
3
4
5
6
7
8
9
10
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>

格式化namenode

运行如下命令:

1
2
cd $HADOOP_HOME
bin/hdfs namenode -format

启动Hadoop服务

启动HDFS

1
2
3
4
5
6
cd $HADOOP_HOME
sbin/start-dfs.sh

Starting namenodes on [localhost]
Starting datanodes
Starting secondary namenodes [charles]

通过jps确认进程

1
2
3
4
5
6
jps

8022 Jps
7820 SecondaryNameNode
7390 NameNode
7583 DataNode

查看namenode页面

可通过打开如下连接来查看

http://localhost:9870/dfshealth.html#tab-overview

启动yarn

1
2
3
4
5
cd $HADOOP_HOME
sbin/start-yarn.sh

Starting resourcemanager
Starting nodemanagers

启动服务后,可以看到 NodeManager 和 ResourceManager 的另外两个进程。

通过页面来查看

http://localhost:8088/cluster

建议

通勤的话建议把服务关了吧,挺费电的。

1
2
3
4
# 关闭所有服务
sbin/stop-all.sh
# 启动所有服务
sbin/start-all.sh