尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Windows 10/11 通过 WSL 2 安装 Hadoop 3.1.3 单机环境完整指南

Windows 10/11 通过 WSL 2 安装 Hadoop 3.1.3 单机环境完整指南 1. 项目概述为什么要在Windows上折腾Hadoop如果你和我一样主要工作环境是Windows但又需要学习、测试或者开发基于Hadoop的大数据应用那么直接在Windows上安装一个单机版的Hadoop就成了一个绕不开的“必修课”。很多人一听到Hadoop第一反应就是Linux集群觉得在Windows上搞这个纯属自找麻烦。但说实话对于绝大多数开发者、学生或者数据分析师来说我们需要的并不是一个生产级别的、多节点的高可用集群而是一个能在本机快速搭建、用于代码调试、功能验证和学习原理的沙箱环境。Hadoop 3.1.3是一个比较经典的稳定版本虽然现在有更新的3.2.x、3.3.x但3.1.3的文档和社区资源非常丰富踩坑时更容易找到解决方案对于入门和日常开发测试来说完全够用。在Windows上安装它核心目的就是模拟一个完整的Hadoop运行环境让你能够运行MapReduce程序、操作HDFS文件系统甚至跑一跑Hive、Spark on YARN等上层应用而无需额外准备Linux服务器或虚拟机极大提升了学习和开发前期的效率。当然Windows并非Hadoop的原生支持平台所以整个过程会涉及到一些“非标准”操作比如需要借助一些工具来提供Linux环境下的基础服务。别担心我会把每一步的原理、可能遇到的坑以及我的解决经验都详细拆解出来。只要你跟着步骤走保持耐心在Windows 10或Windows 11上成功跑起Hadoop 3.1.3是完全可以实现的。整个过程我们追求的不是极致的性能而是环境的可用性、稳定性和可复现性。2. 核心思路与前置准备模拟Linux环境是关键在Linux上安装Hadoop相对直接因为其底层依赖如Shell环境、文件系统权限、原生库都是现成的。而在Windows上我们需要一个“桥梁”来满足这些依赖。主流方案有两种使用Cygwin或使用Windows Subsystem for Linux (WSL)。我这里强烈推荐并详细讲解基于WSL的方案因为它更接近原生Linux性能损耗小且与Windows系统集成度更高管理起来更方便。2.1 方案选型为什么是WSL而不是CygwinCygwin是一个在Windows上模拟POSIX兼容环境的大型工具集它通过一个兼容层cygwin1.dll将Linux API调用翻译成Windows API。早期很多在Windows上运行Hadoop的教程都基于Cygwin。但它有几个明显缺点性能开销兼容层带来了额外的性能损耗。路径问题Cygwin的路径如/cygdrive/c/Users与Windows路径C:\Users需要转换在配置Hadoop时容易混淆。环境复杂安装包庞大需要手动选择很多开发包对新手不友好。WSLWindows Subsystem for Linux则是微软官方提供的、在Windows内核之上运行一个完整的Linux兼容层。WSL 2更是基于轻量级虚拟机技术提供了完整的Linux内核。它的优势在于近乎原生性能文件I/O、网络等性能接近原生Linux。无缝交互可以直接在Windows资源管理器中访问Linux文件系统\\wsl$也可以在Linux中通过/mnt/c访问Windows盘符路径处理清晰。系统集成好通过wsl命令在Windows终端如Windows Terminal中直接启动Linux Shell体验流畅。因此我们的核心思路就是在Windows上启用WSL 2并安装一个Linux发行版如Ubuntu然后在这个Linux子系统中安装和配置Hadoop。这样Hadoop实际上是运行在一个“真正的”Linux环境中只是这个环境被Windows托管了。2.2 准备工作清单在开始安装Hadoop之前我们需要确保Windows环境就绪。请按顺序完成以下检查与安装操作系统版本确保你的Windows 10版本为2004及以上内部版本19041及以上或者Windows 11。这是支持WSL 2的最低要求。可以在“设置”-“系统”-“关于”中查看。启用WSL功能以管理员身份打开Windows PowerShell或命令提示符运行以下命令。这会启用“适用于Linux的Windows子系统”和“虚拟机平台”两个可选功能。dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart执行后务必重启电脑使更改生效。设置WSL 2为默认版本重启后再次以管理员身份打开PowerShell运行wsl --set-default-version 2如果提示WSL 2需要内核更新请根据提示链接下载并安装“WSL2 Linux内核更新包”。安装Linux发行版打开Microsoft Store搜索“Ubuntu”。建议选择最新的LTS版本例如“Ubuntu 22.04 LTS”。点击获取并安装。安装完成后从开始菜单启动Ubuntu它会完成初始设置要求你创建用户名和密码。这个用户名和密码很重要后续会频繁使用。验证WSL版本安装好Ubuntu后在Windows PowerShell中运行wsl -l -v你应该能看到安装的发行版如Ubuntu-22.04及其版本VERSION列应为2。注意如果你的网络环境访问Microsoft Store有困难也可以手动下载Linux发行版的Appx包进行离线安装。但通过Store安装是最简单的方式。至此你的Windows已经拥有了一个完整的Linux运行环境。接下来所有的操作除非特别说明都将在WSL中的Ubuntu终端里进行。3. 详细安装与配置步骤实录现在我们进入WSL的Ubuntu环境开始Hadoop的安装之旅。打开Windows Terminal推荐或PowerShell输入wsl或ubuntu命令即可进入Ubuntu命令行。3.1 基础环境配置用户、SSH与JavaHadoop分布式运行需要SSH免密登录即使单机模式某些脚本也会检查SSH服务。同时Hadoop是Java编写的所以JDK是必须的。3.1.1 更新系统与创建Hadoop专用用户虽然可以使用安装时创建的个人用户但为了环境隔离和避免权限问题我习惯为Hadoop创建一个专用用户。# 首先更新软件包列表 sudo apt update sudo apt upgrade -y # 创建名为 hadoop 的用户并设置密码按提示输入 sudo adduser hadoop系统会提示你设置密码和填写一些信息密码可以简单点如hadoop其他信息可以直接回车跳过。接下来我们需要给这个新用户添加sudo权限方便后续安装软件sudo usermod -aG sudo hadoop然后切换到hadoop用户进行操作su - hadoop输入你刚才设置的密码。你会发现命令行提示符的用户名变成了hadoop。3.1.2 配置SSH免密登录Hadoop的启动脚本如start-dfs.sh,start-yarn.sh需要通过SSH连接到各个节点包括本地来启动守护进程。配置免密登录后这些脚本才能无干预运行。# 1. 安装SSH服务器和客户端 sudo apt install openssh-server openssh-client -y # 2. 生成SSH密钥对。一路回车使用默认位置和不设置密码。 ssh-keygen -t rsa -P -f ~/.ssh/id_rsa # 3. 将公钥追加到授权密钥文件并设置正确的权限 cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys chmod 0600 ~/.ssh/authorized_keys # 4. 测试SSH连接到本机是否不需要密码 ssh localhost第一次SSH连接时会询问是否将主机加入已知主机列表输入yes。如果配置成功你应该能直接登录到本机而不需要输入密码。执行exit命令退出SSH会话回到原来的终端。实操心得如果ssh localhost仍然要求输入密码99%的原因是~/.ssh目录或authorized_keys文件的权限不对。确保.ssh目录权限为700 (chmod 700 ~/.ssh)authorized_keys文件权限为600。3.1.3 安装Java (JDK 8)Hadoop 3.1.3官方兼容JDK 8。虽然更高版本也可能工作但为了最大程度避免兼容性问题我们安装OpenJDK 8。sudo apt install openjdk-8-jdk -y安装完成后验证安装java -version你应该看到类似openjdk version 1.8.0_392的输出。接下来需要配置JAVA_HOME环境变量。首先找到JDK的安装路径update-alternatives --config java记下路径例如/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java。那么JAVA_HOME就是其上级目录的上级目录/usr/lib/jvm/java-8-openjdk-amd64。编辑hadoop用户的bash配置文件nano ~/.bashrc在文件末尾添加以下行请根据你实际查到的路径修改export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 export PATH$PATH:$JAVA_HOME/bin保存退出CtrlX然后按Y再回车。让配置立即生效source ~/.bashrc验证JAVA_HOMEecho $JAVA_HOME应该正确输出你设置的路径。3.2 Hadoop 3.1.3 安装与核心配置3.2.1 下载与解压我们切换到hadoop用户的家目录进行操作。cd ~使用wget从Apache镜像下载Hadoop 3.1.3二进制包。如果下载速度慢可以先用浏览器从 Apache Hadoop官网 找到下载链接然后在WSL里用wget加链接下载。wget https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz下载完成后解压并移动到合适的目录。我习惯放在/usr/local下但为了权限方便我们先解压到当前用户目录然后建立软链接或直接配置环境变量。tar -xzvf hadoop-3.1.3.tar.gz mv hadoop-3.1.3 ~/hadoop # 重命名并移动到用户目录下方便管理现在Hadoop的主目录就是/home/hadoop/hadoop。3.2.2 配置环境变量同样编辑~/.bashrc文件nano ~/.bashrc在文件末尾添加Hadoop相关环境变量export HADOOP_HOME/home/hadoop/hadoop export HADOOP_INSTALL$HADOOP_HOME export HADOOP_MAPRED_HOME$HADOOP_HOME export HADOOP_COMMON_HOME$HADOOP_HOME export HADOOP_HDFS_HOME$HADOOP_HOME export YARN_HOME$HADOOP_HOME export HADOOP_COMMON_LIB_NATIVE_DIR$HADOOP_HOME/lib/native export PATH$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin保存退出并使其生效source ~/.bashrc验证输入hadoop version应该能看到Hadoop 3.1.3的版本信息。3.2.3 修改Hadoop配置文件最关键的一步Hadoop的配置文件位于$HADOOP_HOME/etc/hadoop/目录下。我们需要修改以下几个核心文件。请务必仔细核对每项配置。1.hadoop-env.sh配置Hadoop运行环境。cd $HADOOP_HOME/etc/hadoop nano hadoop-env.sh找到export JAVA_HOME这一行取消注释并设置为我们之前找到的JDK路径export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64还可以在同一文件中设置Hadoop的日志目录等但默认即可。2.core-site.xmlHadoop核心配置定义文件系统默认的URI和临时目录。nano core-site.xml在configuration标签内添加configuration property namefs.defaultFS/name valuehdfs://localhost:9000/value descriptionHDFS的默认访问地址和端口/description /property property namehadoop.tmp.dir/name value/home/hadoop/hadoopdata/tmp/value descriptionHadoop临时文件存储目录非常重要NameNode和DataNode的数据目录会基于此生成。/description /property /configuration注意hadoop.tmp.dir的路径需要提前创建并且hadoop用户要有读写权限。我们稍后创建。3.hdfs-site.xmlHDFS相关配置如副本数、数据存储路径。nano hdfs-site.xml在configuration标签内添加。因为是单机模式我们把副本数设为1并明确指定NameNode和DataNode的数据存储目录。configuration property namedfs.replication/name value1/value description数据块副本数量单机模式设为1/description /property property namedfs.namenode.name.dir/name valuefile:///home/hadoop/hadoopdata/dfs/name/value descriptionNameNode元数据存储路径/description /property property namedfs.datanode.data.dir/name valuefile:///home/hadoop/hadoopdata/dfs/data/value descriptionDataNode数据块存储路径/description /property /configuration4.mapred-site.xmlMapReduce框架配置指定使用YARN作为资源调度器。nano mapred-site.xmlconfiguration property namemapreduce.framework.name/name valueyarn/value description指定MapReduce作业运行在YARN框架上/description /property /configuration5.yarn-site.xmlYARN资源管理器配置。nano yarn-site.xmlconfiguration property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value descriptionNodeManager上运行的附属服务MapReduce需要shuffle服务/description /property property nameyarn.nodemanager.aux-services.mapreduce_shuffle.class/name valueorg.apache.hadoop.mapred.ShuffleHandler/value /property property nameyarn.resourcemanager.hostname/name valuelocalhost/value descriptionResourceManager运行的主机名/description /property /configuration3.2.4 创建必要的目录并设置权限根据配置文件中的路径创建所有需要的目录mkdir -p ~/hadoopdata/tmp mkdir -p ~/hadoopdata/dfs/name mkdir -p ~/hadoopdata/dfs/data确保hadoop用户拥有这些目录的所有权chown -R hadoop:hadoop ~/hadoopdata chmod -R 755 ~/hadoopdata4. 启动、验证与基础操作经过漫长的配置终于到了激动人心的启动时刻。4.1 格式化HDFS这是第一次启动前必须且只能执行一次的操作它会初始化NameNode的元数据存储目录。如果后续启动失败需要重新格式化务必先彻底删除~/hadoopdata/dfs/name和~/hadoopdata/dfs/data目录下的所有内容否则可能导致数据不一致。hdfs namenode -format看到类似 “Storage directory /home/hadoop/hadoopdata/dfs/name has been successfully formatted” 的提示说明格式化成功。4.2 启动Hadoop守护进程Hadoop提供了便捷的脚本启动所有服务。我们先启动HDFS。start-dfs.sh这个脚本会启动NameNode、DataNode和SecondaryNameNode。你会看到一些启动日志。用jps命令Java进程查看工具来检查是否启动成功jps你应该能看到至少包含NameNode,DataNode,SecondaryNameNode的进程列表。接下来启动YARNstart-yarn.sh再次运行jps应该会多出ResourceManager和NodeManager进程。4.3 验证服务与Web UI访问Hadoop各个组件都提供了Web管理界面这是验证服务是否正常运行的直观方式。HDFS NameNode UI: 在Windows的浏览器中打开http://localhost:9870。注意Hadoop 3.x 默认NameNode的Web端口从50070改为了9870。如果页面能打开并显示Overview、Datanodes等信息说明HDFS启动成功。YARN ResourceManager UI: 打开http://localhost:8088。这里可以查看集群资源使用情况和提交的作业。重要提示由于Hadoop服务运行在WSL的Linux环境中而浏览器在Windows端localhost能互通是因为WSL 2做了网络桥接。如果无法访问请检查WSL 2的防火墙设置或者尝试在WSL内部用curl http://localhost:9870测试服务是否在监听。4.4 基础HDFS操作体验现在让我们在命令行中体验一下HDFS的基本操作感受一下这个“分布式”文件系统。# 1. 在HDFS上创建一个用户目录类似于Linux的/home hdfs dfs -mkdir -p /user/hadoop # 2. 从本地文件系统上传一个文件到HDFS。先创建一个测试文件。 echo Hello, Hadoop on Windows with WSL! ~/test.txt hdfs dfs -put ~/test.txt /user/hadoop/ # 3. 查看HDFS上的文件列表 hdfs dfs -ls /user/hadoop # 4. 查看HDFS上文件的内容 hdfs dfs -cat /user/hadoop/test.txt # 5. 从HDFS下载文件到本地 hdfs dfs -get /user/hadoop/test.txt ~/test_download.txt cat ~/test_download.txt如果这些命令都能成功执行那么恭喜你一个单机版的Hadoop已经在你的Windows上完美运行起来了4.5 运行一个示例MapReduce作业Hadoop自带了一些示例JAR包我们可以运行经典的WordCount程序来测试整个MapReduce on YARN的流程是否通畅。# 1. 在HDFS上创建输入目录并上传一些文本文件作为输入。 # 我们可以用Hadoop的配置文件作为输入源。 hdfs dfs -mkdir /user/hadoop/input hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml /user/hadoop/input/ # 2. 运行WordCount示例程序。 # hadoop-mapreduce-examples-3.1.3.jar 包含了各种示例。 # 指定输入目录和输出目录输出目录必须不存在。 hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /user/hadoop/input /user/hadoop/output # 3. 观察YARN Web UI (http://localhost:8088)你会看到一个新的应用被提交和运行。 # 等待作业完成。完成后查看输出结果。 hdfs dfs -cat /user/hadoop/output/part-r-00000 | head -20你会看到各个单词及其出现的次数。至此你的Hadoop环境已经具备了完整的HDFS存储和MapReduce计算能力。5. 常见问题与故障排查实录在WindowsWSL环境下安装Hadoop虽然步骤清晰但依然可能遇到一些特有的问题。下面是我在多次安装中总结的“坑”和解决方案。5.1 WSL相关网络与权限问题问题1Hadoop Web UI (9870, 8088) 在Windows浏览器中无法访问。排查首先在WSL内部用curl http://localhost:9870测试。如果WSL内能访问说明服务正常是Windows到WSL的网络问题。解决获取WSL 2的IP地址在WSL中运行ip addr show eth0 | grep inet。你会看到一个类似172.x.x.x的IP。在Windows浏览器中用这个IP地址替换localhost访问如http://172.x.x.x:9870。更一劳永逸的方法在WSL中编辑Hadoop配置文件将localhost绑定到0.0.0.0或者直接使用WSL的主机名。但最简单还是用IP访问。问题2启动脚本报错 “Connection refused” 或 SSH相关错误。排查执行ssh localhost是否真的免密。检查~/.ssh目录权限必须700authorized_keys文件权限必须600。解决确保SSH服务正在运行sudo service ssh status。如果没运行启动它sudo service ssh start。还可以将SSH服务设为开机自启sudo systemctl enable sshWSL 2可能需要额外配置systemd支持。5.2 Hadoop启动与运行报错问题3执行start-dfs.sh后jps看不到 NameNode 或 DataNode。排查查看日志日志是排错的生命线。Hadoop的日志默认在$HADOOP_HOME/logs/目录下。查看最新的对应日志文件如hadoop-hadoop-namenode-主机名.log。常见原因与解决端口被占用Hadoop默认使用9000、9870、50070等端口。用netstat -tlnp | grep :9000查看。如果被占用可以修改core-site.xml中的fs.defaultFS端口或者停止占用端口的程序。目录权限不足确保hadoop.tmp.dir以及HDFS数据目录dfs.namenode.name.dir,dfs.datanode.data.dir的所属用户和组是hadoop并且有读写权限。用ls -ld 目录路径检查。多次格式化导致ClusterID不一致如果DataNode的VERSION文件中的clusterID与NameNode的不一致DataNode就无法启动。解决方法停止所有服务删除dfs.name.dir和dfs.data.dir目录下的所有内容重新格式化NameNode (hdfs namenode -format)再启动。问题4运行MapReduce作业失败YARN Web UI显示作业状态为 FAILED。排查点击失败的应用ID进入应用详情页查看Logs链接特别是stderr和syslog。常见原因内存不足WSL默认分配的内存可能较小。可以在Windows用户目录下的.wslconfig文件如C:\Users\你的用户名\.wslconfig中增加内存限制[wsl2] memory4GB # 根据你的机器情况调整建议至少4G processors2修改后在PowerShell中执行wsl --shutdown关闭WSL再重新打开。本地库Native Library问题某些Hadoop功能依赖本地库。可以尝试在$HADOOP_HOME/etc/hadoop/hadoop-env.sh中添加export HADOOP_OPTS-Djava.library.path$HADOOP_HOME/lib/native。或者直接忽略对于基础WordCount影响不大。5.3 日常使用与维护技巧停止服务与启动脚本对应使用stop-yarn.sh和stop-dfs.sh来优雅地停止服务。重置环境如果你想从头再来最干净的方式是停止所有Hadoop进程。删除Hadoop数据目录rm -rf ~/hadoopdata删除Hadoop安装目录如果你想重装rm -rf ~/hadoop重新解压、配置、格式化、启动。资源清理长期使用后HDFS会存储数据MapReduce作业会产生中间文件。定期清理不用的数据hdfs dfs -rm -r /user/hadoop/output删除输出目录。对于YARN的作业历史日志可以配置日志聚合并设置保留时间。在Windows上通过WSL运行Hadoop本质上是在一个高度集成的Linux容器中运行它。这带来了近乎原生的体验同时又保留了Windows主系统的便利性。对于学习、开发和轻量级测试而言这套方案已经非常成熟和可靠。最大的挑战往往来自于最初的环境配置和网络设置一旦跨过这个坎后面就是海阔天空。
返回列表