第一章:Hadoop生态全景
各位同学,咱们今天聊聊Hadoop生态的全景。说实话,我刚开始接触大数据那会儿,Hadoop还是个刚起步的框架。现在呢?它已经长成一个庞大的生态体系了。这一章,我带大家把整个地图先看一遍。
1.1 大数据时代背景
为什么会有Hadoop?说白了,就是传统数据库扛不住了。
我2012年在一家电商公司做运维,那时候每天几百万的日志,MySQL已经跑得气喘吁吁。老板说「能不能把用户行为全存下来?」我算了算,一天几十GB,一年下来几十TB。传统存储?贵得离谱。
大数据有四个特征,圈内叫4V:
- Volume(海量):数据量从GB级涨到PB级。我见过最大的集群,单日新增数据量超过500TB。
- Velocity(高速):数据产生速度极快。你想想看,双十一那天的订单流,每秒几万笔。
- Variety(多样):结构化、半结构化、非结构化数据混在一起。日志、图片、视频、传感器数据……
- Value(价值):数据密度低,但挖出来就是金子。
核心观点:大数据不是「数据大」,而是「用低成本解决大规模数据的存储和计算问题」。Hadoop就是干这个的。
1.2 Hadoop核心组件
Hadoop有三个核心组件,我习惯把它们比作一个工厂:
- HDFS:仓库,负责存东西
- YARN:调度中心,负责分配资源
- MapReduce:流水线工人,负责干活
1.2.1 HDFS(分布式文件系统)
HDFS的设计理念很简单:把大文件切成小块,分散存到多台机器上。
我记得有一次,客户问「为什么HDFS存小文件性能差?」嗯,这里要注意:HDFS的元数据存在NameNode内存里。一个文件块大概占150字节。如果你存1亿个小文件,光元数据就要15GB内存。所以,小文件是HDFS的天敌。
HDFS架构要点:
- NameNode:管理元数据,是集群的大脑。它挂了,整个集群就瞎了。
- DataNode:存实际数据,默认每个块3副本。
- Secondary NameNode:不是备胎!它只做checkpoint,合并编辑日志。
避坑指南:我曾经遇到过NameNode内存配置不足导致集群频繁GC。建议每100万个文件块至少分配1GB堆内存。别省这点资源,否则有你哭的。
1.2.2 YARN(资源调度器)
YARN是Hadoop 2.x引入的。它把资源管理和作业调度分开了。
YARN有两个核心角色:
- ResourceManager(RM):全局资源调度,管着所有NodeManager。
- NodeManager(NM):每台机器上的代理,管理本机资源。
你想想看,如果没有YARN,每个计算框架都要自己管资源,那不乱套了?YARN就像一个酒店前台,谁要房间(资源)都得找它登记。
调度策略有三种主流选择:
| 调度器 | 特点 | 适用场景 |
|---|---|---|
| FIFO Scheduler | 先进先出,简单粗暴 | 单用户、小集群 |
| Capacity Scheduler | 按队列分配资源,保证隔离 | 多租户、生产环境 |
| Fair Scheduler | 公平共享,动态调整 | 资源竞争激烈场景 |
注意:生产环境千万别用FIFO。我见过有人图省事用FIFO,结果一个大任务把整个集群堵死,其他任务等了几小时。血的教训。
1.2.3 MapReduce(计算模型)
MapReduce分两步:Map(映射)和Reduce(归约)。
举个例子:统计一亿条日志中每个IP出现的次数。
- Map阶段:每台机器读自己存的数据,输出 (IP, 1) 这样的键值对。
- Shuffle阶段:系统自动把相同IP的数据分到同一台机器。
- Reduce阶段:每台机器把收到的1加起来,输出最终结果。
代码示例(伪代码):
// Map函数
map(String key, String value):
// key: 行号, value: 日志行
ip = extractIP(value)
emit(ip, 1)
// Reduce函数
reduce(String key, Iterator values):
// key: IP地址, values: [1,1,1,...]
sum = 0
for each v in values:
sum += v
emit(key, sum)
说实话,MapReduce现在用得少了。为什么?因为太慢。每次计算都要读写磁盘,中间结果还要落盘。但它的思想影响了Spark、Flink这些后来者。学MapReduce,学的是分治思想。
1.3 发行版选择
选哪个发行版?这个问题我每年都被问几十次。
1.3.1 Apache Hadoop(原生版)
优点:免费、最新、无厂商锁定。
缺点:啥都要自己配。安全、监控、管理工具全得自己搭。
适合谁?想深入学原理的、有专业运维团队的、对成本敏感的公司。
1.3.2 CDH(Cloudera Distribution)
Cloudera是Hadoop生态的老大哥。CDH的特点是:
- 集成度高:HDFS、Hive、HBase、Spark等都打包好了
- 管理方便:Cloudera Manager图形化界面
- 稳定性好:经过大量企业验证
不过,CDH从6.3.3之后就不再开源了。现在叫CDP,要收费。
1.3.3 HDP(Hortonworks Data Platform)
HDP被Cloudera收购了。它以前是纯开源路线,Ambari做管理界面。
我个人觉得Ambari比Cloudera Manager轻量,但功能也少一些。HDP在SQL on Hadoop方面做得不错,Hive、Phoenix这些组件优化得挺好。
1.3.4 怎么选?
我给大家一个参考:
| 场景 | 推荐发行版 | 理由 |
|---|---|---|
| 学习实验 | Apache Hadoop | 自己动手,理解最深 |
| 中小企业生产 | CDH(旧版)或HDP | 稳定、有管理工具 |
| 大企业、合规要求高 | CDP(商业版) | 安全、审计、SLA保障 |
| 云原生 | EMR/Dataproc | 弹性伸缩、免运维 |
我的建议:如果你刚开始学,用Apache Hadoop搭个3节点集群。别一上来就上CDH,那玩意儿太自动化了,学不到底层原理。等你把HDFS的配置、YARN的调优都摸透了,再考虑用发行版提升效率。
好了,第一章就到这里。Hadoop生态全景图,说白了就是三件事:存(HDFS)、算(MapReduce)、管(YARN)。发行版选哪个,看你的场景和预算。下一章咱们动手搭集群,我会把踩过的坑一个一个讲给你们听。