大数据理论知识
1、数据收集工具: Flume 、Logstash、Kibana等
2、数据存储:
- 传统关系型数据库(MySQL、Oracle):快速存储结构化的数据,并支持随机访问。
- 分布式文件系统( Hadoop HDFS 、KFS、GFS):支持结构化、半结构和非结构化数据的存储,并可以通过增加机器进行横向扩展。
分布式文件系统不擅长对数据进行随机访问,因此可以使用HBase,MongoDB兼顾分布式文件系统和关系型数据库的优点。
半结构化:日志数据
非结构化:视频、音频数据
3、数据分析
- 批处理:对一段时间内海量的离线数据进行统一的处理,对应的处理框架有Hadoop、MapReduce、Spark、Flink 等;
- 流处理:对运动中的数据进行处理,即在接收数据的同时就对其进行处理,对应的处理框架有Storm、Spark Streaming、Flink Streaming 等。
(为了能够让熟悉 SQL 的人员也能够进行数据的分析,查询分析框架应运而生,常用的有 Hive 、Spark SQL 、Flink SQL、Pig、Phoenix 等)
4、其他框架
- Ambari、Cloudera Manager 等为集群管理工具,方便进行集群的部署,监控和管理
- ZooKeeper 是最常用的分布式协调服务,它能够解决大多数集群问题。针对集群资源管理的需求,又衍生了 Hadoop YARN
- Azkaban 和 Oozie 等工作流调度框架调度作业
- Kafka是大数据流处理使用较多的框架
- Sqoop框架 ,主要是解决了数据迁移的问题,它能够通过简单的命令将关系型数据库中的数据导入到 HDFS 、Hive 或 HBase 中,或者从 HDFS 、Hive 导出到关系型数据库上
总结:
- 日志收集框架:Flume 、Logstash、Kibana
- 分布式文件存储系统:Hadoop HDFS
- 数据库系统:Mongodb、HBase
分布式计算框架:
批处理框架:Hadoop MapReduce 流处理框架:Storm 混合处理框架:Spark、Flink
- 查询分析框架:Hive 、Spark SQL 、Flink SQL、 Pig、Phoenix
- 集群资源管理器:Hadoop YARN
- 分布式协调服务:Zookeeper
- 数据迁移工具:Sqoop
- 任务调度框架:Azkaban、Oozie
- 集群部署和监控:Ambari、Cloudera Manager
一、hadoop
- Hadoop是由三部分组成:HDFS:分布式文件系统(存储);
- MapReduce:分布式离线计算框架(计算);
- Yarn:资源调度框架
1、 分布式文件存储系统 HDFS
1.1 HDFS设计原理
HDFS架构
HDFS遵循主/从架构,由单个NameNode(NN)和多个DataNode(DN)组成
- NameNode:负责执行有关“文件系统命名空间”的操作,例如打开,关闭,重命名文件和目录等。同时负责集群元数据的存储,记录文件中各个数据块的位置信息。
- DataNode:负责提供来自文件系统客户端的读写请求,执行块的创建,删除等操作。
数据复制
为了保证容错性,HDFS提供了数据复制机制。HDFS将每个文件存储为一系列块,每个块由多个副本保证容错,块的大小和复制因子可以自行配置。(默认块大小128M,复制因子是3)
原则:就近减少网络开销,不允许同一个 dataNode 上具有同一个块的多个副本。
如果复制因子大于3,则随机确定第4个和之后副本的放置位置,同时保持每个机架的副本数量低于上限,上限值为(复制系数-1)/机架数量+2
副本选择
优先读取距离读取器最近的副本,如果与读取器结点相同的机架上存在副本,优先选择该副本,如果HDFS集群跨越多个数据中心,优先选择本地数据中心上的副本。
架构稳定性
- 心跳机制和重新复制:每个DataNode定期发送心跳信息给NameNode,若规定时间内没有发送,NameNode将该DataNode标记为死亡,不再使用上面的数据。由于数据不再使用,可能导致某些块的复制因子小于指定值,NameNode会跟踪这些块,在必要时候进行重新复制。
- 数据完整性:客户端创建HDFS文件时,计算文件每个块的校验和
- 元数据的磁盘故障:可以配置 NameNode 使其支持 FsImage 和 EditLog 多副本同步
- 支持快照
HDFS特点
- 高容错
- 高吞吐量
- 大文件支持
- 简单一致性模型:HDFS 更适合于一次写入多次读取 的访问模型。支持将内容追加到文件末尾,但不支持数据的随机访问,不能从文件任意位置新增数据。
- 跨平台移植性
2、分布式计算框架 MapReduce
用于编写批处理应用程序,编写好的程序可以提交到Hadoop集群上用于并行处理大规模的数据集
以词频统计为例:
- input:读取文本文件
- splitting:按行拆分,K1为行数,V1为对应行的文本
- mapping:每行按空格拆分,得到List(K2,V2),K2为每个单词,V2为出现次数
- shuffling:Mapping操作可能在不同机器上并行处理,所以需要通过shuffling将相同key值的数据分发到同一个节点上合并,此时K2为每个单词,List(V2)为可迭代集合
- Reducing:对List(V2)进行归约求和操作,最终输出
MapReduce 编程模型中 splitting 和 shuffing 操作都是由框架实现的,需要我们自己编程实现的只有 mapping 和 reducing ,这也就是 MapReduce 这个称呼的来源。
3、集群资源管理器 YARN
用户可以将各种服务框架部署在 YARN 上,由 YARN 进行统一地管理和资源分配。