@(blog)
简介
Hadoop 是一个能够处理海量数据的分布式系统基础软件框架,理论上能够通过增加计算节点以处理无限增长的数据,由java写成。其作者是 Doug Cutting,得益于谷歌的Map/Reduce计算模型和GFS分布式文件系统,Hadoop实现了其核心组件HDFS和MapReducce。Hadoop 是目前世界上大数据行业的主流软件框架。其生态圈非常庞大,并且社区很活跃。Hadoop本身仅有hadoop-common + hdfs + mapreduce 组成,hadoop2.x以后增加了yarn体系。
hadoop 的集群模式
hadoop 集群,从细的方面来说,总共分为四种模式:
- Single Node Cluster,即伪分布式模式(单机模式)
- Full Distributed Cluster,即完全分布式集群模式
- HA Cluster,即高可用集群模式
- HA + Federation Cluster,即高可用联邦集群模式
每一种方式都有其特定的使用场景,但一般数据规模很大的企业,都会选择HA+Federation模式,下面简要地介绍一下每一种模式的情况:
- 单机模式,将hadoop安装在一台机器上,通过进程来模拟各主机节点的协作和运行,其可靠性、稳定性都是非常差的,并且具备糟糕的性能效率,没有团队会在生产环境使用它。那么它是否就没有用呢?也不是的,通常使用这种模式进行开发和调试工作。
- 完全分布式模式,将hadoop部署在至少两台机子上,数据块副本的数量通常也设置为2以上。该模式的集群,无论规模多大,只拥有1台Namenode节点,且也是唯一Active的工作节点。Namenode(简称NN)相当于hadoop文件系统的管家,对集群的所有文件访问和操作都经由NN统一协调管理。可想,当集群规模越来越庞大时,仅有一台NN,必定是不堪重负,那么它很容易就会挂掉,一旦挂掉,不仅集群立即瘫痪,还很容易造成数据丢失。另外,该模式通常ResourceManager(RM)也仅部署1台,ResourceManager是yarn的管家,主要管理任务的执行,例如MapReduce任务。与NN类似,当集群提交的作业过于繁重时,其同样面临超负载的问题。那么此模式是否也无用武之地呢?也不是的,视业务、资金等情况而定,因为该模式日后也可以安全升级成高可用模式。
- 高可用模式,一般来说,分为NN的高可用和RM的高可用。在完全分布式的基础上,增加备用NN和RM节点。NN高可用,也就是集群里面会部署两台NN(最多也只能两台),以形成主备NN节点,达到高可用的目的。RM高可用与NN高可用类似,也是在集群里部署备用RM节点。不过此种模式下集群里面依然只有一台NN/RM处于Active工作状态,另一台则处于Standby的等待状态。当Active的NN/RM出现问题无法工作时,Standby的那台则立即无缝切入,继续保障集群正常运转。这种模式是很多企业都使用的,但是依然有缺陷。什么缺陷呢?虽然集群的可用性问题解决了,但是性能瓶颈依然存在——仅有一台NN/RM,由于无法横向扩展,其很可能会超负载运行。
- 高可用联邦模式,解决了单纯HA模式的性能瓶颈。单纯的HA模式NN和RM之间虽然配置了HA,但是依旧仅有一台NN或RM同时运行,这可能会导致了NN或RM的负载过重,从而造成整个集群的性能瓶颈。而联邦模式将整个HA集群再划分为两个以上的集群,不同的集群之间通过Federation进行连接,不同集群间可以共享数据节点,也可以不共享,可以互相访问和操作数据,也可以不。这样便做到了HA集群的横向扩展,从而移除了单纯HA模式同时仅有1台NN/RM工作所带来的性能瓶颈。Federation模式,相当于在多个集群之上又构建了一个集群层次,从数据访问的角度看,也可以简单的将其理解为一台路由器,而每一个HA集群则是单独的网络,不同网络间通过Federation路由器进行沟通。此模式是目前hadoop生态中最高的一种模式,适用于规模较大的企业。
组件体系
hadoop
hdfs
mapreduce
yarn
zookeeper
hive
hbase
sqoop
pig
Impala
dubbo
kudu
storm
kafka
flume
elasticsearch elk
mahout
ambari
avro
cassandra
chukwa
tez
spark
spark-streaming
spark-sql
spark-MLlib
概念
hadoop hdfs mapreduce fsimage edits namenode-metadata
yarn zookeeper
Namenode Secondary-Namenode Datanode
ResourceManager(JobTracker)
NodeManager(TaskTracker)
ApplicationManager
ApplicationMaster
Container
JobHistoryServer
JobClient
JournalNode
hadoop1.x hadoop2.x HA federation