ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Hadoop 2.6.5 tar.gz 安装部署实战:配置、启动与ZooKeeper整合

Hadoop 2.6.5 tar.gz 安装部署实战:配置、启动与ZooKeeper整合 简介Hadoop 2.6.5 官方发行版压缩包面向大数据初学者、运维工程师与需要搭建分布式实验环境的开发者。该版本以 HDFS 分布式存储、MapReduce 数据处理和 YARN 资源调度为核心HDFS 将大文件切分为块并冗余存储MapReduce 通过 Map 与 Reduce 两阶段完成并行计算YARN 则负责集群资源统一管理适合在 Linux 环境完成单机或集群部署。压缩包共包含 900 个文件以 jar 类库、class 字节码、xml 配置、sh 启动脚本为主另有 html 界面、properties 配置、cmd 与 bat 辅助脚本等整体约 175.09MB解压后得到 hadoop-2.6.5 目录覆盖 bin、sbin、etc、lib 等常用模块目录结构完整便于直接定位和使用。目前已有 1266 人学习下载。压缩包内提供 HDFS 与 MapReduce 运行所需的可执行程序、库文件、默认配置模板、Web 监控页面及示例文件还包含 NameNode、DataNode、ResourceManager、NodeManager 等角色相关配置读者可据此快速搭建环境并对照 core-site.xml、hdfs-site.xml、mapred-site.xml 等配置理解分布式系统工作原理是入门与实验验证的实用材料。1. 项目背景与版本解构1.1 为什么是hadoop-2.6.5.tar.gz先说点实在的。这两年谈大数据大多绕不开Spark、Flink和云原生三大件但Hadoop作为分布式存储与计算的地基至今仍是各类数据平台的底层支撑。而hadoop-2.6.5.tar.gz这个包名在技术社区已经存在了好几年却始终是搜索量常青树。原因很简单大量教学环境、课程设计、实验机房、老企业内部系统都锁定在这个版本上。它既是学习HDFS和MapReduce机制的理想样本也是许多生产环境里仍然跑着的老黄牛。2.6.5是Apache Hadoop 2.x分支中一个相当稳定的维护版本。相比2.6.0到2.6.4它修复了不少NameNode和DataNode层面关于内存泄漏、RPC超时处理以及HDFS快照的bug。从学习视角看2.6.5保留着比较纯正的Hadoop原生架构NameNode/SecondaryNameNode/DataNode、ResourceManager/NodeManager分离还没被后来YARN Timeline Service v2、HDFS Router等复杂组件干扰非常适合用来建立完整的分布式思维框架。再说tar.gz。Hadoop官方发行版从2.x开始同时提供src和binary两种包生产环境我们一般选binary tarball也就是文件名里不带src的那种。.tar.gz本质是Unix/Linux下最常见的归档压缩格式相当于Windows下的.zip。解压后是一个完整的hadoop-2.6.5目录里面包含bin、sbin、etc、share、lib等子目录。整个包体积约200MB左右具体取决于编译选项和文档是否包含下载后必须校验sha512防止源站被镜像污染。1.2 这套东西到底能干什么拆解一下这个包的价值。它提供了三块核心能力分布式文件存储HDFS、分布式计算框架MapReduce以及集群资源调度YARN。换句话说有了它你可以把一堆普通服务器拼成一个逻辑上的超级计算机——数据分散存储计算任务分散执行单台机器挂了不影响整体服务。很多初学者会把安装hadoop-2.6.5.tar.gz等同于解压然后跑一下start-dfs.sh实际上这远远不够。解压只是第一步真正的核心在于配置Java环境、设置SSH免密、规划目录结构、修改XML配置、格式化NameNode、启动守护进程、验证Web UI。整个过程环环相扣任何一步出错都会导致集群启动失败或DataNode无法注册。这篇博文就把我从零开始部署2.6.5的完整经验拆开讲透覆盖单机伪分布式、完全分布式、HDFS基本操作以及和ZooKeeper整合的实战要点。2. 安装前的环境准备与目录规划2.1 硬件、操作系统与JDK选型在动手解压之前先确认一台干净的主机。以最常见的部署形态为例4核CPU、8GB内存、100GB磁盘这是伪分布式的最低舒适配置。如果是完全分布式至少需要3台机器Master节点内存建议不低于8GB因为NameNode和ResourceManager都集中在Master上堆内存默认配置加起来很容易超过4GB。操作系统方面CentOS 7.x和Ubuntu 16.04/18.04是Hadoop 2.6.5最常见的宿主系统。这里有个比较容易踩的坑Hadoop 2.6.5官方文档明确指出支持Java 7和Java 8但实测下来JDK 1.8.0_141之后的部分版本在启动时偶尔会出现Unrecognized VM option的报错原因是Hadoop脚本里设置了CMSClassUnloadingEnabled这类JVM参数新版JDK的Unified Logging机制对其不再兼容。稳妥做法是安装JDK 1.8.0_111或相近的早期8u版本并配置JAVA_HOME。还有一个多数教程没提到的点检查机器的/lib64/libc.so.6对应的glibc版本。我之前在一台最小化安装的CentOS 7.5上遇到过hadoop-daemon.sh启动后进程立刻消失dmesg里显示unable to execute ... No such file or directory排查半天发现是glibc版本过低导致native库加载失败。解决办法是安装glibc-devel和zlib-devel确保系统库完整。2.2 用户创建、SSH免密与目录结构规范生产环境部署Hadoop绝不建议用root用户直接跑这是很多初学者容易忽视的安全习惯。root运行HDFS会在文件权限、安全审计上留下巨大隐患而且一旦分布式集群扩到多台机器root权限的误操作会直接毁掉整个集群。规范做法是创建一个独立用户下面我用hadoop用户作为示例useradd hadoop passwd hadoop然后是SSH免密配置。伪分布式模式下需要设置本机localhost免密登录完全分布式则需要配置Master到所有Slave的免密。如果跳过了这一步start-dfs.sh在执行过程中会反复提示输入密码而且很多教程不会告诉你ssh-rsa密钥默认算法在高版本OpenSSH8.8以上里默认关闭了需要手动在客户端的~/.ssh/config里启用# /etc/ssh/ssh_config 或 ~/.ssh/config Host * PubkeyAcceptedAlgorithms ssh-rsasu - hadoop ssh-keygen -t rsa -P -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys ssh localhost目录规划上我习惯单独创建数据目录把程序目录与数据目录分离mkdir -p /opt/hadoop mkdir -p /data/hdfs/name mkdir -p /data/hdfs/data mkdir -p /data/hdfs/tmp chown -R hadoop:hadoop /opt/hadoop /data这样做的直接好处是以后升级Hadoop版本或者格式化NameNode时不需要动数据目录避免误删物理数据。很多在线教程直接把数据目录写到/tmp或安装目录下的默认路径这在重启后或升级时非常容易出问题。3. 核心配置详解与选型理由3.1 五个XML文件与两个env文件Hadoop 2.6.5的配置集中在$HADOOP_HOME/etc/hadoop目录下核心文件就那几个。先别急着改先理解每个文件的作用后面排查问题会非常省力。hadoop-env.sh定义JAVA_HOME、HADOOP_HOME、NameNode/DataNode的JVM堆大小core-site.xml文件系统通用配置最关键的是fs.defaultFShdfs-site.xmlHDFS专属配置决定副本数、NameNode数据目录、DataNode数据目录mapred-site.xmlMapReduce计算框架配置该文件默认不存在需要从mapred-site.xml.template复制yarn-site.xmlYARN资源调度配置还有一个关键细节2.6.5版本的bin/hdfs和bin/yarn脚本会读取$HADOOP_CONF_DIR或$HADOOP_HOME/etc/hadoop下的配置。如果直接修改了文件但没有export HADOOP_CONF_DIR某些工具比如后来安装的Hive、Spark可能读到不同路径下的配置造成客户端与集群配置不一致的诡异问题。建议在~/.bashrc中明确所有环境变量。export JAVA_HOME/usr/local/jdk1.8.0_111 export HADOOP_HOME/opt/hadoop/hadoop-2.6.5 export HADOOP_CONF_DIR$HADOOP_HOME/etc/hadoop export PATH$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin3.2 伪分布式配置实例伪分布式的特点是所有守护进程跑在同一台机器上但配置必须按分布式的方式写这样日后切换成多机集群只需改动少量IP和hostname。以我常用的最小化配置为例!-- core-site.xml -- configuration property namefs.defaultFS/name valuehdfs://hadoop-master:9000/value /property property namehadoop.tmp.dir/name value/data/hdfs/tmp/value /property /configuration要注意的是hadoop.tmp.dir这个属性它决定NameNode和DataNode默认的存储根目录。如果不在hdfs-site.xml里显式指定dfs.namenode.name.dir和dfs.datanode.data.dirHadoop就会把元数据和数据块写在hadoop.tmp.dir下。我之前因为没显式指定格式化后一切正常但有一次清理/tmp目录时把整个文件系统的元数据全删了才痛定思痛改成显式路径。!-- hdfs-site.xml -- configuration property namedfs.namenode.name.dir/name valuefile:///data/hdfs/name/value /property property namedfs.datanode.data.dir/name valuefile:///data/hdfs/data/value /property property namedfs.replication/name value1/value /property property namedfs.namenode.secondary.http-address/name valuehadoop-master:50090/value /property /configuration伪分布式下副本数必须为1否则DataNode只有一台却要写三副本会一直报块复制不足。这里也顺便说下SecondaryNameNode它不是NameNode的备份节点而是定期合并edits日志和fsimage的辅助节点。2.6.5里假如不配置dfs.namenode.secondary.http-address启动时不会报错但会生成一堆warning日志第一次看的人容易慌。cp mapred-site.xml.template mapred-site.xml!-- mapred-site.xml -- configuration property namemapreduce.framework.name/name valueyarn/value /property /configuration!-- yarn-site.xml -- configuration property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value /property /configurationyarn.nodemanager.aux-services如果不设置MapReduce任务运行时会报错ShuffleHandler does not exist或者java.io.IOException: Server shut down。这个配置的含义是告诉NodeManager要加载MapReduce ShuffleHandler服务来处理中间结果的混洗传输。3.3 完全分布式扩展要点如果手上有3台机器配置差异点在core-site.xml和hdfs-site.xml的URL地址换成真正的主机名DataNode的配置不用改因为slaves文件2.6.5版本里叫slaves从3.x才改成workers指定了从节点列表。还有一点每台机器必须使用相同的配置文件和目录结构最后用rsync推送比手动复制更可靠。rsync -avzP /opt/hadoop/hadoop-2.6.5/etc/hadoop/ hadoop-node1:/opt/hadoop/hadoop-2.6.5/etc/hadoop/完全分布式下/etc/hosts必须准确配置IP和主机名的映射且各节点时间需要同步。把时钟同步这一步省掉后续跑MapReduce时会遇到Container启动时间戳错乱任务一直处于ACCEPTED状态的问题。4. 启动流程与Web UI验证4.1 格式化NameNode最容易犯的错配置完成后第一件要命的事是格式化NameNode。hdfs namenode -format格式化操作会初始化fsimage文件生成一个唯一的clusterID。这个过程只允许在首次启动前执行一次。如果后续修改了配置后反复执行HDFS会陷入clusterID不一致的状态NameNode的clusterID与DataNode上报的clusterID对不上DataNode会一直尝试注册但始终被拒绝从Web UI上看DataNode列表始终为空。因此如果确实需要重新格式化务必将/data/hdfs/name和/data/hdfs/data两个目录全部清空两边重来否则就是自找麻烦。我在排查DataNode没有上报这类问题时十有八九都是clusterID冲突。4.2 启动与验证命令启动顺序有讲究先HDFS再YARN。start-dfs.sh start-yarn.sh启动完成后用jps命令检查进程。伪分布式下应看到NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager五个进程少一个都不正常。然后通过Web UI验证NameNode管理界面http://hadoop-master:50070ResourceManager界面http://hadoop-master:808850070端口在2.6.5里能看到文件系统浏览、启动时间、块池状态等。这里有个细节如果你用root用户执行start-dfs.sh启动时脚本会提示ERROR: Attempting to operate on hdfs namenode as root这是2.6.5特意加的启动校验禁止root直接管理HDFS进程。解决办法就是前面说的用普通用户hadoop来跑或者临时修改start-dfs.sh里对用户名的检查极不推荐。另外启动日志的位置也要烂熟于心。日志目录默认在$HADOOP_HOME/logs每次启动后重点看这几个文件hadoop-hadoop-namenode- .loghadoop-hadoop-datanode- .logyarn-hadoop-resourcemanager- .log启动失败时第一个排查点永远是这几个日志而不是去网上搜错误码。4.3 HDFS基本操作与上传下载验证集群起来后先用命令行验证HDFS是否真的可用hdfs dfs -mkdir -p /user/hadoop/data hdfs dfs -put /tmp/test.txt /user/hadoop/data/ hdfs dfs -ls -R /user/hadoop/data hdfs dfs -cat /user/hadoop/data/test.txt关于java中对hadoop上传文件和下载就是对hdfs操作吗这个热搜问题答案是肯定的。HDFS的FileSystem API将本地文件写入远程路径时本质上就是客户端与NameNode通信获取数据块位置再与DataNode建立流式传输。Java代码里常用FileSystem.copyFromLocalFile、open和create等API完成上传下载底层走的是DataTransferProtocol。对2.6.5来说客户端依赖hadoop-common、hadoop-hdfs、hadoop-client这几个jar包用Maven坐标dependency groupIdorg.apache.hadoop/groupId artifactIdhadoop-client/artifactId version2.6.5/version /dependency5. 与ZooKeeper整合实战5.1 为什么要整合单NameNode是HDFS的单点故障所在。2.6.5引入的HDFS HA方案靠的是ZooKeeper完成Active/Standby NameNode的自动故障切换。ZooKeeper在这里干三件事维护NameNode的主备状态通过临时节点感知Active NameNode是否存活协调JournalNode上的编辑日志共享这就是hadoop和zookeeper整合实战这个热搜词背后的需求。整合后一个NameNode挂掉Standby节点能在几十秒内自动升主整个过程客户端无感知元数据服务不中断。5.2 部署要点与配置示例ZooKeeper安装本身不复杂解压、配zoo.cfg、启动即可。关键是Hadoop端的配置切换。!-- core-site.xml HA模式下追加 -- property nameha.zookeeper.quorum/name valuezk-node1:2181,zk-node2:2181,zk-node3:2181/value /property!-- hdfs-site.xml HA模式下追加 -- property namedfs.nameservices/name valuemycluster/value /property property namedfs.ha.namenodes.mycluster/name valuenn1,nn2/value /property property namedfs.namenode.rpc-address.mycluster.nn1/name valuehadoop-master1:8020/value /property property namedfs.namenode.rpc-address.mycluster.nn2/name valuehadoop-master2:8020/value /property然后需要在ZooKeeper中初始化HA状态hdfs zkfc -formatZK这个命令在NameNode上执行一次会在ZooKeeper中创建/hadoop-ha/mycluster节点。如果不执行之后启动zkfcZooKeeper Failover Controller时会报节点不存在或权限错误。整个过程比较繁琐但一旦配置好NameNode的可用性会大幅提升。6. 常见问题与排查技巧实录6.1 日志里的高频坑把我在部署2.6.5过程中实际遇到的问题和解决思路整理成表方便各位对照排查故障现象根本原因排查与解决DataNode进程启动后自动退出clusterID不一致清空name和data目录后重新格式化50070端口无法访问防火墙未放行systemctl stop firewalld 或开放50070/8088/8020端口NameNode启动报NameNode is not formatted没执行格式化hdfs namenode -format运行MapReduce报Container exited with code 1内存配置不足调低yarn.nodemanager.resource.memory-mb和yarn.scheduler.maximum-allocation-mb日志报UnknownHostException: hadoop-masterhosts未配置检查/etc/hosts和/etc/hostname磁盘空间不足引发DataNode shutdownblock回收失败清理磁盘并增大dfs.datanode.du.reserved上传文件报could only be written to 0 of 1 replicas副本数设置错误伪分布式确认dfs.replication16.2 几条独家经验从实际踩坑中总结几个通用经验。第一排查任何Hadoop问题前先确认时间同步。多节点环境下时间差异超过一定阈值HDFS就会因为租约问题报出各种莫名其妙的状态错误。第二2.6.5里的hdfs dfs命令与hadoop fs命令都可用但hadoop fs在后续版本中被逐步淘汰建议直接养成写hdfs dfs的习惯。第三千万别在生产环境随意修改dfs.datanode.max.transfer.threads这个参数默认值是4096调大了在高并发下反而容易触发文件描述符耗尽。另外关于Docker镜像里运行Hadoop的热搜我的建议是2.6.5这类老版本在容器里跑要注意进程的PID 1问题和数据卷挂载。Hadoop的start-dfs.sh脚本会显式使用kill命令结束进程这和Docker容器的信号处理机制有冲突。解决方式是用docker exec进入容器手动逐台启动start-dfs.sh也可但如果容器仅在启动时运行一次命令则可能失去后台守护能力数据目录必须挂volume否则容器重建后数据全丢。我在一个课程设计项目里就用docker-compose拉起了一个伪分布式Hadoop 2.6.5对外映射50070和8088端口学生浏览器直接访问宿主机IP就能看到界面体验还算顺畅。6.3 conda环境与tar.gz的异同顺带提一个conda 环境tar.gz创建环境的热搜词。很多人在学Hadoop时还接触了Python虚拟环境conda的conda create --name myenv生成的环境本质上是一个目录导出时可以用conda pack打包成tar.gz这和Hadoop的tar.gz发行版有异曲同工之处。区别在于conda tar.gz更多是为了离线迁移Python环境而Hadoop的tar.gz是官方发布的完整发行版打开即用。两者思路都是目录即环境理解这一点对操作系统的软件管理会有更深的体会。7. 写在最后的实操心得安装Hadoop 2.6.5这个tar.gz包整个过程下来其实能学到很多东西。每次看到报错时试着先打开对应组件的日志文件从Exception的堆栈里顺藤摸瓜比直接复制错误码去搜索引擎碰运气要高效得多。分布式系统的调试思路和单机软件完全不同要求你同时具备全局视角和分层排查的耐心。个人经验是把配置文件彻底理解透、把目录规划清晰、把日志位置烂熟于心比多敲几遍命令更有价值。等到真正需要搭建三节点、五节点集群时你会发现伪分布式阶段打下的基础全部能用上。Hadoop 2.6.5虽然不再是社区活跃版本但作为理解大数据技术栈的入门基石它的价值还会持续很久。本文还有配套的精品资源点击获取
返回列表