Hadoop架构及各组件介绍

什么是hadoop?

hadoop是一个可靠,可扩展的分布式开源框架,提供海量数据的存储和计算。一般hadoop指的是hadoop生态圈。

一、先通过一张图了解一下hadoop生态系统整体框架结构。

Hadoop架构及各组件介绍_第1张图片

二、理解hadoop生态系统之前,我们先来认识几个概念:

1.什么是分布式?
	个人理解,就是将一个系统的功能模块分散部署在不同的服务器上,每个服务器上的系统分别对应一个模块功能,每个模块可能负责几种方法实例,是面向SOA架构的概念,服务器之间通过RPC或者webserver进行交互

2.什么是SOA架构?
	1)翻译为面向中文编程,也叫服务治理。
	2)从项目角度理解:
		比如刚开始有一个项目很小,运作在一台服务器上,系统中包含6个模块,因为数据量很小,所以一台服务器的数据库就可以承载这些数据量。慢慢的,项目越做越大,数据量也越来越大,大到一台服务器的数据库只够装一个模块的数据。这时后就引出了SOA的概念,意思是原先一台服务器负责一个系统的6个模块,现在水平扩展到6台服务器,每台服务器负责一个模块。

	3)从生活角度理解:
		比如小张新开张一家西餐厅(一个系统),有6名厨师干活(模块),负责洗菜,切菜,配菜,炒菜等工作(模块下的方法实例),刚开始店里客流量比较少,6名厨师忙得过来,当客流量越来越多了,6名厨师因为每个人都要负责洗菜,切菜,配菜,炒菜这么多的工作,逐渐忙不过来,所以小张老板又请了一名配菜师分担压力。哪个厨师需要做菜,配菜师就去帮那名厨师洗菜,切菜,配菜,厨师只负责炒菜。那么配菜师和6名厨师之间的关系就是分布式的关系

3.那么服务器之间想要相互访问对方的模块,服务器之间是如何进行交互的呢?这里引申出RPC的概念(远程过程调用)
	1)RPC翻译为远程过程调用,了解远程过程调用之前,需要先知道什么是本地调用。
	2)本地调用:
			A)从专业角度理解:
				比如一个分布式系统中,有6个服务模块,模块1定义了一个计算器接口,实现了一个加法运算,当在模块1这new了一个计算器实例,这时模块1直接调用计算器实例的加法运算产生了一个结果。这个过程就是本地调用。因为计算器实例是创建在模块1的内存或空间地址里,直接通过方法栈或参数栈就能实现。
			
			B)从生活角度理解:
				一对情侣在家,女的想要洗衣服,那么只要把衣服丢进洗衣机,然后启动洗衣机就可以了。但是女的突然有事出门了,然后想洗衣服,可是不在家洗不了,但是男的在家,这时候女的就可以给男的打电话让他去洗衣服。这个过程就是RPC过程

补充:
	1.RPC的特性
		1)透明性:远程调用其他服务器上的程序,就像本地调用一样。不用关心底层的网络传输协议
		2)高性能:RPC server服务能够并发处理多个来自client客户端的请求
		3)可控性:hadoop有自定义的RPC框架

三、hadoop生态系统各个组件及作用

hadoop核心组件:

	HDFS:高容错、高可靠性、高可扩展性、高吞吐率分布式文件存储系统。负责海量数据的存储。

	Yarn:资源管理调度系统。负责hadoop生态系统中任务的调度和监控。

	Mapreduce:基于HDFS,Yarn的分布式并行计算框架。负责海量数据的计算。

hadoop其他辅助组件(这里只列举部分):

数据采集和传输类:

		Flume:是一个分布式可靠的高可用的海量日志收集、聚合、移动的工具,通俗来说flume就是一个日志采集工具。
		
		Sqoop:用于hadoop和结构化数据存储(如关系型数据库,mysql,oracle等RDBMS)之间高效传输批量数据。是一个数据传输工具(也是ETL工具之一)		

服务类:

		Zookeeper:分布式协调服务。就是为用户的分布式应用程序提供协调服务,如:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统一名称服务等等。

离线和实时类:

		Hive:基于hdfs,结合类SQL引擎,底层执行MR任务,用于OLAP分析查询的数据仓库。
		
		Hbase:基于hdfs,高可靠性、高性能、列存储、可伸缩、实时读写nosql的数据库系统。
		
		Phoenix:基于hadoop的OLTP业务数据分析SQL引擎。相当于一个Java中间件,提供jdbc连接,操作hbase数据表。

任务调度类:

		Azkaban:简单来说就是执行任务脚本的调度工具。是在LinkedIn上创建的用于运行Hadoop作业的批处理工作流作业调度程序。通过工作依赖性解决订购问题,并提供易于使用的Web用户界面来维护和跟踪您的工作流程。
	
		Oozie:是一个可靠且可扩展的工作流调度程序系统,用于管理Apache Hadoop作业。

数据分析类:

		Kylin:是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,能够在亚秒级查询巨大的Hive表,并支持高并发。

		Presto:是一个开放源代码的分布式SQL查询引擎,用于对大小从GB到PB的各种数据源运行交互式分析查询。

		Zepplin:基于Web界面组合多个大数据分析引擎的处理能力的大数据交互分析服务软件。

计算引擎类:

	Mapreduce(分布式计算):上述介绍了,这里就省略了...

	Tez(DAG计算):基于Yarn,允许使用复杂的有向无环图来处理数据的计算引擎。计算速度高于Mapreduce。
	
	Spark(内存计算):是一个快速的,通用的集群计算系统。它对 Java,Scala,Python 和 R 提供了的高层 API,并有一个经优化的支持通用执行图计算的引擎。它还支持一组丰富的高级工具,包括用于 SQL 和结构化数据处理的 Spark SQL,用于机器学习的 MLlib,用于图计算的 GraphX 和 Spark Streaming。计算速度高于Mapreduce。

你可能感兴趣的:(hadoop)