一、Hadoop生态
二、基础组件之HDFS
1、不适合存储小文件,因为小文件太多会造成namenode节点的压力;
2、一个文件是由至少一个block组成,每个block默认备份三份;我们公司集群部署默认三个block部署在不同的机架,这样有一个机架挂掉,数据仍然可读。
3、目前集群总数据量超过100PB
4、文件写入是append的方式,不能修改某一行
5、适用场景
- 一次写入多次读取
- 大文件
6、访问方式
- Java
- Shell
- cmd
- mount:挂载的方式,挂载后像访问本地盘
- WebHDFS
- 提供接口访问HDFS,好处是不用安装hadoop环境
三、基础组件之YARN
1、作用
- 集群资源管理:通过linux container进行资源隔离,目前只支持内存、CPU两个的资源隔离,network,disk IO还没有支持,后续会支持
- 任务调度:队列(概念在这里)
2、框架介绍
2.1、角色
Resource Manager:管理整个集群的资源调度
Node Maneger:管理本机的资源情况,会告知Resource Manager本机还有多少空闲CPU,还有多少空闲内存
App Master:负责管理每个作业,每个作业内部会分成多个Container,这些Container由App Master统一调度。App Master在运行作业的时候会统一向Resource Manager请求资源。
2.2、总结
总体分成两层调度
机器资源层面调度:Resource Manager和Node Maneger
作业内部资源调度:App Master
2.3、任务调度基于队列的,这个搜一下,基于min-max公平策略
2.4、Yarn支持的计算引擎
MapReduce、Flink,Spark,Storm(很少用了,兼容性和扩展性都不好)
四、数据处理之MapReduce
1、两类
- 批处理
- 处理对象:批量数据,一般是文件或数据库中的数据
- 计算工具:MapReduce/Spark Batches
- 流处理
- 处理对象:数据量,连续达到的无限数据序列
- Flink、Spark Streaming
2、MapReduce
- TB级别数据的并行处理
- 离线计算
- 工作方式
- 切分,将输入文件进行切分成多份,每份叫split,每个split对应一个map任务。
- 注意:切分的意思并不是真的把文件切分开,而是通过标记的方式,如文件有100行,分成10个任务,第一个任务运行0~10行,第二个任务运行11~20行,等等
- split默认是按行分隔。
- 输出成key value结构
- shuffling:默认根据上面输出的key进行hash,这样的话,同一个hash值(即相同key)就会映射到同一个文件,确保同一个key被同一个reduce处理,保障统计准确。
- Reducing:reduce将以上文件拉取到本地进行统计,存储
- 切分,将输入文件进行切分成多份,每份叫split,每个split对应一个map任务。
- 延时
- 由于涉及多次IO,因此计算时间也和文件大小有关
- 一般都是分钟级别甚至是小时级别
MapReduce工作流程:
五、数据处理之Spark
1、介绍
基于内存计算的大数据处理框架。对标的是MapReduce,但是性能要比MapReduce快很多(快10~100倍)
2、优点
- 通用性:丰富的操作,满足不同的大数据处理
- 易用性:简洁的编程接口,快速上手。如实现个功能,Spark需要写较少的代码。
- 集成:支持Hadoop,Mesos,K8s
3、缺点
- 数据量不能太大,最多上百G,因为很多数据需要load到内存
六、数据处理之Flink
1、介绍
实时计算框架,对每条数据即时处理,毫秒级别延迟。相对应的,Spark Streaming流处理其实是微批次处理,2秒或5秒钟处理一次等,所以Spark Streaming实时性要差一些。
2、
七、SQL on Hadoop
1、介绍
Hadoop生态圈数据库主要分成两类,一类是基于SQL的关系型数据库,一类是基于key value的nosql数据库
2、基于SQL
3、nosql
七、数据分析之
参考: