一、Hadoop简介
A.什么是Hadoop
1.Hadoop是一个开源分布式计算平台,以HDFS(Hadoop Distributed Filesystem,Hadoop分布式文件系统)和MapReduce为核心,为用户提供了系统底层细节透明的分布式基础架构
2.使用HDFS分布式存储方式,提高了读写速度,扩大了存储容量,采用MapReduce来整合分布式文件系统上的数据,可以保证分析和处理数据的高效,还采用存储冗余数据的方式保证了数据的安全性;HDFS的高容错特性,使得Hadoop可以部署在低廉的计算机集群中,同时不限于某个操作系统
3.Hadoop优势:高可靠性、高扩展性、高效性、高容错性
B.Hadoop项目及其结构
1.Core/Common,是为Hadoop其他子项目提供支持的常用工具,包括FileSystem、RPC和串行化库
2.Avro,用于数据序列化的系统
3.MapReduce,是一种编程模型,用于大规模数据集(大于1TB)的并行去处
4.HDFS,分布式文件系统
5.Chukwa,开源的数据收集系统,用于监控和分析大型分布式系统的数据
6.Hive,是一个建立在Hadoop基础之上的数据仓库,提供了一些用于数据整理、特殊查询和分析存储在Hadoop文件中的数据集工具
7.HBase,分布式的、面向列的开源数据库
8.Pig,是一个对大型数据集进行分析和评估的平台
C.Hadoop的体系结构
1.HDFS采用了主从(Master/Slave)结构模型,一个集群由一个NameNode和若干个DataNode组成
2.MapReduce是由一个单独运行在主节点上的JobTracker和运行在每个集群从节点上的TaskTracker共同组成
D.Hadoop与分布式开发
1.Hadoop是分布式软件系统中文件系统这一层的软件,实现了分布式文件系统和部分分布式数据库的功能
2.MapReduce编辑模型的原理是:利用一个输入的key/value对集合来产生一个输出的key/value对集合,三个主要函数:map、reduce、main
E.Hadoop计算模型——MapReduce
1.一个MapReduce作业(job)通常会把输入的数据集切分为若干个独立的数据块,由map任务(task)以完全并行 的方式处理它们
F.Hadoop的数据管理
1.HDFS三个重要的组件:NameNode、DataNode、Client,Client是需要获取分布式文件系统文件的应用程序
2.HBase在分布式集群上主要领先由HRegion、HMaster、HClient组成的体系结构从整体上管理数据
3.Hive是建立在Hadoop上的数据仓库基础架构,它提供了一系列的工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制
二、Hadoop的安装与配置
1.hadoop-3.0.0-alpha3,默认locahost:9870和localhost:50090
三、Hadoop应用案例分析
1.大规模的数据处理经常分为三个不同的任务:数据收集、数据准备和数据表示
四、MapReduce计算模型
A.MapReduce计算模型
1.在Hadoop中,用于执行MapReduce任务的机器角色:一个是JobTracker,用于调度工作,一个集群中只有一台;另一个是TaskTracker,用于执行工作;
2.JobTracker调度任务给TaskTracker,TaskTracker执行任务时,会返回进度报告。JobTracker则会记录进度的进行状况,如果某个TaskTracker上的任务执行失败,那么JobTracker会把这个任务分配给另一台TaskTracker,直到任务执行完成
B.Hadoop流
1.Hadoop流提供了一个API,允许用户使用任何脚本语言编写map函数或reduce函数,使用UNIX标准流作为程序与Hadoop之间的接口
2.Hadoop Pipes提供了一个在Hadoop上运行C++程序的方法,pipes使用的是Sockets
五、开发MapReduce应用程序
1.Hadoop自带的网络用户界面:http://xxx:50030
2.性能调优:
3.MapReduce工作流
六、MapReduce引用案例
七、MapReduce工作机制
A.MapReduce作业的执行流程
1.MapReduce任务的执行总流程:代码编写->作业配置->作业提交->Map任务的分配和执行->处理中间结果->Reduce任务的分配和执行->作业完成,每个任务又包括输入准备->任务执行->输出结果
2.4个独立实体:
B.错误处理机制
1.在集群中,任何时候都只有唯一一个JobTracker,所以JobTracker故障就是单点故障,一般是创建多个备用JobTracker节点
2.TaskTracker故障很正常,会由MapReduce处理
C.作业调度机制
1.Hadoop默认FIFO调度器,还提供了支持多用户服务和集群资源公平共享的调度器,即公平调度器(Fair Scheduler Guide)和容量调度器(Capacity Scheduler Guide)
2.shuffle过程包含在map和reduce两端中,map端是对map的结果进行划分、排序和分割,然后将属于同一个划分的输出合并在一起;reduce端又会将各个map送来的属于同一个划分 的输出进行合并,然后对合并结果进行排序,最后交给reduce处理
D.任务执行
1.推测式执行,指当作业的所有任务都开始运行时,JobTracker会统计所有任务的平均进度,如果某个任务所在的TaskTracker节点由于配置比较低或CPU负载过高,导致任务执行的速度比总体任务的平均速度慢,此时JobTracker就会启动一个新的备份任务,原有任务和新任务哪个先执行完就把另一个kill掉,缺点是对于代码缺陷导致的问题,备份并不能解决
2.任务JVM重用、跳过坏记录
八、Hadoop I/O操作
1.Hadoop采用CRC-32(Cyclic Redundancy Check,循环冗余校验,其中的32指生成 的校验和是32位的)的方式检查数据完整性
2.Hadoop使用RPC来实现进程间通信,使用Writables序列化机制
九、HDFS详解
A.HDFS简介
1.特点:处理超大文件;流式访问数据;运行于廉价的商用机器集群上;
2.局限性:不适合低延迟数据访问;无法高效存储大量小文件;不支持多用户写入及任意修改文件
B.HDFS体系结构
1.HDFS分布式文件系统中的文件也被划分成块进行存储,它是文件存储处理的单元,默认块为64MB
2.NameNode就是Master管理集群中的执行调度,DataNode就是Worker具体任务的执行节点
3.一个HDFS集群是由一个NameNode和一定数目的DataNodes组成的,一个文件其实被分成了一个或多个数据块,这些块存储在一组DataNode上
十、Hadoop的管理
1.监控工具:Metrics、Ganglia
2.备份工具:distcp
3.Hadoop管理命令:dfsadmin,获取HDFS的状态信息;fsck,检测文件块
十一、Hive详解
1.Hive是一个基于Hadoop文件系统上的数据仓库架构,它为数据仓库提供了许多功能:数据ETL(抽取、转换和加载)工具、数据存储管理和大型数据集的查询与分析能力,同时Hive还定义了类SQL语言——Hive QL
2.Hive中主要包含四类数据模型:表(Table)、外部表(External Table)、分区(Partition)、桶(Bucket)
十二、HBase详解
A.HBase简介
1.特点:向下提供了存储,向上提供了运算
B.HBase的基本操作
1.单机模式可以直接运行,分布式模式需要Hadoop
C.HBase体系结构
1.HBase的服务器体系结构遵从简单的主从服务器架构,由HRegion服务器群和HBase Master服务器构成。HBase Master服务器负责管理所有的HRegion服务器,而HBase中所有的服务器都是通过ZooKeeper来进行协调,并处理HBase服务器运行期间可能遇到的错误的。HBase Master Server本身并不存储HBase中的任何数据,HBase逻辑上的表可能会被划分成多个HRegion,然后存储到HRegion Server群中。HBase Master Server中存储的是从数据到HRegion Server的映射
D.HBase数据模型
1.HBase是一个类似Bigtable的分布式数据库,它是一个稀疏的长期存储的(存在硬盘上)、多维度的、排序的映射表。这张表的索引是行关键字、列关键字和时间戳。HBase中的数据都是字符串,没有类型
2.列名字的格式是“<family>:<qualifier>”,都是由字符串组成的,每一张表有一个一列族(family)集合,这个集合是固定不变的,只能通过改变表结构来改变;写操作是锁行的;所有数据库更新都有一个时间戳标记,每个更新都是一个新的版本,HBase会保留一定数量的版本
E.HBase与RDBMS
1.只有简单的字符串类型
2.只有很简单的插入、查询、删除、清空等操作,表和表之间是分离的,没有复杂的表间关系
3.是基于列存储的,每个列族都由几个文件保存
4.更新操作会保留旧版本,不是传统关系数据库里的替换修改
5.能够轻易地增加或减少硬件数量,对错误兼容性高
6.适应海量存储和互联网应用的需要,利用廉价的硬件设备组建数据仓库,原本就是作为一个搜索引擎的一部分开发出来的
十三、Mahout详解
A.Mahout简介
1.Apache Mahout的主要目标是建立可伸缩的机器学习算法,这种可伸缩性是针对大规模的数据集而言的
B.Mahout中的聚类和分类
1.Mahout中三种向量:稠密向量(DenseVector)、随机访问向量(RandomAccessSparseVector)和序列访问向量(SequentialAccessSparseVector)
十四、Pig详解
A.Pig简介
1.Pig包括用来描述数据分析程序的高级程序语言,以及对这些程序进行评估的基础结构。突出的特点就是它的结构经得起大量并行 任务,使得它能够对大规模数据集进行处理
2.Pig使用Pig Latin语言,类似SQL,偏重查询
十五、Zookeeper详解
A.ZooKeeper简介
1.ZooKeeper是一个为分布式应用所设计的开源协调服务,可以为用户提供同步、配置管理、分组和命名等服务
2.设计目标:
B.ZooKeeper的Leader选举
1.ZooKeeper需要在所有的服务(可以理解为服务器)中选举出一个Leader,然后让这个Leader来负责管理集群,其他为Follower。当Leader出现故障时,ZooKeeper要能够快速地在Follower中选举出下一个Leader,这就是ZooKeeper的Leader机制
C.ZooKeeper锁服务
1.在ZooKeeper中,完全分布的锁是全局同步的,也就是说,在同一时刻,不会有两个不同的客户端认为他们持有了相同的锁
E.典型应用场景(网上找的)
1.统一命名服务
2.配置管理:配置信息完全可以交给 Zookeeper 来管理,将配置信息保存在 Zookeeper 的某个目录节点中,然后将所有需要修改的应用机器监控配置信息的状态,一旦配置信息发生变化,每台应用机器就会收到 Zookeeper 的通知,然后从 Zookeeper 获取新的配置信息应用到系统中
3.集群管理:实现方式都是在 Zookeeper 上创建一个 EPHEMERAL 类型的目录节点,然后每个 Server 在它们创建目录节点的父目录节点上调用 getChildren(String path, boolean watch) 方法并设置 watch 为 true,由于是 EPHEMERAL 目录节点,当创建它的 Server 死去,这个目录节点也随之被删除,所以 Children 将会变化,这时 getChildren上的 Watch 将会被调用,所以其它 Server 就知道已经有某台 Server 死去了。新增 Server 也是同样的原理
4.共享锁
5.队列管理
十六、Avro详解
A.Avro简介
1.Avro是一个数据序列化的系统,可以将数据结构或对象转化成便于存储或传输的格式,特别是设计之初它可以用来支持数据密集型应用,适合于大规模数据的存储和交换
2.Avro模式是用JSON定义的,提供与Thrift和Protocol Buffers等系统相似的功能
十七、Chukwa详解
A.Chukwa简介
1.Chukwa能通过扩展处理大量的客户端请求,并且能汇聚多路客户端的数据流,采用的是流水式数据处理方式和模块化结构的收集系统,在每一个模块中有一个简单规范的接口
B.Chukwa架构
1.有三个主要组成部分:
客户端(Agent):使内部进程通信协议能够兼容处理本地的日志文件
收集器(Collector)和分离器(Demux):利用了Collectors策略
HICC(Hadoop Infrastructure Care Center):数据可视化页面
十八、Hadoop的常用插件与开发
1.Hadoop Studio
2.Hadoop Eclipse
3.Hadoop Streaming:帮助用户创建和运行一类特殊的MapReduce作业,这些作业由一些可执行文件或脚本文件充当mapper或reducer,也就是允许使用非Java语言
4.Hadoop Libhdfs:是一个基于C编程接口的为Hadoop分布式文件系统开发的JNI,提供了一个C语言接口以结合管理DFS文件和文件系统
https://github.com/zhangyue0503/bigdata/tree/master/hadoopshizhan