概论ios
Hadoop是Apache下的开源项目算法
HDFS 分布式文件系统,负责存储数据,数据分散存储数据库
管理节点,存储元数据(文件对应的数据块位置、文件大小、文件权限等信息)编程
同时负责读写调度和存储分配服务器
数据存储节点,每一个数据块会根据设置的副本数进行分级复制,保证同一个文件的每一个数据块副本都在不一样机器上网络
离线计算(非实时计算)架构
分布式计算(多台运算加速)运维
多台机器同时读取这个文件内容的一个部分分布式
将Map阶段输出结果整合输出函数
解决Hadoop扩展性
支持CPU和内存两种资源管理
资源管理由ResourceManager(RM)、ApplicationMaster(AM)和NodeManager(NM)完成
RM负责对各个NM上的资源进行统一管理和调度
NM负责对资源供给和隔离
当用户提交一个应用程序时,会建立一个用以跟踪和管理这个程序的AM,它负责向RM申请资源,并要求NM启动指定资源的任务。这就是YARN的基本运行机制。
Yarn 做为一个通用的分布式资源管理器,它能够管理多种计算模型,如 Spark、Storm、MapReduce 、Flink 等均可以放到 Yarn 下进行统一管理。
Spark 提供了内存中的分布式计算能力,相比传统的MapReduce 大数据分析效率更高、运行速度更快。总结一句话:之内存换效率。
传统的MapReduce 计算过程的每个操做步骤发生在内存中,但产生的中间结果会储存在磁盘里,下一步操做时又会将这个中间结果调用到内存中,如此循环,直到分析任务最终完成。这就会产生读取成本,形成效率低下。
而Spark 在执行分析任务中,每一个步骤也是发生在内存之中,但中间结果会直接进入下一个步骤,直到全部步骤完成以后才会将最终结果写入磁盘。也就是说Spark 任务在执行过程当中,中间结果不会“落地”,这就节省了大量的时间。
少许数据看不出来效率差异
基于面向列存储(又叫非关系型数据库、NoSQL)基于HDFS
实现了数据便是索引。所以,它的最大优势是查询速度快,这对数据完整性要求不高的大数据处理领域,好比互联网
Hbase继承了列存储的特性,它很是适合需对数据进行随机读、写操做、好比每秒对PB级数据进行几千次读、写访问是很是简单的操做。其次,Hbase构建在HDFS之上,其内部管理的文件所有存储在HDFS中。这使它具备高度容错性和可扩展性,并支持Hadoop mapreduce程序设计模型。
大数据适用于列存储
Hive 定义了一种相似SQL 的查询语言(HQL),它能够将SQL 转化为MapReduce 任务在Hadoop 上执行。这样,小李就能够用更简单、更直观的语言去写程序了。
针对多个工做查询脚本任务调度
Oozie 是一个基于工做流引擎的调度器,它其实就是一个运行在Java Servlet 容器(如Tomcat)中的Javas Web 应用,你能够在它上面运行Hadoop 的Map Reduce 和Pig 等任务。
对于Oozie 来讲,工做流就是一系列的操做(如Hadoop 的MR,Pig 的任务、Shell 任务等),经过Oozie 能够实现多个任务的依赖性。也就是说,一个操做的输入依赖于前一个任务的输出,只有前一个操做彻底完成后,才能开始第二个。
Oozie 工做流经过hPDL 定义(hPDL 是一种XML 的流程定义语言),工做流操做经过远程系统启动任务。当任务完成后,远程系统会进行回调来通知任务已经结束,而后再开始下一个操做。
把原来存储在MySQL 中的数据导入Hadoop 的HDFS 上,是否能实现呢?这固然能够,经过Sqoop(SQL-to-Hadoop)就能实现,它主要用于传统数据库和Hadoop 之间传输数据。数据的导入和导出本质上是MapreDuce 程序,充分利用了MR 的并行化和容错性。
经过Hive 能够把脚本和SQL 语言翻译成MapReduce 程序,扔给计算引擎去计算。Pig 与Hive 相似,它定义了一种数据流语言,即Pig Latin,它是MapReduce 编程的复杂性的抽象,Pig Latin 能够完成排序、过滤、求和、关联等操做,支持自定义函数。Pig 自动把Pig Latin 映射为MapReduce 做业,上传到集群运行,减小用户编写Java 程序的苦恼。
在Hadoop 平台,咱们主要使用的是经过Flume 将数据从源服务器写入Hadoop 的HDFS 上。
相似生产者、消费者问题
能够实时的处理大量数据以知足各类需求场景:好比基于 Hadoop 平台的数据分析、低时延的实时系统、Storm/Spark 流式处理引擎等。
双机热备架构来讲,双机热备主要用来解决单点故障问题,传统的方式是采用一个备用节点,这个备用节点按期向主节点发送ping 包,主节点收到ping 包之后向备用节点发送回复信息,当备用节点收到回复的时候就会认为当前主节点运行正常,让它继续提供服务。而当主节点故障时,备用节点就没法收到回复信息了,此时,备用节点就认为主节点宕机,而后接替它成为新的主节点继续提供服务。
这种传统解决单点故障的方法,虽然在必定程度上解决了问题,可是有一个隐患,就是网络问题,可能会存在这样一种状况:主节点并无出现故障,只是在回复响应的时候网络发生了故障,这样备用节点就没法收到回复,那么它就会认为主节点出现了故障;接着,备用节点将接管主节点的服务,并成为新的主节点,此时,集群系统中就出现了两个主节点(双Master 节点)的状况,双Master 节点的出现,会致使集群系统的服务发生混乱。这样的话,整个集群系统将变得不可用,为了防止出现这种状况,就须要引入ZooKeeper 来解决这种问题。
ZooKeeper 是如何来解决这个问题的呢,这里以配置两个节点为例,假定它们是“节点A”和“节点B”,当两个节点都启动后,它们都会向ZooKeeper 中注册节点信息。咱们假设“节点A”锁注册的节点信息是“master00001”,“节点B”注册的节点信息是“master00002”,注册完之后会进行选举,选举有多种算法,这里以编号最小做为选举算法,那么编号最小的节点将在选举中获胜并得到锁成为主节点,也就是“节点A”将会得到锁成为主节点,而后“节点B”将被阻塞成为一个备用节点。这样,经过这种方式ZooKeeper 就完成了对两个Master 进程的调度。完成了主、备节点的分配和协做。
若是“节点A”发生了故障,这时候它在ZooKeeper 所注册的节点信息会被自动删除,而ZooKeeper 会自动感知节点的变化,发现“节点A”故障后,会再次发出选举,这时候“节点B”将在选举中获胜,替代“节点A”成为新的主节点,这样就完成了主、被节点的从新选举。
若是“节点A”恢复了,它会再次向ZooKeeper 注册自身的节点信息,只不过这时候它注册的节点信息将会变成“master00003”,而不是原来的信息。ZooKeeper 会感知节点的变化再次发动选举,这时候“节点B”在选举中会再次获胜继续担任“主节点”,“节点A”会担任备用节点。
通俗的讲,ZooKeeper至关于一个和事佬的角色,若是两人之间发生了一些矛盾或者冲突,没法自行解决的话,这个时候就须要ZooKeeper 这个和事佬从中进行调解,而和事佬调解的方式是站在第三方客观的角度,根据一些规则(如道德规则、法律规则),客观的对冲突双方作出合理、合规的判决。
Ambari 是一个大数据基础运维平台,它实现了Hadoop 生态圈各类组件的自动化部署、服务管理和监控告警,Ambari 经过puppet 实现自动化安装和配置,经过Ganglia 收集监控度量指标,用Nagios 实现故障报警。目前Ambari 已支持大多数Hadoop 组件,包括HDFS、MapReduce、Oozie、Hive、Pig、Hbase、ZooKeeper、Sqoop、Kafka、Spark、Druid、Storm 等几十个经常使用的Hadoop 组件。
做为大数据运维人员,经过Ambari 能够实现统一部署、统一管理、统一监控,可极大提升运维工做效率。