大数据总结路线梳理

01

并发工具包复习重点

  1. 阻塞队列 ArrayBlockingQueue,LinkedBlockQueue。
  2. ConcurrentHashMap 和HashTable对比。线程安全,性能高。
    老版本引入分段锁(桶)机制(16)。
    新版本引入CAS(无锁算法 Compare And Swap)+链表变为红黑树。
  3. CountDownLatch 线程递减锁(闭锁)。
  4. 线程池ThreadPool。小池子大队列,大池子小队列的应用场景。
  5. RetreenLock重入锁。底层支持公平锁和非公平锁机制。
  6. 原子性类型,AtomicInteger,AtomicDouble,AtomicBoolean。

zookeeper复习重点

  1. 了解Zookeeper的应用场景。
    • 集群管理,比如集群中某台服务器宕机了,能够知道。

在这里插入图片描述
客户端启动时向zookeeper注册自己的临时节点。当此客户端宕机后,则对应的临时节点删除。zookeeper监听节点被删除的事件,从而获知服务器的状态变化。
综上,Zookeeper是通过:临时节点+监听机制来管理集群

  1. 做一的命名服务
    需要确保命名的唯一性。所以可以利用zookeeper的路径唯一性来实现这个需求。
    比如服务器1:/server/01
    服务器2:/server/02
  2. 协调服务通知
    在这里插入图片描述
  3. 实现分布式锁服务

在这里插入图片描述
通过顺序节点,判断最先抢注的服务器,从而分配浆糊。
如果要褥现公平锁机制:根据顺序饕的大小分配。
如果要实现非公平锁机制:重新抢注。

  1. 提供信息的发布和订阅
    监听节点数据发生变化的事件。
    在这里插入图片描述
  • 综上,Zookeeper可以提供很多中心服务,套路是:各类型节点+监听
    在这里插入图片描述

Zookeeper的节点类型

  • create /park
    普通持久节点
  • create -e /park
    临时节点
  • create -s /park
    顺序节点
  • create -e -s /park
    临时顺序节点

复习Zookeeper的选举机制

Zxid 最大事务id
选举id
过半选举。

  1. 分布式数据 一致性及相关的算法
  • 2PC 算法 二阶段提交协议算法
  • 3PC 算法 三阶段提交协议算法
  • Paxos 算法 过半性算法,当时Google一篇论文用到了该算法。
    Zookeeper就是借鉴了这篇论文做的开源实现。

02

Zookeeper重点

  • ZAB协议,Zookeeper Atomic Broadcast,原子广播协议。

    • 实现分布式数据一致性
    • 支持崩溃恢复
      Leader收到事务请求后,会为些事务分配一个全局递增的事务id。
      Leader将事务写入到本地的事务log里
      Leader将事务发给各个Folloower
      Follower收到事务之后,执行事务。(执行事务,指的是将事务写入到本地事务log里,如果写入成功,表示事务执行成功,如果写入失败,执行事务失败)
      Leader收集反馈的信息,如果满足过半,就发起提交事务的指令。(提交事务,指的是将事务引起的变更在内存中更新(客户端是从Zookeeper的内存中获取数据))
      挂Follower再次启动时,会找自己所拥有的最大事务id,并发送给Leader。
      Leader收到后,确定事务同步点。并创建对应的事务队列,将事务放到队列汇总。
      Follower做事务恢复,在恢复未完成之前,是不提供读服务,避免脏读情况。
  • Zookeeper是通过何种机制防止脑裂?
    脑裂指的是一个集群中出现多个Leader,造成事务同步的紊乱。
    Zookeeper通过EpochId机制来防止脑裂。即每当选举产生一个新Leader,EpochI都会递增+1.Follower只接收EpochId最大的Leader发来的事务。

Hadoop

Hadoop的优势:廉价,高效。

推荐的书籍

  1. zookeeper:<从Paxos到Zookeeper:分布式一致性原理与实践> 看第4章
  2. hdfs<深度剖析Hadoop HDFS>看第一章
  3. yarn<Hadoop技术内幕:深入解析YARN架构设计与实现原理>看第2章

MapReduce重要组件

  • Mapper组件
  • Reducer组件
  • Partitioner组件(Hadoop默认用的是HashPartitioner,会按Mapper输出key的Hash分区,从而确保相同的Mapper输 出key落到同一个分区里)分区指的是ReduceTask

在这里插入图片描述

  • Combiner组件(先在Map端合并后再发给ReduceTask)
    作用:
    1. 减少reduceTask的合并负载
    2. 减少网络数据传输,节省带宽
  • InputFormat组件。更改Mapper的输入Key,输入value
  • OutputFormat组件。更改输出到结果文件的格式。

MapTask和ReduceTask的任务数量

  1. MapTask数量=Job的文件切片数(文件切片不是文件切块)
    文件切片=InputSplit,属于逻辑切块,通过对象来描述,包含path start length
    所以文件切片中没有文件数据
    文件切t块=当把文件上传到HDFS时,会被物理切块,存到DataNode上。
  2. ReduceTask数量,和切片没有关系,默认就1个。通过代码进行设定(job.setNumReduceTasks(3))
  3. MapReduce的排序
    MR会对Mapper的输出排序,具体如何排序,取决于Mapper输出key类型里的compare方法
  4. MRjob执行流程
    • 在领取Maptask时,满足数据本地化策略。避免通过网络传输数据,节省带宽。
  5. MapReduce Shuffle过程 (重点)
  6. MapReduce的Join,可能会引起数据倾斜,如何解决。
    在这里插入图片描述
    上图演示的是reduce-side-join。这种join方式可能引起数据倾斜。
    所以,可以采用map-side-join来实现
    在这里插入图片描述
    上图演示的是map-side-join的思想,将小表数据加载到每个MapTask缓存中,然后在MapTask完成Join。可以避免产生数据倾斜。
  7. Yarn(重点)
    在这里插入图片描述

Yarn的三种高度器

  • FIFO调度器(先来先服务调度器):优先将集群的全部资源运行第一个来的job1。待job1运行完之后,再运行job2。
    应用场景:当遇到一个优先级很高的job,想快速完成,可以使用此调度器。
  • Fair调度器(公平调度器)
    集群只运行一个job1,此时用的内存:16GB
    如果再次提交一个job2,此时这两个job用的内存:8GB
    依次类推,会根据job的任务平均分配资源。
  • Capacity调度器(容器调度器,默认的)
    引入Container概念封装资源。

在这里插入图片描述

MapReduce如何处理小文件

在这里插入图片描述

  1. 开启JVM重用机制
  2. 将多个切片合成一个切片或少量切片
    job.setInputFormatClass(CombineTextInputFormat.class);
    默认合成切片的大小是128MB
    在这里插入图片描述

Flume

核心组件

  1. Source

    • Avro(重要且常用)
    • Http
    • NetCat
    • SpoolDir(本地目录数据源)
    • Exec
  2. Channel

    • Memory
    • File
    • Jdbc
    • 内存溢出通道
  3. Sink

    • Hdfs
    • Logger
    • Avro
    • Kafka
    • File_roll Sink
    • HiveSink
  4. Interceptors(拦截器,绑定在source上)

    • TimeStamp
    • Host
    • Static
    • UUID
    • Regex_replace
  5. Selector

    • replicating复制模式(模式)
    • multiplexing路由模式
  6. Process

    • 失败恢复
    • 负载均衡

数据仓库的概念

  • OLTP 在线联机事务系统(数据库)
  • OLAP 在线联机分析系统(数据仓库)
    在这里插入图片描述
  • ETL(Extract-Transform-load) 数据提取、转换、加载
  • Hive的表类型:
    • 内部表,外部表
    • 内部表和外部表都可以是分区表。
    • 分区相关指令。创建分区表partitioned by。为一个表添加分区信息 add partition。删除分区 drop partition。修改分区 rename to。
      在这里插入图片描述
    • 分桶表

HIVE

  1. Hive常用的字符串操作函数
    在这里插入图片描述
  2. UDF
  3. Hive的各种join操作
    left semi join
  4. Hive如何解决数据倾斜问题
  • group by 分组操作可能会产生数据倾斜.比如word count 单词上次统计案例.解决思想,将一个MRJob拆解成两个Job.ob做随机分区.第二个Job做最终的分组统计 set hive.groupby .skewindata=true
  • join 连接操作可能会产生数据倾斜.解决思想:小表-大表做joim->利用map side join,把小表写在左边.大表-大表join->利用分桶表
  • count 全局计数可能会产生数据倾斜.解决思想:set hive.groupby.skewindata=true
  1. HIVE调优
  2. Sqoop
  3. HIVE JDBC
  4. HIVE 体系结构
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yasuofenglei/article/details/101026195