第一章: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)。发行版选哪个,看你的场景和预算。下一章咱们动手搭集群,我会把踩过的坑一个一个讲给你们听。