资讯详情

大数据入门学习顺序:Hadoop、Hive、Spark、Flink等九大组件最小链路搭建指南

📅 2026/9/24 0:40:04 | 华诺云谱 👁 阅读
大数据入门学习顺序:Hadoop、Hive、Spark、Flink等九大组件最小链路搭建指南
简介这是一份面向大数据初学者与转行开发者的系统入门资料包围绕Hadoop、Hive、Spark、Storm、Flink、HBase、Kafka、Zookeeper、Flume等主流组件展开覆盖学习路线、技术栈思维导图、常用软件安装指南以及环境搭建、命令实操、集群资源管理、分区、视图与数据查询等核心知识点帮助读者从零建立完整的大数据知识体系。资源共629个文件以380张png截图、101个md笔记、69个java源码、25个xml配置、24张jpg图示及8个scala脚本为主另含properties、json、parquet、orc、csv等配置与样例数据文件压缩包约20.75MB目录结构清晰便于按模块检索学习。目前已有155人学习下载。读者可借助图文笔记与可运行代码快速完成各组件环境部署理解集群管理与查询逻辑并通过示例数据与工具类代码加深对HDFS、HBase等操作的掌握适合作为入门阶段的实操参考与查漏补缺手册。1. 从一堆装不上的组件说起大数据入门到底该按什么顺序啃很多人第一次打开 Hadoop 官网看到 Hadoop、Hive、Spark、Storm、Flink、HBase、Kafka、Zookeeper、Flume 这九个名字排在一起第一反应是「我是不是得全学」。我当年也是这么想的结果在伪分布式上卡了三天NameNode 起不来DataNode 一个都不注册最后发现是/etc/hosts里主机名对不上。这套技术栈不是九个独立工具而是一条从存储、计算、消息到协调的完整链路HDFS 管存储YARN 管资源Zookeeper 管协调Kafka 管消息Flume 管采集Hive 管数仓查询Spark 和 Flink 管批流计算HBase 管随机读写Storm 是早期流计算的代表。入门的关键不是全装一遍而是先跑通一条最小链路再按需扩展。这篇笔记面向的是想从零搭起一套能跑通的大数据环境、并且知道每个组件在链路里干什么的工程师不是给已经调优多年的人看的。2. 先跑通一条最小链路Hadoop 伪分布式 Zookeeper Hive 的落地顺序2.1 为什么入门第一步是 Hadoop 伪分布式而不是集群标题里九个组件真正的地基只有两个HDFS 和 YARN。Hive 的 SQL 最终要落到 HDFS 上的文件Spark 和 Flink 的作业要跑在 YARN 上HBase 的底层存储也依赖 HDFS。所以第一步一定是把 Hadoop 跑起来。生产集群搭建涉及多台机器、SSH 免密、时间同步、机架感知入门阶段没必要一上来就搞。伪分布式在一台机器上模拟 NameNode、DataNode、ResourceManager、NodeManager 全部角色能覆盖 90% 的入门验证场景。常见做法是下载 Hadoop 二进制包解压配四个文件core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml。下面是我一般会用的最小配置以 Hadoop 3.x 为例路径按自己实际解压位置改。# 假设解压在 /opt/hadoopJDK 已装好 export HADOOP_HOME/opt/hadoop export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 export PATH$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin!-- core-site.xml指定 HDFS 的默认文件系统地址 -- configuration property namefs.defaultFS/name valuehdfs://localhost:9000/value /property property namehadoop.tmp.dir/name value/opt/hadoop/data/tmp/value /property /configuration!-- hdfs-site.xml伪分布式副本数必须设为 1否则会一直报副本不足 -- configuration property namedfs.replication/name value1/value /property property namedfs.namenode.name.dir/name value/opt/hadoop/data/namenode/value /property property namedfs.datanode.data.dir/name value/opt/hadoop/data/datanode/value /property /configuration!-- mapred-site.xml告诉 MapReduce 用 YARN 跑 -- configuration property namemapreduce.framework.name/name valueyarn/value /property /configuration!-- yarn-site.xmlNodeManager 的辅助服务必须带上 mapreduce_shuffle -- configuration property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value /property /configuration配完之后格式化并启动hdfs namenode -format start-dfs.sh start-yarn.sh jps # 应该看到 NameNode、DataNode、ResourceManager、NodeManager、SecondaryNameNode参数说明fs.defaultFS里的端口 9000 是 NameNode RPC 端口和 Web UI 的 9870 不是一回事很多人第一次访问localhost:9000打不开网页就是搞混了。dfs.replication在伪分布式下必须为 1因为只有一个 DataNode设成 3 会一直处于副本不足状态。hadoop.tmp.dir建议显式指定默认在/tmp下机器重启可能被清掉导致元数据丢失这是血泪经验。2.2 Zookeeper 在这条链路里到底管什么热词里「hadoop和zookeeper整合实战」出现频率很高但入门阶段容易误解Hadoop 本身不依赖 Zookeeper。真正依赖 Zookeeper 的是 HBase、Kafka以及 Hadoop HA 模式下的自动故障转移。伪分布式阶段装 Zookeeper目的是为后面上 HBase 和 Kafka 做准备同时理解「分布式协调」这件事。Zookeeper 的最小配置是conf/zoo.cfgtickTime2000 dataDir/opt/zookeeper/data clientPort2181启动zkServer.sh start然后用zkCli.sh连上去ls /能看到 znode 就说明通了。Zookeeper 的核心概念是 znode 和 watchHBase 用它选 MasterKafka 用它管 broker 注册和分区 leader 选举。入门阶段不用深究 ZAB 协议但要记住一点Zookeeper 集群数量必须是奇数3 台能容忍 1 台挂5 台能容忍 2 台挂这是选型时的硬约束。2.3 Hive 装完连不上元数据库的排查顺序Hive 本身不存数据它是一层 SQL 到 MapReduce/Spark 的翻译元数据存在关系型数据库里。入门最常用的是内嵌 Derby但 Derby 不支持多会话稍微正式一点就换 MySQL。安装步骤是解压 Hive配hive-site.xml指向 MySQL把 MySQL 驱动 jar 放到lib下然后schematool -initSchema -dbType mysql初始化。!-- hive-site.xml 关键几项 -- configuration property namejavax.jdo.option.ConnectionURL/name valuejdbc:mysql://localhost:3306/hive?createDatabaseIfNotExisttrue/value /property property namejavax.jdo.option.ConnectionDriverName/name valuecom.mysql.cj.jdbc.Driver/value /property property namejavax.jdo.option.ConnectionUserName/name valuehive/value /property property namejavax.jdo.option.ConnectionPassword/name valuehive/value /property /configuration初始化成功后hive进命令行show databases;能出结果就算通了。这里最常见的翻车是 MySQL 时区和驱动版本MySQL 8 的驱动类名是com.mysql.cj.jdbc.Driver不是老的com.mysql.jdbc.Driver连接串不加serverTimezone可能报时区错误。Hive 的hive.metastore.uris如果配了远程 metastore还要先起hive --service metastore否则客户端连不上。3. 计算引擎怎么选Spark、Flink、Storm 的边界与最小跑通3.1 Spark 集群搭建与内存参数的第一课热词里「spark集群搭建」「spark内存」「spark sql 日期加减」都指向同一个事实Spark 是入门大数据计算绕不开的一环。Spark 的核心抽象是 RDD 和 DataFrame跑在 YARN 上时资源由 ResourceManager 分配。最小验证方式是spark-shell或pyspark起来跑个 word count。# pyspark 最小词频统计验证 Spark 环境是否可用 from pyspark.sql import SparkSession spark SparkSession.builder \ .appName(wordcount) \ .master(local[*]) \ .getOrCreate() df spark.read.text(/opt/data/input.txt) counts df.selectExpr(explode(split(value, )) as word) \ .groupBy(word).count() counts.show() spark.stop()参数说明master(local[*])表示本地用所有核跑提交到 YARN 时改成--master yarn --deploy-mode cluster。Spark 内存模型分 driver 和 executor 两块spark.executor.memory控制每个 executor 的堆内存spark.executor.cores控制核数。新手最容易犯的错是把 executor 内存设得很大但核数也很大导致每个核分到的内存很少频繁 GC。经验值是每个核 2 到 4 GB 内存比较稳。spark.sql里日期加减用date_add、date_sub或date_add(col, n)不要用字符串拼接否则分区裁剪会失效。3.2 Flink 从安装到第一个 DataStream 作业「flink 安装配置到部署」「flink 实时计算 - 词频统计初体验」是入门 Flink 的标准路径。Flink 和 Spark 最大的区别是流批一体、以流为核心。装 Flink 就是解压、配flink-conf.yaml里的jobmanager.rpc.address和taskmanager.numberOfTaskSlots然后start-cluster.shWeb UI 默认 8081。// Flink DataStream 词频统计socket 输入 StreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment(); DataStreamString text env.socketTextStream(localhost, 9999); DataStreamTuple2String, Integer counts text .flatMap((String line, CollectorTuple2String, Integer out) - { for (String word : line.split( )) { out.collect(new Tuple2(word, 1)); } }) .returns(Types.TUPLE(Types.STRING, Types.INTEGER)) .keyBy(value - value.f0) .sum(1); counts.print(); env.execute(Socket WordCount);参数说明numberOfTaskSlots决定一个 TaskManager 能跑多少个并行子任务本地入门设成 CPU 核数即可。keyBy之后的状态默认存在 TaskManager 堆内存里生产环境要换成 RocksDB 状态后端。Flink 的 checkpoint 间隔通过env.enableCheckpointing(5000)开启这是保证 exactly-once 的基础入门阶段可以先不开但要知道它的存在。3.3 Storm 还要不要学一个诚实的判断Storm 是早期流计算的代表Trident 提供了微批处理能力。但现在新项目基本不会选 StormFlink 在吞吐、状态管理、exactly-once 语义上都更成熟。入门阶段了解 Storm 的 Topology、Spout、Bolt 三个概念就够了不必花大力气搭集群。如果课程设计或面试题里出现 Storm重点答清楚它和 Flink 的差异Storm 是纯流、record 级、早期 at-least-onceFlink 是流批一体、有状态、支持 exactly-once。把时间花在 Flink 上回报更高。4. 存储与消息HBase、Kafka、Flume 在链路里的位置4.1 HBase 依赖 Zookeeper 和 HDFS 的启动顺序HBase 适合随机读写、稀疏列、海量行的场景底层数据存 HDFS集群元数据存 Zookeeper。启动顺序必须是 HDFS 先起Zookeeper 再起最后start-hbase.sh。hbase-site.xml里hbase.rootdir指向 HDFS 路径hbase.cluster.distributed设 truehbase.zookeeper.quorum填 Zookeeper 地址。configuration property namehbase.rootdir/name valuehdfs://localhost:9000/hbase/value /property property namehbase.cluster.distributed/name valuetrue/value /property property namehbase.zookeeper.quorum/name valuelocalhost/value /property /configuration进hbase shell后create test, cf、put、get、scan走一遍理解 rowkey 设计的重要性。HBase 的 rowkey 是唯一索引热点问题几乎都出在 rowkey 单调递增上常见解法是加盐或哈希前缀。4.2 Kafka 与 Flume数据怎么进、怎么出Kafka 是分布式消息队列核心概念是 topic、partition、offset、consumer group。入门装单机 Kafka 要先起 Zookeeper新版 Kafka 可以用 KRaft 模式免 Zookeeper但入门还是先理解 Zookeeper 模式。server.properties里broker.id、listeners、log.dirs、zookeeper.connect四项配好即可。# 创建 topic3 分区 1 副本 kafka-topics.sh --create --topic test --bootstrap-server localhost:9092 \ --partitions 3 --replication-factor 1 # 生产 kafka-console-producer.sh --topic test --bootstrap-server localhost:9092 # 消费 kafka-console-consumer.sh --topic test --bootstrap-server localhost:9092 --from-beginningFlume 是采集 agent核心是 source、channel、sink 三段式。典型场景是 spooldir source 监控日志目录memory channel 缓冲kafka sink 写到 Kafka。flume-conf.properties里 agent 名字、source 类型、channel 类型、sink 类型都要对上一个字母错就起不来。5. 避坑与排查入门阶段最容易翻车的五件事5.1 现象NameNode 启动后 DataNode 不注册原因多次hdfs namenode -format导致 clusterID 不一致或者dfs.datanode.data.dir里的 current 目录残留旧 clusterID。解决停掉所有进程删掉 namenode 和 datanode 的 data 目录重新 format 一次之后不要再重复 format。这是新手最高频的翻车点。5.2 现象Hive 建表成功但查不到数据原因Hive 表指向的 HDFS 路径下文件格式和建表时指定的STORED AS不一致或者分区没MSCK REPAIR TABLE。解决先desc formatted table_name看 Location再去 HDFS 上ls确认文件存在且格式匹配分区表手动加分区后要修复元数据。5.3 现象Flink sink 到 Hive 表数据不入表热词里「flink sink hive表 数据不入表」很典型。原因通常是 checkpoint 没开或没触发Flink 写 Hive 依赖 checkpoint 提交分区或者 Hive 表的分区字段和 Flink 写入的分区字段对不上。解决确认env.enableCheckpointing已开且间隔合理检查 Hive 表分区字段顺序必要时用flink cdc pipeline那套思路先确认上游变更能正常捕获。5.4 现象Spark 作业报内存溢出原因executor 内存不足或数据倾斜导致单个 task 处理数据量过大。解决先看 Spark UI 的 stage 和 task 耗时定位是不是某个 key 数据量特别大调大spark.executor.memory和spark.sql.shuffle.partitions数据倾斜用加盐或两阶段聚合。5.5 现象Kafka 消费者收不到消息原因consumer group 的 offset 已经提交过--from-beginning只在没有提交 offset 时生效或者 topic 分区 leader 不可用。解决换一个新 group id 消费或用kafka-consumer-groups.sh --describe看 lag 和 offset 位置。6. 从能跑到好用一条可验证的进阶路径入门跑通之后下一步不是继续堆组件而是把一条链路做扎实。我的习惯是选一个具体场景比如「网约车订单实时统计」把 Flume 采集日志、Kafka 缓冲、Flink 消费计算、结果写 Hive 或 HBase、Spark 做离线补算这条链路串起来。这条链路能覆盖标题里九个组件中的七个剩下的 Storm 和 Zookeeper 作为对比和协调组件理解即可。验证方法上我一般会做三件事。第一用jps和 Web UI 确认每个组件的进程和端口状态HDFS 9870、YARN 8088、Flink 8081、HBase 16010、Kafka 9092端口对不上先查配置。第二用一个小数据集跑端到端比如造 1000 行日志从 Flume 进 KafkaFlink 算完写 Hive最后select count(*)对得上原始行数。第三故意制造一次故障比如 kill 掉一个 TaskManager看 Flink 能不能从 checkpoint 恢复这比看十篇教程都管用。参数层面进阶阶段要开始关注几个关键值HDFS 的dfs.blocksize默认 128MB小文件多的时候要合并YARN 的yarn.nodemanager.resource.memory-mb决定单节点能给容器多少内存Flink 的state.backend和execution.checkpointing.interval决定容错能力Kafka 的num.partitions决定并行度上限分区数一旦定了很难改。这些参数没有万能值要根据数据量和机器配置调但知道它们在哪、管什么比背默认值重要得多。我自己踩过最深的坑是过早追求集群规模三台机器还没跑稳就想着加机器结果配置漂移、版本不一致、时间不同步全来了。后来我养成一个习惯任何组件先在单机跑通最小闭环再考虑分布式。这个习惯帮我省了至少两周的排查时间。希望帮到你。本文还有配套的精品资源点击获取
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。