最近调试程序,由于各种原因把,不允许开发机器连接Hadoop集群,只能在本机部署了,我使用了Docker和WSL(适用于Linux的Windows子系统)两种方法,经过对比,最终决定用WSL,Docker还不算稳定,动不动就闪退了。
一、环境
- Hadoop 3.2.2
- JDK 1.8.221
- WSL子系统,我选择的是Ubuntu22.04 LTS
如果没开启WSL子系统,可通过如下命令进行开启:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
JDK 默认算你配好的,如果只使用Hadoop,那么JDK11也是阔以滴,但我还需要用Hive,所以只能用JDK1.8了。
二、部署Hadoop
1. 下载Hadoop安装包
在WSL终端中(不是PowerShell),执行如下命令:
wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.2/hadoop-3.3.2.tar.gz
如果提示证书有问题,可以添加--no-check-certificate
参数跳过验证。
2. 解压缩
先创建一个文件夹,方便管理
mkdir ~/hadoop
解压到该文件
tar -xvzf hadoop-3.3.2.tar.gz -C ~/hadoop
3. 配置SSH免密
先执行如下命令尝试使用ssh连接
ssh localhost
如果提示端口不同,那说明没启动ssh,为了避免个别发行版没装ssh,先安装一发
sudo apt install ssh
然后启动ssh
sudo apt-get install ssh
配置免密
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
4. 配置Hadoop
4.1 配置环境变量
# 我使用的是zsh,所以我修改zshrc,
vim ~/.zshrc
# 如果没装zsh,执行如下
vim ~/.bashrc
添加以下环境变量:
# 这个无所谓的,你配置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
运行以下命令以获取最新变量:
source ~/.zshrc
# 或者 source ~/.bashrc
4.2 配置hadoop-env.sh
vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
只需要设置JAVA_HOME即可
export JAVA_HOME=/usr/local/java/jdk1.8.0_221
4.3 配置core-site.xml
vim $HADOOP_HOME/etc/hadoop/core-site.xml
添加如下配置:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
4.4 配置hdfs-site.xml
vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml
添加如下内容:
<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>
创建配置中的路径
mkdir -p /home/charles/hadoop/dfs/nn
mkdir -p /home/charles/hadoop/dfs/dn
4.5 配置mapred-site.xml
vim $HADOOP_HOME/etc/hadoop/mapred-site.xml
添加如下内容:
<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>
4.6 配置yarn-site.xml
vim $HADOOP_HOME/etc/hadoop/yarn-site.xml
添加如下配置:
<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>
5. 格式化namenode
运行如下命令:
cd $HADOOP_HOME
bin/hdfs namenode -format
三、启动Hadoop服务
1. 启动HDFS
cd $HADOOP_HOME
sbin/start-dfs.sh
Starting namenodes on [localhost]
Starting datanodes
Starting secondary namenodes [charles]
通过jps确认进程
jps
8022 Jps
7820 SecondaryNameNode
7390 NameNode
7583 DataNode
查看namenode页面
可通过打开如下连接来查看
2. 启动yarn
cd $HADOOP_HOME
sbin/start-yarn.sh
Starting resourcemanager
Starting nodemanagers
启动服务后,可以看到 NodeManager 和 ResourceManager 的另外两个进程。
通过页面来查看
http://localhost:8088/cluster
四、建议
通勤的话建议把服务关了吧,挺费电的。
# 关闭所有服务
sbin/stop-all.sh
# 启动所有服务
sbin/start-all.sh