尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

hadoop-3.1.4.tar.gz拿来即用:伪分布式配置与避坑指南

hadoop-3.1.4.tar.gz拿来即用:伪分布式配置与避坑指南 简介Hadoop 3.1.4预配置版压缩包专为大数据开发者与学习者准备省去从零搭建分布式环境时的环境变量设置、配置文件修改、节点通信配置等繁琐步骤解决部署周期长、易出错的问题。包内已整合HDFS分布式文件系统、MapReduce并行计算模型与YARN资源管理器HDFS负责跨节点存储与冗余备份保障数据高容错与高可用MapReduce将大规模任务分片并行处理适合批量数据分析YARN统一调度计算资源可让Spark、Flink等框架共享集群能力。整个约332.2MB的gz压缩包已有532人浏览学习适合快速下载部署。使用时可跳过手动配置环节解压后启动NameNode、DataNode、ResourceManager、NodeManager等核心服务即可获得一套可用的Hadoop集群快速进入分布式存储与并行计算实践。预置的优化还增强了网络通信与安全性无论用于入门实验、数据挖掘、离线分析还是作为集群验证与生产预研的基础平台都能大幅降低上手门槛让大数据探索更省心。1. hadoop-3.1.4.tar.gz 拿来即用这份资源解决的是配置时间不是分布式复杂度这份 hadoop-3.1.4.tar.gz 是 Hadoop 大数据圈里很常见的交付形态作者已经把 Apache Hadoop 3.1.4 的编译后目录改好 core-site.xml、hdfs-site.xml、yarn-site.xml写好 workers甚至格式化过 NameNode再重新打包成一个 tar.gz。你拿到手的不是源码也不是从官网拖下来的“裸包”而是一套解压后就能尝试启动 HDFS 和 YARN 的 hadoop 伪分布式环境。它主要解决的是“从下载 Hadoop 到 jps 里能看到 NameNode”这一段最耗时的配置排查适合做 hadoop 课程设计、本地跑 MapReduce、入门伪分布式搭建的读者。但先泼一盆冷水它不等于三节点 HA 集群也不是万能的生产环境边界下面会展开讲。2. 先拆包看配置HADOOP_HOME、JAVA_HOME 和四个关键 XML2.1 这份 tar.gz 和官方包差在哪四类核心文件官方 Apache Hadoop 3.1.4 的 tar.gz 解压后etc/hadoop/下基本都是默认配置。默认配置能启动但默认的hadoop.tmp.dir指向/tmp重启一次机器NameNode 和 DataNode 的元数据可能直接消失。这份“拿来即用”的包通常会把下面几类文件都替你改掉。文件这份包常见改动作用etc/hadoop/core-site.xmlfs.defaultFS指向hdfs://localhost:9000或某个 hostnamehadoop.tmp.dir改到安装目录下决定 HDFS 入口地址和元数据/数据块存放根目录etc/hadoop/hdfs-site.xmldfs.replication1dfs.namenode.name.dir、dfs.datanode.data.dir指向/opt/hadoop/data/下伪分布式环境下副本数必须改成 1否则 DataNode 只有一台却要存 3 个副本etc/hadoop/yarn-site.xmlyarn.nodemanager.aux-servicesmapreduce_shuffleyarn.resourcemanager.hostname指向本机让 YARN 能跑 MapReduce 任务etc/hadoop/mapred-site.xmlmapreduce.framework.nameyarn让 MapReduce 跑在 YARN 上而不是本地模式etc/hadoop/hadoop-env.sh绝对路径的JAVA_HOME、HADOOP_HOME启动脚本靠这个文件找 JDK 和 Hadoop 安装目录etc/hadoop/workers只保留一个 localhost 或当前机器 hostname3.x 版本用 workers 文件决定 DataNode 和 NodeManager 跑在哪选型上Hadoop 3.1.4 是个很稳妥的版本。它能在 JDK8 下稳定运行HDFS 支持纠删码YARN 对常见 MapReduce、Spark 任务的兼容性都很好。更关键的是网上关于 3.1.4 的报错帖子足够多真出了问题搜到的概率比那些刚发布的版本大得多。做课程设计或者本地学大数据没必要追最新版3.1.4 够用且踩坑记录齐全。2.2 先做静态体检不启动也能判断这份包值不值拿到 tar.gz 后不建议直接照着一个集群教程重新配置那样等于放弃了“拿来即用”的意义。我一般会先解压再用五分钟做一次静态检查确认这份包是真的配置过还是只是把官方包重新压缩了一遍。tar -tzf hadoop-3.1.4.tar.gz | head -20 tar -xzf hadoop-3.1.4.tar.gz -C /opt mv /opt/hadoop-3.1.4 /opt/hadoop grep -nE JAVA_HOME|HADOOP_HOME /opt/hadoop/etc/hadoop/hadoop-env.sh第一条命令先列包内容确认里面是不是一个完整的 hadoop-3.1.4 目录。解压后我习惯把目录名统一成/opt/hadoop后面所有配置都以这个路径为基准否则HADOOP_HOME写起来很别扭。最后一条 grep 是看hadoop-env.sh里有没有已经写好的环境变量。如果JAVA_HOME是空的那这份包并没有你想象中配置得那么彻底下面那步 JDK 路径必须你自己补。再往下看 XML 是不是真的改过grep -nE fs.defaultFS|hadoop.tmp.dir|dfs.replication /opt/hadoop/etc/hadoop/core-site.xml /opt/hadoop/etc/hadoop/hdfs-site.xml cat /opt/hadoop/etc/hadoop/workers如果fs.defaultFS还是file:///hadoop.tmp.dir还指向/tmp/hadoop-${user.name}那这份包基本就是官方原始包。反之只要能见到hdfs://localhost:9000、dfs.replication1这类配置说明作者已经把伪分布式环境的关键参数落进去了。静态体检这一步别跳过它能在你执行start-dfs.sh之前就告诉你“这份包值不值得继续往下试”。2.3 为什么目录约定这么重要绝对路径是拿来即用的前提Hadoop 的配置文件里到处都是绝对路径。dfs.namenode.name.dir写死了/opt/hadoop/data/tmp/dfs/nameyarn.nodemanager.log-dirs也可能写死某个目录。如果你的解压目录是/home/你的用户名/hadoop-3.1.4那么所有写死/opt/hadoop的配置都会失效启动时 NameNode 会报目录找不到DataNode 会起不来。所以我在 2.2 里特意把目录统一成/opt/hadoop这不是洁癖是为了让 tar 包里的绝对路径能原样生效。如果你的机器上/opt权限不够那就把包解到你有权限的目录然后全局替换一遍/opt/hadoop换完之后必须再跑一次 2.2 的静态检查。很多“拿来即用”最后翻车都是死在解压目录和打包人目录不一致这一件事上。3. 伪分布式搭建完整启动解压、SSH、格式化、跑通 MapReduce3.1 解压、设置 HADOOP_HOME、把 JAVA_HOME 写进 hadoop-env.sh先做最朴素的一件事把包解压到约定目录然后配置HADOOP_HOME和PATH。tar -xzf hadoop-3.1.4.tar.gz -C /opt mv /opt/hadoop-3.1.4 /opt/hadoop cat ~/.bashrc EOF export HADOOP_HOME/opt/hadoop export PATH$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH EOF source ~/.bashrc这里注意bin目录下是hdfs、yarn、hadoop这些客户端命令sbin目录下才是start-dfs.sh、start-yarn.sh这类启动脚本。两个都要进PATH否则后面会频繁出现“命令找不到”。HADOOP_HOME 必须写到~/.bashrc里不要只在当前终端export一下因为你重启电脑后再打开终端环境变量就丢了。然后处理 JDK。Hadoop 3.1.4 对 JDK8 支持最友好JDK 越高越容易碰到IllegalArgumentException: Unsupported UTF-8这类奇怪问题。先看你的 java 实际路径readlink -f $(which java)如果输出是/usr/lib/jvm/java-8-openjdk-amd64/bin/java那JAVA_HOME就是去掉末尾/bin/java的/usr/lib/jvm/java-8-openjdk-amd64。把这个绝对路径写进hadoop-env.sh最稳echo export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 /opt/hadoop/etc/hadoop/hadoop-env.sh grep ^export JAVA_HOME /opt/hadoop/etc/hadoop/hadoop-env.sh为什么一定要写进hadoop-env.sh而不是只写进 shell因为start-dfs.sh这类脚本会重新读取环境很多人的java -version在终端里正常一执行 Hadoop 脚本就说找不到 Java根因就是JAVA_HOME只存在于某个交互式 shell 里没有落到 Hadoop 自己读取的配置文件。3.2 SSH 免密与 NameNode 元数据检查Hadoop 的启动脚本会通过 SSH 到workers文件里写的每个节点去拉 DataNode 和 NodeManager。伪分布式环境只有一台机器但脚本仍然会执行 SSH localhost。如果你的机器根本没配过 SSH 免密它会卡在密码输入或者直接报 Host key verification failed。先用两分钟把本机免密配好ssh-keygen -t rsa -P -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys ssh localhost hostname-P 表示生成一个空口令的密钥这对本地伪分布式没问题。最后一条ssh localhost hostname如果不用输密码就直接打印出机器名那 SSH 这关就过了。那些“jps 里只有 Jps”的翻车案例很大一部分是卡在 SSH 免密没生效脚本在后台启动子进程时直接失败。接下来检查 NameNode 元数据。如果这份包自带格式化记录我不建议一上来就重新格式化因为重复格式化经常引出 4.2 说的 clusterID 冲突。先看ls -l /opt/hadoop/data/tmp/dfs/name/current/VERSION 2/dev/null echo 已经有格式化记录如果这条命令提示没有这个文件说明 tar 包里没带元数据那就必须格式化一次/opt/hadoop/bin/hdfs namenode -format格式化过程会在终端打印大量日志最后出现successfully formatted才算完。若中途提示已经存在却不继续你可以按实际情况选择-force但我个人更建议先看清当前name目录里有没有东西再决定是不是真要强格式。3.3 启动 HDFS、YARN并用一个 Pi 程序验证环境变量、SSH、元数据三件事都齐了就可以启动start-dfs.sh start-yarn.sh jpsjps是 JDK 自带的小工具专门列出当前机器上跑起来的 Java 进程。伪分布式正常应该看到五个进程NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager。少任何一个都说明启动阶段有问题先别急着跑任务去/opt/hadoop/logs/下找对应日志。进程都起来了接着验证 HDFS 能不能读写hdfs dfsadmin -report hdfs dfs -mkdir -p /user/$(whoami) hdfs dfs -copyFromLocal /etc/hosts /user/$(whoami)/ hdfs dfs -ls /user/$(whoami)/dfsadmin -report会显示当前活的 DataNode 数量伪分布式环境看到 1 个就正常。/user/$(whoami)是每个用户访问 HDFS 时的根目录不建的话后面跑任务可能报Permission denied。最后跑一个官方示例验证 MapReduce 能真正提交到 YARNhadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.4.jar pi 2 10这个命令的意思是启动 2 个 mapper每个 mapper 采样 10 万次去算圆周率。数字调小一点只是为了验证流程真正要测性能再放大。跑完能看到Job finished successfully并且输出一个 3.14 开头的估算值说明从 HDFS 到 YARN 到 MapReduce 整条链路都是通的。此时再去浏览器打开http://localhost:9870看 NameNode 页面、http://localhost:8088看 YARN 页面能看到资源池和刚跑完的 job 记录。4. 避坑拿来即用最常翻车的五个配置点4.1 启动脚本报 JAVA_HOME 找不到现象终端里java -version正常但执行hadoop version或start-dfs.sh时报JAVA_HOME is not set and could not be found。原因Java 命令能跑是因为操作系统找到了/usr/bin/javaHadoop 脚本找的是JAVA_HOME环境变量。你只在某个 shell 里 export 过或者根本没 exportstart-dfs.sh重新加载环境时拿不到。解决把绝对路径写进hadoop-env.sh不要只写在~/.bashrcecho export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 /opt/hadoop/etc/hadoop/hadoop-env.sh /opt/hadoop/bin/hadoop version如果hadoop version能打印 3.1.4 版本信息这关就过了。这条命令同时也是排查“Hadoop 起不来”的黄金第一步因为后面所有进程都依赖这个变量。4.2 反复格式化 NameNodeDataNode 永远起不来现象jps只有NameNode没有DataNodehdfs dfsadmin -report显示 0 个 DataNode。打开 DataNode 日志里面有Incompatible clusterIDs或namenode clusterID和datanode clusterID不一致。原因这是伪分布式搭建里最典型的翻车。每次执行hdfs namenode -formatNameNode 都会生成一个新的 clusterID但 DataNode 的current/VERSION文件里还留着老的 clusterID。你第一次格式化后启动了 NameNode又因为某个小错误停了服务之后删除元数据再格式化NameNode 换了新 clusterIDDataNode 却还是旧身板两边对不上DataNode 只能放弃注册。解决停止所有服务后把 NameNode 和 DataNode 的元数据目录一起删掉再做一次干净格式化stop-all.sh 2/dev/null rm -rf /opt/hadoop/data/tmp/dfs/name rm -rf /opt/hadoop/data/tmp/dfs/data /opt/hadoop/bin/hdfs namenode -format start-dfs.sh注意这里的rm -rf只针对data/tmp/dfs下的两个子目录千万别手滑删到整个/opt/hadoop。如果你这份包已经自带格式化记录最好先确认能正常启动不要动不动就格式化越格式化越乱。4.3 用 root 用户跑 Hadoop 3.x脚本报 HDFS_DATANODE_USER 没设置现象云服务器上直接start-dfs.sh输出HDFS_NAMENODE_USER、HDFS_DATANODE_USER相关错误服务起不来。原因Hadoop 3.x 的启动脚本对用户权限更敏感。当检测到当前用户是 root 时它会要求你显式声明用哪个用户启动 NameNode 和 DataNode不声明就拒绝执行。解决在/opt/hadoop/etc/hadoop/hadoop-env.sh或~/.bashrc里补上用户变量export HDFS_NAMENODE_USERroot export HDFS_DATANODE_USERroot export HDFS_SECONDARYNAMENODE_USERroot export YARN_RESOURCEMANAGER_USERroot export YARN_NODEMANAGER_USERroot注意这是测试环境的偷懒写法。生产环境应该用普通用户跑 Hadoop而不是把 root 填满这些变量。课程设计和单机验证无所谓但你要是以后进公司还这么配运维大概率会来找你。4.4 配置里写死旧机器名换台机器就变成黑匣子现象解压在同一台机器上start-dfs.sh也提示 starting但jps里只有Jps日志里全是UnknownHostException或Connection refused: 9000。原因打包人的core-site.xml里fs.defaultFS可能写的是hdfs://hadoop01:9000workers里也写着hadoop01。换到你的机器后系统解析不了hadoop01这个主机名。解决要么在/etc/hosts里把这个旧机器名指到本机要么直接改成 localhostgrep fs.defaultFS /opt/hadoop/etc/hadoop/core-site.xml sed -i s/hdfs:\/\/hadoop01:9000/hdfs:\/\/localhost:9000/g /opt/hadoop/etc/hadoop/core-site.xml sed -i s/^hadoop01/localhost/ /opt/hadoop/etc/hadoop/workers改完必须重启相关服务因为 NameNode 启动时会把fs.defaultFS缓存进内存。现在再回头看 2.2 的静态检查是不是觉得这几分钟花得很值你提前看到配置里写的是哪个主机名就能避免启动失败后再去翻日志。4.5 端口 9870 和 8088 打不开UI 页面一片空白现象jps五个进程都在HDFS 也能正常读写但浏览器访问http://服务器IP:9870就是连不上。原因Hadoop 进程本身没问题问题出在防火墙和云厂商安全组。NameNode 的 Web UI 在 Hadoop 3.x 里默认是 9870ResourceManager 是 8088这两个端口没被放行外部浏览器自然进不来。解决先确认本机能访问再用防火墙和安全组放行curl -I http://localhost:9870 firewall-cmd --permanent --add-port9870/tcp --add-port8088/tcp 2/dev/null firewall-cmd --reload 2/dev/null如果你的服务器有安全组还要在云控制台把 9870 和 8088 加进入方向规则。别一看到浏览器打不开就怀疑 Hadoop先用curl把“本机通”和“外部通”分开问题定位会快很多。5. 进阶半小时验收清单把这份包的可用边界试出来我拿到这类已经配置好的 hadoop-3.1.4.tar.gz不会直接往上堆组件而是先跑一遍 30 分钟的验收流程。你可以把下面这几件事当作固定动作。第一步验证进程完整性。执行jps必须看到 NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager 五个进程少一个都不算“拿来即用”。第二步验证存储层。执行hdfs dfsadmin -report看 Live datanodes 是不是 1 个剩余空间是不是和机器实际盘相符。第三步验证计算层。跑一次hadoop jar ... pi 2 10确认 MapReduce 能经过 YARN 调度。第四步验证配置边界。用grep确认dfs.replication是 1fs.defaultFS指向的地址和当前机器一致。这四步跑完这份包的可用边界基本就试出来了它能支撑课程设计、单机压测、本地跑示例作业但别指望它直接当三节点生产集群。后面你要做 hadoop 和 zookeeper 整合实战、hadoop HA或者继续安装 HBase、Spark都需要在它基础上重新规划目录和配置。HA 场景下至少要有两到三台机器每台机器的主机名必须固定JournalNode 和 ZKFC 都是按主机名找元数据的。到那时候把这份 tar.gz 留一份原包当后悔药别在同一个目录里反复改配置改乱了还能一键恢复。端口时通时不通这种问题也不是什么玄学先查/etc/hosts再查防火墙最后查安全组基本都能定位。从那以后我每次拿到陌生环境里的 hadoop-3.1.4.tar.gz都会强制走一遍这四步验收确认 HADOOP_HOME、SSH、元数据、端口四个点都正常再往上面装别的东西。这套检查花不了半小时却能省下后面一整天的排错。希望帮到你。本文还有配套的精品资源点击获取
返回列表