首页 / 资讯中心 / 文章详情

Hadoop 3.1.4 配置包实战:快速搭建与WordCount验证

Hadoop 3.1.4 配置包实战:快速搭建与WordCount验证 ★ FEATURED ARTICLE
简介这份资源是预配置完成的 Hadoop 3.1.4 压缩包面向大数据入门学习者、高校实验环境搭建者以及需要快速验证分布式方案的开发者解决从零配置繁琐、环境变量与集群参数易出错的问题。压缩包为 gz 格式整体约 332.2MB上游未提供文件总数与类型明细但已包含 HDFS、MapReduce、YARN 等核心组件及可直接启动的配置。已有 532 人学习关注说明其在教学与实验场景中具备一定参考价值。使用者解压后即可省去环境变量设置、core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 等文件修改以及 NameNode 格式化等步骤直接启动 DataNode、NameNode、ResourceManager、NodeManager 服务把精力集中到 HDFS 存储、MapReduce 并行计算与 YARN 资源调度的实践上适合作为大数据课程实验、课程设计或自学练手的即用型基础环境。1. 拿到一个 Hadoop 3.1.4 的配置包先别急着解压很多做大数据的朋友应该都有过这种经历想搭个 Hadoop 集群练手或者跑个 Demo结果光是配环境就耗掉一整天。core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 四个文件来回改SSH 免密登录、Java 环境变量、hosts 映射每一步都可能卡住。等你终于把 NameNode 格式化成功、DataNode 也起来了回头一看一天已经过去了真正想跑的 WordCount 还没开始写。这次拿到的是一份已经配置好的 Hadoop 3.1.4 压缩包解压之后基本可以直接启动。它解决的就是上面那个“配环境配到崩溃”的问题——四个核心配置文件已经写好环境变量脚本已经设好目录结构已经初始化过你只需要改一下自己机器上的路径和主机名就能跑起来。适合谁用一是刚接触大数据、想快速看到 HDFS 和 YARN 跑起来的新手二是需要频繁重建实验环境的从业者比如每次换机器都要重新搭一套伪分布式或完全分布式集群的人。下面我从这个包的结构开始拆把怎么用、参数怎么改、哪里容易翻车都讲清楚。2. 拆开这个包目录结构和关键配置文件2.1 解压后你会看到什么拿到压缩包之后先别急着往 /usr/local 下面扔。我一般习惯先解压到一个临时目录看一眼结构确认没有奇怪的绝对路径再决定放哪。常见做法是# 先解压到当前目录看看结构 tar -xzvf hadoop-3.1.4.tar.gz -C /tmp/hadoop-check/ # 看看顶层目录 ls /tmp/hadoop-check/hadoop-3.1.4/正常你会看到这些目录bin/、sbin/、etc/、lib/、share/、logs/、data/、tmp/。其中etc/hadoop/是配置文件的集中地data/和tmp/是预留给 HDFS 和临时文件的目录。如果解压后发现data/和tmp/已经存在说明打包的人已经帮你建好了目录结构省了一步。这里有个细节要注意有些配置包会把路径写死成打包者的用户名和目录比如/home/xxx/hadoop-3.1.4/data。你解压到自己的机器上这个路径大概率不存在启动时就会报Directory does not exist。所以第一步不是直接启动而是先检查配置文件里的路径。2.2 四个核心配置文件里到底写了什么Hadoop 伪分布式和完全分布式的配置差异主要在这四个文件里。我逐个说一下这个包里它们大概长什么样以及你需要改哪里。core-site.xml主要定义 HDFS 的默认文件系统和临时目录。典型内容configuration property namefs.defaultFS/name valuehdfs://localhost:9000/value /property property namehadoop.tmp.dir/name value/usr/local/hadoop-3.1.4/tmp/value /property /configurationfs.defaultFS里的localhost要改成你实际的主机名或 IP。如果是伪分布式保持 localhost 也行但前提是你的/etc/hosts里 localhost 解析正确。hadoop.tmp.dir指向的目录必须存在且有写权限否则 NameNode 启动时会直接失败。hdfs-site.xml定义副本数和数据目录configuration property namedfs.replication/name value1/value /property property namedfs.namenode.name.dir/name valuefile:///usr/local/hadoop-3.1.4/data/namenode/value /property property namedfs.datanode.data.dir/name valuefile:///usr/local/hadoop-3.1.4/data/datanode/value /property /configuration伪分布式下dfs.replication设为 1 就够了设成 3 也不会报错但会一直提示副本不足。dfs.namenode.name.dir和dfs.datanode.data.dir的路径同样要确认存在。mapred-site.xml和yarn-site.xml分别指定 MapReduce 运行在 YARN 上以及 YARN 的资源管理参数。这两个文件里比较关键的参数是mapreduce.framework.nameyarn、yarn.nodemanager.aux-servicesmapreduce_shuffle、yarn.resourcemanager.hostname。yarn.resourcemanager.hostname也要改成你的主机名。提示不要直接复制网上的配置模板不同版本的 Hadoop 参数名有差异。3.1.4 里yarn.nodemanager.env-whitelist这个参数如果漏了NodeManager 启动时可能报环境变量找不到。2.3 环境变量和启动脚本这个包里通常还会带一个hadoop-env.sh里面设置了JAVA_HOME。你需要确认这个路径和你机器上的 Java 安装路径一致。常见做法是# 查看当前 Java 路径 which java # 输出类似 /usr/bin/java但 JAVA_HOME 要的是 JDK 根目录 readlink -f /usr/bin/java # 假设输出 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java # 那么 JAVA_HOME 就是 /usr/lib/jvm/java-8-openjdk-amd64然后编辑etc/hadoop/hadoop-env.sh把export JAVA_HOME那一行改成你的实际路径。如果这个文件里写的是打包者的路径不改的话启动脚本会找不到 Java。启动顺序也有讲究。伪分布式下第一次启动需要先格式化 NameNode# 格式化 NameNode注意这个操作只能做一次 hdfs namenode -format # 启动 HDFS start-dfs.sh # 启动 YARN start-yarn.sh # 用 jps 检查进程 jpsjps应该能看到 NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager 这五个进程。少一个就说明对应的服务没起来需要去看logs/目录下的日志。3. 从零跑通一个 WordCount验证配置是否真的可用3.1 准备输入数据并上传到 HDFS配置改完之后最直接的验证方式就是跑一个 WordCount。先准备一个文本文件# 在本地创建一个测试文件 echo hello hadoop hello bigdata hello world /tmp/test.txt echo hadoop is a distributed system /tmp/test.txt # 在 HDFS 上创建输入目录 hdfs dfs -mkdir -p /user/root/input # 上传文件 hdfs dfs -put /tmp/test.txt /user/root/input/ # 确认上传成功 hdfs dfs -ls /user/root/input/这几条命令里-mkdir -p会递归创建目录-put把本地文件复制到 HDFS。如果hdfs dfs -ls能列出文件说明 HDFS 读写正常。如果报Connection refused检查 NameNode 是否真的起来了以及fs.defaultFS的地址和端口是否写对。3.2 提交 MapReduce 任务Hadoop 自带了一个 WordCount 示例 jar 包在share/hadoop/mapreduce/目录下。直接提交# 提交 WordCount 任务 hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.4.jar \ wordcount /user/root/input /user/root/output # 查看输出结果 hdfs dfs -cat /user/root/output/part-r-00000提交之后YARN 会分配容器来跑 Map 和 Reduce 任务。你可以在终端看到任务进度也可以打开 YARN 的 Web UI默认 8088 端口看任务详情。如果任务卡在ACCEPTED状态很久通常是 YARN 的资源不够——伪分布式下默认内存配置可能偏小需要调yarn.nodemanager.resource.memory-mb和yarn.scheduler.maximum-allocation-mb。输出结果里每个单词后面跟一个数字表示出现次数。如果能看到hello 3、hadoop 2这样的结果说明整个链路——HDFS 存储、YARN 调度、MapReduce 计算——全部跑通了。3.3 参数调优的几个关键点跑通之后如果你想让这个环境更稳定或者跑更大的数据有几个参数值得调参数默认值建议值伪分布式作用yarn.nodemanager.resource.memory-mb81924096NodeManager 可用内存yarn.scheduler.maximum-allocation-mb81924096单个容器最大内存mapreduce.map.memory.mb10241024Map 任务内存mapreduce.reduce.memory.mb10241024Reduce 任务内存dfs.blocksize128M128MHDFS 块大小这些参数写在yarn-site.xml和mapred-site.xml里。改完之后需要重启 YARN 才能生效stop-yarn.sh然后start-yarn.sh。注意不要只重启 NodeManagerResourceManager 也需要重启才能重新读取调度器配置。注意如果你机器本身内存就不大比如 8G把yarn.nodemanager.resource.memory-mb设得太高会导致系统开始用交换分区反而更慢。我一般会留 2G 给操作系统剩下的再分配给 YARN。4. 避坑指南这几个地方最容易翻车4.1 格式化 NameNode 后反复启动失败现象第一次hdfs namenode -format成功但重启之后 NameNode 起不来日志里报NameNode is not formatted或者Cluster ID mismatch。原因hadoop.tmp.dir指向的目录被清理了或者你改了dfs.namenode.name.dir的路径但没有重新格式化。还有一种情况是多次执行-format导致 DataNode 的 Cluster ID 和 NameNode 不一致。解决先确认dfs.namenode.name.dir下的current/VERSION文件存在。如果不存在需要重新格式化。如果 DataNode 的 Cluster ID 不匹配把dfs.datanode.data.dir下的current/VERSION里的 Cluster ID 改成和 NameNode 一致或者直接删掉 DataNode 的数据目录让它重新注册。血泪经验是格式化之前一定确认所有路径都改好了格式化之后不要再动dfs.namenode.name.dir。4.2 SSH 免密登录没配好导致启动脚本卡住现象执行start-dfs.sh时提示输入密码或者直接报Permission denied (publickey,password)。原因Hadoop 的启动脚本依赖 SSH 登录到各节点执行命令。伪分布式下虽然只有本机但仍然需要配置本机免密登录。解决# 生成密钥对如果还没有 ssh-keygen -t rsa -P -f ~/.ssh/id_rsa # 把公钥追加到 authorized_keys cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys # 测试免密登录 ssh localhost如果ssh localhost仍然要密码检查/etc/ssh/sshd_config里PubkeyAuthentication是否为 yes以及AuthorizedKeysFile路径是否正确。改完 sshd 配置需要重启 sshd 服务。4.3 DataNode 启动后立刻消失现象jps看到 DataNode 进程一闪而过过几秒再查就没了。原因最常见的是dfs.datanode.data.dir指向的目录权限不对或者目录不存在。另一种可能是多次格式化 NameNode 导致 DataNode 的 Cluster ID 不匹配DataNode 拒绝启动。解决先看logs/hadoop-*-datanode-*.log里面会写具体原因。如果是权限问题chown -R改成当前用户。如果是 Cluster ID 不匹配按 4.1 里的方法处理。我一般会在格式化之前就把 data 目录清空避免残留数据干扰。4.4 YARN 任务一直卡在 ACCEPTED现象WordCount 提交后任务状态一直是 ACCEPTED不进入 RUNNING。原因YARN 的资源不够分配一个容器。伪分布式下默认yarn.nodemanager.resource.memory-mb可能是 8192但如果你机器内存小NodeManager 实际可用的内存可能更少。另外yarn.scheduler.maximum-allocation-mb如果小于 Map 任务需要的内存也会导致分配失败。解决把yarn.nodemanager.resource.memory-mb和yarn.scheduler.maximum-allocation-mb调成一致的值比如都设成 4096。同时确认mapreduce.map.memory.mb和mapreduce.reduce.memory.mb不超过这个值。改完重启 YARN。4.5 端口被占用导致服务起不来现象NameNode 或 ResourceManager 启动时报BindException: Address already in use。原因9000、8088、9870 这些默认端口被其他进程占用了。常见的是之前启动的 Hadoop 进程没杀干净或者机器上跑了其他 Web 服务。解决# 查看端口占用 netstat -tlnp | grep 9000 netstat -tlnp | grep 8088 # 如果确认是残留的 Hadoop 进程直接杀 kill -9 pid或者改 Hadoop 的端口配置。fs.defaultFS的端口在core-site.xml里改YARN ResourceManager 的 Web UI 端口在yarn-site.xml里改。改完记得同步改启动脚本里可能引用到的地址。5. 进阶用法把这个包改造成完全分布式集群5.1 从伪分布式到完全分布式要改什么伪分布式是在一台机器上模拟多个角色完全分布式是把 NameNode、DataNode、ResourceManager、NodeManager 分散到多台机器上。这个配置包的基础结构可以直接复用但需要改几个地方。首先是core-site.xml里的fs.defaultFS要把 localhost 改成 NameNode 所在机器的主机名。然后是hdfs-site.xmldfs.replication要改成 2 或 3dfs.namenode.name.dir只在 NameNode 机器上配置DataNode 机器上只配dfs.datanode.data.dir。yarn-site.xml里的yarn.resourcemanager.hostname要指向 ResourceManager 所在机器。还有一个容易忽略的文件是workers旧版本叫slaves里面列出所有 DataNode 和 NodeManager 的主机名。这个文件在etc/hadoop/目录下每行一个主机名。5.2 分发配置和批量启动完全分布式下你不需要在每台机器上手动改配置。常见做法是在一台机器上改好然后用scp分发# 假设有 node1、node2、node3 三台机器 # 在 node1 上改好配置后分发到其他节点 for host in node2 node3; do scp -r /usr/local/hadoop-3.1.4/etc/hadoop/ $host:/usr/local/hadoop-3.1.4/etc/ done # 在 node1 上启动整个集群 start-dfs.sh start-yarn.sh启动脚本会读取workers文件通过 SSH 到各节点启动对应的服务。前提是 node1 到所有节点都配好了免密登录。5.3 验证集群状态和几个实用命令集群起来之后除了jps逐台检查还可以用hdfs dfsadmin -report查看 DataNode 的注册情况# 查看 HDFS 集群状态 hdfs dfsadmin -report # 查看 YARN 节点状态 yarn node -list # 查看 YARN 队列 yarn queue -status defaulthdfs dfsadmin -report会列出所有 DataNode 的 IP、容量、已用空间。如果某个 DataNode 没出现说明它没注册成功去那台机器上看日志。yarn node -list会显示 NodeManager 的状态RUNNING表示正常。我自己的习惯是每次重建集群之后先跑一遍hdfs dfsadmin -report和yarn node -list确认所有节点都注册上了再跑 WordCount。这样能把问题定位在启动阶段而不是等到任务提交了才发现某个节点没起来。从那以后我每次拿到一个新的配置包都会先解压检查路径、再改主机名和 Java 路径、然后格式化、启动、跑 WordCount最后才去调参数。这套流程走下来基本不会翻车。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站