简介本资源为Apache Hadoop 2.6.5的官方发行压缩包面向大数据入门学习者、运维工程师及需要搭建分布式计算环境的高校师生用于解决HDFS存储、MapReduce计算与YARN资源调度等核心组件的本地或集群部署问题。包内共900个文件以477个jar核心依赖库、129个class字节码、51个xml配置文件及50个sh启动脚本为主另含html、properties、so动态库等辅助文件压缩包约175.09MB覆盖Hadoop完整组件与配置模板。目前已有1266人学习下载。借助该包可获取HDFS、MapReduce、YARN三大模块的可运行环境配合core-site.xml、hdfs-site.xml等配置样例完成单机与多节点集群搭建并支持Kerberos安全认证与Web UI监控是理解大数据生态与后续接入Hive、Spark等组件的实用基础。1. 拿到 hadoop-2.6.5.tar.gz 之后先别急着解压搞清楚它能干什么很多人第一次接触 Hadoop是从一个压缩包开始的。hadoop-2.6.5.tar.gz这个文件本身不大但它背后是一整套分布式存储与计算的基础设施。你下载它大概率是为了搭一套能跑 MapReduce 和 HDFS 的环境——可能是课程设计、可能是本地开发调试、也可能是为了理解 YARN 的作业调度流程。2.6.5 这个版本在培训教材和高校实验里出现频率极高因为它的配置方式经典、依赖清晰伪分布式和完全分布式都能跑通。但问题在于这个包解压之后有上百个配置文件、几十个脚本如果上来就照着某篇博客复制粘贴大概率会在JAVA_HOME、core-site.xml、hdfs-site.xml这几个地方反复翻车。所以先花几分钟搞清楚它的目录结构和运行前提比急着敲start-dfs.sh重要得多。2. 解压与目录结构先看懂再动手2.1 解压位置与权限规划拿到hadoop-2.6.5.tar.gz之后第一件事不是解压而是想清楚放在哪、用哪个用户跑。Hadoop 对权限敏感尤其是伪分布式模式下NameNode 和 DataNode 会往本地磁盘写数据目录如果目录权限不对启动时直接报Permission denied。常见做法是创建一个专用用户比如hadoop然后把压缩包放到这个用户的家目录下解压。这样后续所有操作都在同一用户下完成避免 root 和普通用户混用导致的权限混乱。# 创建 hadoop 用户并设置密码 sudo useradd -m hadoop sudo passwd hadoop # 切换到 hadoop 用户 su - hadoop # 把压缩包放到家目录并解压 tar -zxvf hadoop-2.6.5.tar.gz -C /home/hadoop/ # 重命名目录方便后续配置 mv /home/hadoop/hadoop-2.6.5 /home/hadoop/hadoop这里-C指定解压目标目录-zxvf分别表示解压 gzip、显示过程、指定文件。重命名不是必须的但后续写HADOOP_HOME时路径短一点少打几个字也少出错。解压完成后进入/home/hadoop/hadoop目录你会看到几个关键子目录目录作用bin/基础命令脚本如hdfs、hadoop、yarnsbin/集群管理脚本如start-dfs.sh、stop-yarn.shetc/hadoop/所有配置文件所在地核心修改都在这里lib/依赖的 jar 包logs/运行日志排错第一现场share/示例 jar 包和文档新手最容易忽略的是etc/hadoop/下面那一堆.xml和.sh文件。hadoop-env.sh管环境变量core-site.xml管全局配置hdfs-site.xml管 HDFS 参数mapred-site.xml和yarn-site.xml管计算框架。这几个文件改错一个集群就起不来。2.2 配置 JAVA_HOME 与 SSH 免密Hadoop 2.6.5 依赖 JDK而且对版本有要求。官方推荐 JDK 7 或 JDK 8JDK 11 及以上会出兼容问题。先确认本机 Java 路径which java # 输出类似 /usr/bin/java readlink -f /usr/bin/java # 输出类似 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java拿到真实路径后编辑etc/hadoop/hadoop-env.sh找到export JAVA_HOME那一行改成实际路径export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64注意这里不要带/jre/bin/java只写到 JDK 根目录。改完之后用source让配置生效或者重新登录终端。接下来配置 SSH 免密。伪分布式和完全分布式都需要 SSH 到本机或远程节点如果不配免密每次启动都要输密码脚本会卡住。# 生成密钥对一路回车 ssh-keygen -t rsa -P -f ~/.ssh/id_rsa # 把公钥追加到授权文件 cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys # 测试免密登录 ssh localhost如果ssh localhost不需要密码就能进去说明配置成功。如果提示Permission denied检查~/.ssh目录权限是否为700authorized_keys是否为600。这两个权限不对SSH 会直接拒绝。提示有些系统默认不允许 root 用户 SSH 登录如果你用 root 操作需要检查/etc/ssh/sshd_config里的PermitRootLogin参数。但更推荐用普通用户跑 Hadoop。3. 伪分布式配置从 core-site.xml 到格式化 NameNode3.1 四个核心配置文件怎么写伪分布式模式是在一台机器上模拟多节点NameNode、DataNode、ResourceManager、NodeManager 都跑在同一个进程空间里。配置的重点是让 Hadoop 知道数据存哪、临时目录放哪、副本数设多少。先改core-site.xml指定 HDFS 的默认文件系统地址和临时目录configuration property namefs.defaultFS/name valuehdfs://localhost:9000/value /property property namehadoop.tmp.dir/name value/home/hadoop/hadoop/tmp/value /property /configurationfs.defaultFS告诉客户端默认连哪个 NameNodelocalhost:9000是伪分布式的标准写法。hadoop.tmp.dir是 Hadoop 的临时目录很多启动失败都是因为默认的/tmp被系统清理或者权限不对显式指定到家目录下更稳妥。接着改hdfs-site.xml设置副本数和 NameNode/DataNode 的数据目录configuration property namedfs.replication/name value1/value /property property namedfs.namenode.name.dir/name value/home/hadoop/hadoop/data/namenode/value /property property namedfs.datanode.data.dir/name value/home/hadoop/hadoop/data/datanode/value /property /configuration伪分布式只有一台机器副本数必须设为 1否则 HDFS 会一直报副本不足。dfs.namenode.name.dir和dfs.datanode.data.dir分别指定元数据和块数据的存放路径这两个目录不需要提前创建格式化时会自动生成但父目录要有写权限。然后处理mapred-site.xml。这个文件默认不存在需要从模板复制cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml编辑内容指定 MapReduce 跑在 YARN 上configuration property namemapreduce.framework.name/name valueyarn/value /property /configuration最后改yarn-site.xml配置 ResourceManager 和 NodeManagerconfiguration property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value /property property nameyarn.nodemanager.aux-services.mapreduce.shuffle.class/name valueorg.apache.hadoop.mapred.ShuffleHandler/value /property /configurationmapreduce_shuffle是 MapReduce 任务在 YARN 上跑的时候做数据交换用的不配这个任务会卡在 shuffle 阶段。3.2 格式化与启动流程配置改完之后第一次启动前必须格式化 NameNodecd /home/hadoop/hadoop bin/hdfs namenode -format格式化会创建dfs.namenode.name.dir指定的目录并生成集群 ID。看到Storage directory ... has been successfully formatted才算成功。如果报Directory is not empty说明之前格式化过要么删掉数据目录重来要么直接启动。格式化完成后启动 HDFS 和 YARNsbin/start-dfs.sh sbin/start-yarn.sh启动脚本会通过 SSH 连接到localhost依次拉起 NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager。用jps检查进程jps # 应该看到 NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager如果少了某个进程去logs/目录下找对应的.log文件看最后几行报什么错。常见的是端口占用、目录权限、JAVA_HOME 没配好。启动成功后浏览器访问http://localhost:50070看 HDFS 的 Web UI访问http://localhost:8088看 YARN 的 Web UI。这两个页面能打开说明伪分布式基本跑通了。注意如果你在 Windows 下用 IDEA 连接这个集群需要把core-site.xml和hdfs-site.xml放到项目的resources目录并且配置fs.defaultFS指向虚拟机的 IP而不是localhost。同时确保虚拟机的防火墙放行了 9000 和 50070 端口。4. 避坑与排查那些让你怀疑人生的报错4.1 启动时报 JAVA_HOME is not set现象执行start-dfs.sh时提示JAVA_HOME is not set但明明在hadoop-env.sh里配了。原因hadoop-env.sh里的JAVA_HOME被注释了或者你改的是另一个用户的配置文件。还有一种情况是hadoop-env.sh里同时存在多个export JAVA_HOME后面的覆盖了前面的。解决打开etc/hadoop/hadoop-env.sh搜索JAVA_HOME确保只有一行有效的export JAVA_HOME/你的/jdk/路径并且没有被#注释。改完后source一下或者重新登录。4.2 NameNode 启动后立刻消失现象jps看到 NameNode 闪了一下就没了logs/hadoop-hadoop-namenode-*.log里报java.net.BindException: Address already in use。原因9000 端口被占用了。可能是之前启动的 Hadoop 没停干净或者别的服务用了这个端口。解决netstat -tlnp | grep 9000找到占用进程kill掉。或者改core-site.xml里的fs.defaultFS端口比如换成9001同时改hdfs-site.xml里相关的端口配置。4.3 DataNode 起不来报 clusterID 不一致现象格式化 NameNode 之后DataNode 启动失败日志里说ClusterID mismatch。原因你之前格式化过DataNode 的数据目录里还留着旧的 clusterID和新的 NameNode 对不上。解决删掉dfs.datanode.data.dir指定的目录重新启动 DataNode。如果 NameNode 也起不来把 NameNode 的数据目录也删掉重新格式化。注意格式化前一定要停掉所有 Hadoop 进程。4.4 Windows 下 IDEA 连不上 HDFS现象IDEA 里写 Java 代码操作 HDFS报Connection refused或No route to host。原因core-site.xml里写的是localhost:9000但在 Windows 上localhost指向 Windows 本机不是虚拟机。解决把core-site.xml里的fs.defaultFS改成虚拟机的 IP比如hdfs://192.168.1.100:9000。同时确认虚拟机的网络模式是桥接或 NAT并且防火墙放行了 9000 端口。如果还是连不上在 Windows 的hosts文件里加一条 IP 和主机名的映射。4.5 执行 MapReduce 任务卡在 map 0% reduce 0%现象任务提交到 YARN 后一直卡着不动YARN 的 Web UI 里看到任务状态是ACCEPTED但一直不跑。原因YARN 的yarn.nodemanager.aux-services没配mapreduce_shuffle或者 NodeManager 的内存资源不够任务申请不到容器。解决检查yarn-site.xml里的yarn.nodemanager.aux-services是否为mapreduce_shuffle。如果内存不够在yarn-site.xml里加yarn.nodemanager.resource.memory-mb和yarn.scheduler.minimum-allocation-mb把值调小一点比如 1024 和 512。5. 进阶技巧用 Docker 跑 Hadoop 2.6.5 与作业提交验证5.1 为什么考虑 Docker 方式在本地虚拟机里搭 Hadoop 有个麻烦环境一旦弄乱重装成本很高。用 Docker 跑hadoop-2.6.5的镜像可以做到一键起停、环境隔离特别适合反复做实验或者课程设计。常见做法是找一个基于centos或ubuntu的基础镜像把 JDK 和 Hadoop 装进去启动时映射 9000、50070、8088 这几个端口。# 拉取一个基础镜像 docker pull ubuntu:18.04 # 启动容器并映射端口 docker run -it -d --name hadoop-test \ -p 9000:9000 -p 50070:50070 -p 8088:8088 \ -v /home/hadoop/data:/data \ ubuntu:18.04 /bin/bash # 进入容器 docker exec -it hadoop-test /bin/bash进入容器后按照前面的步骤装 JDK、解压hadoop-2.6.5.tar.gz、改配置、格式化、启动。注意容器里的localhost就是容器本身SSH 免密也要在容器里重新配一遍。数据目录通过-v挂载到宿主机这样容器删了数据还在。5.2 提交一个 WordCount 作业验证集群伪分布式跑通之后最直接的验证方式是跑一个自带的 WordCount 示例。这个作业会从 HDFS 读文本、统计词频、把结果写回 HDFS完整走一遍 MapReduce 流程。# 在 HDFS 上创建输入目录 bin/hdfs dfs -mkdir -p /user/hadoop/input # 上传一个本地文件到 HDFS echo hello hadoop hello mapreduce /home/hadoop/test.txt bin/hdfs dfs -put /home/hadoop/test.txt /user/hadoop/input/ # 提交 WordCount 作业 bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar \ wordcount /user/hadoop/input /user/hadoop/output # 查看输出结果 bin/hdfs dfs -cat /user/hadoop/output/part-r-00000hadoop-mapreduce-examples-2.6.5.jar是 Hadoop 自带的示例包wordcount是主类名后面两个参数分别是输入路径和输出路径。输出目录不能提前存在否则作业会报Output directory already exists。跑完之后part-r-00000里就是词频统计结果。如果这个作业能跑通说明 HDFS 读写、YARN 调度、MapReduce 执行都没问题。如果卡住或者报错回到logs/目录看yarn-*.log和mapreduce-*.log重点看Container exited with a non-zero exit code后面的堆栈信息。5.3 一个我常用的检查习惯从那以后我每次搭完 Hadoop不管伪分布式还是完全分布式都强制走一遍这个检查清单jps看进程是否齐全、hdfs dfsadmin -report看 DataNode 是否注册、yarn node -list看 NodeManager 是否在线、最后跑一个 WordCount 确认端到端能通。这四步走完基本能排除 90% 的配置问题。希望帮到你。本文还有配套的精品资源点击获取