WSL 配置 Hadoop 单机伪分布式安装
安装 Ubuntu 22.04
首先根据微软官方指南安装 WSL,然后使用如下指令安装 Ubuntu 22.04:
wsl --install --distribution Ubuntu-22.04
安装 ssh 和 rsync:
sudo apt-get install ssh rsync
安装 Java 8
sudo mkdir /usr/java
将二进制文件解压至安装目录:
sudo tar -zxf jdk-8u401-linux-x64.tar.gz -C /usr/java/
安装 Hadoop 3.3.6
前往官网或本站镜像下载 Hadoop 3.3.6,创建安装目录:
mkdir ~/hadoop_installs
将下载的压缩包移动到上述目录后解压:
tar -zxvf hadoop-3.3.6.tar.gz
配置环境变量
编辑 .bashrc
文件:
nano ~/.bashrc
在文件末尾添加以下内容:
# Set up Hadoop and Java
export JAVA_HOME=/usr/java/jdk1.8.0_401
export JRE_HOME=${JAVA_HOME}/jre
export HADOOP_HOME=$HOME/hadoop_installs/hadoop-3.3.6
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export CLASSPATH=$JAVA_HOME/lib:${JRE_HOME}/lib
使上述修改即刻生效:
source ~/.bashrc
向系统注册 JDK:
sudo update-alternatives --install /usr/bin/java java /usr/java/jdk1.8.0_401/bin/java 300
查看 java 版本,预期结果如下:
jjl9807@ubuntu:~$ java -version
java version "1.8.0_401"
Java(TM) SE Runtime Environment (build 1.8.0_401-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.401-b10, mixed mode)
配置 SSH 密钥访问
创建密钥:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
添加密钥:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
测试连接:
ssh localhost
配置 Hadoop
Hadoop 的配置文件存放在安装目录下的 etc/hadoop
目录中:
cd $HADOOP_HOME/etc/hadoop
修改 hadoop-env.sh 文件中以下内容:
export JAVA_HOME=/usr/java/jdk1.8.0_401
修改 core-site.xml,添加以下内容:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.work.dir</name>
<value>/home/jjl9807/hadoop_tmp</value>
</property>
</configuration>
⚠️ 注意: 请将上面的 /home/jjl9807/hadoop_tmp
调整为你自己设定的 Hadoop 工作路径!
修改 hdfs-site.xml,添加以下内容:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
修改 mapred-site.xml,添加以下内容:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>
$HADOOP_HOME/etc/hadoop,
$HADOOP_HOME/share/hadoop/common/*,
$HADOOP_HOME/share/hadoop/common/lib/*,
$HADOOP_HOME/share/hadoop/hdfs/*,
$HADOOP_HOME/share/hadoop/hdfs/lib/*,
$HADOOP_HOME/share/hadoop/mapreduce/*,
$HADOOP_HOME/share/hadoop/mapreduce/lib/*,
$HADOOP_HOME/share/hadoop/yarn/*,
$HADOOP_HOME/share/hadoop/yarn/lib*
</value>
</property>
</configuration>
修改 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>
启动 Hadoop
格式化 NameNode:
hdfs namenode -format
⚠注意: 切勿多次格式化!如果需要重新格式化,必须要删除后重新创建前面指定的工作目录。
启动 NameNode daemon 和 DataNode daemon:
start-dfs.sh
查看集群状态,输出结果应与如下内容相近:
jjl807@ubuntu:~/$ jps
200918 DataNode
201142 SecondaryNameNode
200746 NameNode
201342 Jps
现在可以通过 http://localhost:9870 访问 HDFS NameNode 的 Web 接口。
启动 ResourceManage daemon 和 NodeManage daemon:
start-yarn.sh
再次查看集群状态,输出结果应与如下内容相近:
jjl807@ubuntu:~/$ jps
200918 DataNode
201142 SecondaryNameNode
226890 Jps
200746 NameNode
226334 ResourceManager
226493 NodeManager
现在可以通过 http://localhost:8088 访问 Resource Manager 的 Web 接口。
运行示例
创建执行 MapReduce 作业的 HDFS 目录:
hdfs dfs -mkdir /user
hdfs dfs -mkdir /user/jjl9807
hdfs dfs -mkdir test-in
上面第三条命令在当前用户工作目录下创建,省略了 /user/<username>
,直接使用了相对路径。
在 ./test
文件夹中创建以下两个文件:
file1.txt: hello hadoop hello world
file2.txt: goodbye hadoop
拷贝输入文件至分布式文件系统:
hdfs dfs -put test/*.txt test-in
运行 Hadoop 自带的 MapReduce 示例:
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount test-in test-out
如果 Hadoop 正常运行,部分输出日志应与如下内容相近:
2024-04-18 19:14:03,769 INFO mapreduce.Job: Running job: job_1713438748713_0002
2024-04-18 19:14:08,819 INFO mapreduce.Job: Job job_1713438748713_0002 running in uber mode : false
2024-04-18 19:14:08,820 INFO mapreduce.Job: map 0% reduce 0%
2024-04-18 19:14:12,855 INFO mapreduce.Job: map 100% reduce 0%
2024-04-18 19:14:15,867 INFO mapreduce.Job: map 100% reduce 100%
2024-04-18 19:14:16,877 INFO mapreduce.Job: Job job_1713438748713_0002 completed successfully
2024-04-18 19:14:16,927 INFO mapreduce.Job: Counters: 54
将 HDFS 的输出文件拷贝至本地文件系统:
hdfs dfs -get test-out output
查看输出结果,预期内容如下:
jjl9807@ubuntu:~$ cat output/*
goodbye 1
hadoop 2
hello 2
world 1