大数据理论知识

微信图片_20230224124514.png

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集群上用于并行处理大规模的数据集

以词频统计为例:
微信图片_20230225010410.png

  • 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 进行统一地管理和资源分配。

4、Hadoop 单机伪集群环境搭建

5、Hadoop 集群环境搭建

6、HDFS 常用 Shell 命令

7、HDFS Java API 的使用

8、基于 Zookeeper 搭建 Hadoop 高可用集群

二、Hive

三、Spark

四、Strom

五、Flink

六、HBase

七、Kafka

八、Zookeeper

九、Flume

十、Sqoop

十一、Azkaban

十二、Scala

最后编辑:2023年02月24日 ©著作权归作者所有