1 预备知识--Hadoop简介
Hadoop是Apache的一个开源的分布式计算平台,以HDFS分布式文件系统和MapReduce分布式计算
框架为核心,为用户提供了一套底层透明的分布式基础设施
Hadoop框架中最核心设计就是:HDFS和MapReduce。 HDFS提供了海量数据的存储,MapReduce提供了对数据的计算。
Hadoop框架中最核心的设计就是: HDFS 和MapReduce
--HDFS是Hadoop分布式文件系统,具有高容错性、高伸缩性,允许用户基于廉价硬件部署,构建分布式存储系统,为分布式计算存储提供了底层支持
--MapReduce提供简单的API,允许用户在丌了解底层细节的情况下,开发分布式幵行程序,利用大规模集群资
源,解决传统单机无法解决的大数据处理问题
--设计思想起源于Google GFS、 MapReduce Paper
Hadoop的优势
弹性可扩展
--通过简单增加集群节点,线性扩展集群存储和计算资源
容错高健壮
--故障检测和自动回复,允许通用硬件失效而不影响整个集群可用性
成本低廉
--采用廉价通用硬件部署,无需高端设备
简单易用
--API简单,允许用户不了解底层情况下,写出高效的分布式计算程序
Hadoop核心项目
HDFS: Hadoop Distributed File System 分布式文件系统
MapReduce:幵行计算框架
文件切分
eg,block size = 64MB
文件由数据块集合组成
假设每块大小为 64MB
每个数据块在本地文件系统中是以单独的文件进行存储
eg, 复制因子 = 3
默认布局规则:
第一份拷贝写入创建文件的节点 (快速写入)
第二份拷贝写入同一个rack内的节点(减少跨rack的网络流量)
第三份拷贝写入位于不同rack的节点(应对交换机故障)
Hadoop1.0 架构解析之HDFS
HDFS分布式文件系统:
NameNode:
维护整个文件系统的文件目录树,文件目录的元信息和文件数据块索引
以FsImage和EditLog形式存储在本地
整个系统的单点,存在SPOF
SecondaryNameNode:
又名CheckPoint Node,定期合幵FsImage和EditLog
不接收客户端的请求,作为NameNode的冷备
DataNode:
实际存储数据的单元
以Block为单位
数据以普通文件形式保存在本地文件系统
Client:
与HDFS交互,进行读写、创建目录,创建文件、复制、删除等操作
HDFS提供了多种客户端:命令行Shell,Java API,Thrift接口,C library,WebHDFS等
HDFS容错机制
故障类型:
磁盘错误和故障
DataNode故障 :数据块自动复制到剩余的节点以保证满足复制因子,namenode侦测datanode故障
交换机/机架故障
NameNode故障 :备用namenode,冷备
数据中心故障
HDFS水平扩展与再平衡
添加datanode,namenode节点侦测到新的datanode加入集群内,数据块再均衡和在分发。
Hadoop1.0 架构解析之MapReduce
MapReduce分布式计算框架:
JobTracker:
负责集群资源监控和作业调度
通过心跳监控所有TaskTracker的健康状况
监控Job的运行情况、执行进度、资源使用,交由任务调度器负责资源分配
任务调度器可插拔:FIFO Scheduler、 Capacity Scheduler、 FIFO Scheduler
TaskTracker:
具体执行Task的单元
以slot为单位等量划分本节点的资源,分为Map Slot和Reduce Slot
通过心跳周期性向JobTracker汇报本节点的资源使用情况和任务运行进度
接收JobTracker的命令执行相应的操作(启动新任务、杀死任务等)
Client:
提交用户编写的程序到集群
查看Job运行状态
Hadoop2.0 架构
Hadoop2.0 架构解析之HDFS 2.0
HDFS 1.0的问题:
--NameNode SPOF,NameNode挂掉整个集群不可用
--内存受限,整个集群的size受限于NameNode的内存空间大小
HDFS 2.0:
--引入NameNode HA,Active/Standby NameNode,支持Auto-Failover
--引入HDFS Federation,支持多个NameNode,每个NameNode只负责一部分目录,多个NameNode协作达到水平扩展
NameNode HA
Active NameNode对外提供服务,Standby NameNode同步Active NameNode的元数据,以待切换
所有DataNode同时向两个NameNode汇报数据块信息
元数据信息存储在共享存储中,可选
--JournalNode(推荐):奇数个,基于Paxos协议
--NFS
支持auto failover和manual failover:
--auto-failover:基于ZooKeeper,zkfc监测NameNode的健康状况,并向ZooKeeper注册。
当NameNode挂掉时,进行锁竞争,获得锁的NameNode转换为Active NameNode
--manual failover:手工切换,适用于NameNode升级
HDFS Federation
--使用多个独立的namespace,每个DataNode要向集群中所有的NameNode注册,
且周期性地向所有NameNode发送心跳和块报告,并执行来自所有NameNode的命令
--一个block pool由属于同一个namespace的数据块组成,每个datanode可能会存储集群中所有block pool的数据块
优点:水平扩展,隔离
Hadoop2.0 架构解析之YARN
Yet Another Resource Negotiator
核心思想:
--将mrv1中JobTracker的资源管理和任务调度两个功能分开,分别由ResourceManager和ApplicationMaster进程实现
--ResourceManager:负责整个集群的资源管理和调度
--ApplicationMaster:负责应用程序相关的事务,比如任务调度,任务监控和容错
--NodeManager:每个节点的资源和任务管理器,定期向RM汇报本节点的资源使用情况和Container运行情况,接收和处理AM的请求(如启动和杀死Container)
--Container:资源划分的最小单位,动态的,由应用程序指定
双层调度的思想,使得多种计算框架能够共享一个集群的资源
--MapReduce on Yarn,Spark on Yarn,Storm on Yarn,HBase on Yarn(Hoya)
--每个应用程序对应自己的ApplicationMaster
Hadoop2.0 架构解析之MAPREDUCE
--MapReduce原理和运行流程不MRv1一样,API保持向后兼容
--不同的是,在2.0,mapreduce作为Hadoop Yarn的其中一种application
--一些概念的变化
mrv1 mrv2
JobTracker MRAppMaster
TaskTracker NodeManager
Slot Container
Hadoop 1.0 vs 2.0
1.0 | 2.0 |
只支持MapReduce一个Batch Processing计算框架 | 支持MapReduce、 Tez、 Spark、 Storm等多种计算框架,融合Batch Processing、 Interative Computing、 Realtime Computing |
集群管理受JobTracker限制, 很难扩展 | 引入了新的资源管理框架Yarn |
集群资源利用率低, 配置固定的Map/Reduce Slot数,不可复用 | Container化, 没有固定的Map/Reduce Slot, 可动态资源分配, 可复用 |
JobTracker、 TaskTracker | RM、 NM, mapreduce作为Yarn之上的一个app |
Hadoop 2.0 架构
Hadoop 生态圈
Common
A set of components and interfaces for distributed filesystems and general I/O
(serialization, Java RPC, persistent data structures).
Avro
A serialization system for efficient, cross-language RPC and persistent data storage.
MapReduce
A distributed data processing model and execution environment that runs on large clusters of commodity machines.
HDFS
A distributed filesystem that runs on large clusters of commodity machines.
Pig
A data flow language and execution environment for exploring very large datasets.
Pig runs on HDFS and MapReduce clusters.
Hive
A distributed data warehouse. Hive manages data stored in HDFS and provides a
query language based on SQL (and which is translated by the runtime engine to
MapReduce jobs) for querying the data
HBase
A distributed, column-oriented database. HBase uses HDFS for its underlying
storage, and supports both batch-style computations using MapReduce and point
queries (random reads).
ZooKeeper
A distributed, highly available coordination service. ZooKeeper provides primitives
such as distributed locks that can be used for building distributed applications.
Sqoop
A tool for efficient bulk transfer of data between structured data stores (such as
relational databases) and HDFS.
Oozie
A service for running and scheduling workflows of Hadoop jobs (including MapReduce, Pig, Hive, and Sqoop jobs).