一篇了解大数据架构及Hadoop生态圈
阅读建议,有一定基础的阅读顺序为1,2,3,4节,没有基础的阅读顺序为2,3,4,1节。
第一节 集群规划
大数据集群规划(以CDH集群为例),参考链接:
https://www.cloudera.com/documentation/enterprise/latest/topics/cm_ig_host_allocations.html
https://blog.csdn.net/xuefenxi/article/details/81563033
Cloudera(CDH)简介
官方文档https://www.cloudera.com/documentation/enterprise/latest.html
CDH(Clouder's Distribution Including Apache hadoop),基于web的用户界面,支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、pig、Hbase、Zookeeper、Sqoop,简化了大数据平台的安装和使用难度。
Cloudera作为一个强大的商业版数据中心管理工具,提供了各种能够快速稳定运行的数据计算框架。
CDH集群可以划分为不同的角色,主要包括以下几种:
-
管理节点(Master Hosts):主要用于运行Hadoop的管理进程,比如HDFS的NameNode,YARN的ResourceManager。
-
工具节点(Utility Hosts):主要用于运行非管理进程的其他进程,比如Cloudera Manager和Hive Metastore.
-
边缘节点(Gateway Hosts):用于集群中启动作业的客户机器,边缘节点的数量取决于工作负载的类型和数量。
-
工作节点(Worker Hosts):用户运行DataNode以及其他分布式进程。
集群大小划分:
测试/开发集群(小于10台),小规模集群(10-20台),中小规模集群(20-50台),中等规模集群(50-100台),大型集群(100-200台),超大规模集群(200-500台),巨型规模集群(500台以上)。每台机器的大小通常为32G物理内存,1T磁盘大小。
测试开发集群(逻辑划分):1台管理节点+1台工具节点/1台边缘节点+N台工作节点。
Master Hosts |
Utility Hosts |
Gateway Hosts |
Worker Hosts |
Master Host 1:
|
One host for all Utility and Gateway roles:
|
3 - 10 Worker Hosts:
|
(可在Cloudera Manager界面查看,端口号:7180)
1台机器上部署管理节点,通常包括的角色:
NN: NameNode (HDFS);
SHS: Spark History Server (Spark);
RM: Resource Manager (YARN);
JHS: JobHistoryServer
ZK: Zookeeper;
KM: kudu Master
ISS: Impala Statestore
1台机器部署工具节点/边缘节点:
工具节点通常包括的角色:
CM: Cloudera Manager
JN: JournalNode
CMS: Cloudera Management service
ICS: Impala Catelog service
NMS: Navigator Metadata
HMS: Hive Metadata
NAS: Navigator Audit Srver
ZK, Fluem, Sqoop, Hue, HttpFS
边缘节点通常包括的角色:
GW: Gateway configuration
Hue, Sqoop, Flume, HiveServer
工作节点通常包括的角色:
Impala Daemon, NodeManager, DataNode, Kudu Tablet Server
第二节 Hadoop生态圈
Hadoop生态体系中,HDFS提供文件存储,YARN提供资源管理,在此基础上,进行各种处理,包括mapreduce、Tez、Sprak、Storm等计算。
图 Hadoop生态体系
hadoop基础:https://blog.csdn.net/chengyuqiang/article/category/6905123/6
第三节 Hadoop三大核心组件
Hadoop集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起。
(1)HDFS集群:负责海量数据的存储。
(2)YARN集群:负责海量数据运算时的资源调度。
(3)MapReduce:它其实是一个应用程序开发包。
hadoop三大组件:https://blog.csdn.net/wyfly69/article/details/79950039
(1)HDFS
(1)HDFS(Hadoop Distributed File System)
(Hadoop分布式文件系统,存储是大数据技术的基础)
HDFS简化了文件的一致性模型,通过流式数据访问,提供高吞吐量应用程序的数据访问功能,适合大型数据集的应用程序。它提供了一次写入多次读取的机制,数据以块的形式,同时分布在集群中不同物理机器上。
快速理解:
1)HDFS的文件被分成块进行存储,默认为64M,块是文件存储处理的逻辑单元。
2)HDFS有两类节点,NameNode和DataNode
3)NameNode是管理节点,存储文件元数据。文件与数据块的映射表;数据块与数据节点的映射表。
4)DataNode是HDFS的工作节点,存储数据块。
5)每个数据块3个副本,分布在两个机架内的三个节点。
6)DataNode定期向NameNode发送心跳信息。
7)二级NameNode定期同步元数据映射文件和修改日志,作为备胎。
特点:
1)数据冗余,硬件容错
2)流式的数据访问
3)存储大文件
应用:
1)适合数据批量读写,吞吐量高。不适合交互式应用,低延迟很难满足。
2)适合一次写入多次读取,顺序读写。不支持多用户并发写入相同文件。
常用操作指令:
#初始格式化
hadoop namenode -format
#打印Hdfs当前文件夹
hadoop fs -ls/
#创建并上传文件操作
hadoop fs -mkdir input
hadoop fs -put hadoop_env.sh input /
#查看具体文件
hadoop fs -cat input/hadoop_env.sh
#下载文件
hadoop fs -get input/hadoop_env.sh hadoop_env2.sh
#查看文件系统所有文件
hadoop dfadmin -report
HDFS参考:https://blog.csdn.net/weixin_38625805/article/details/82120573
(2)YARN
(2)YARN(Yet Another Reduce Negotiator,另一种资源协调者)
YARN是一个通用的资源管理平台,可为各类计算框架提供资源的管理和调度。
其核心出发点是为了分离资源管理与作业调度/监控,实现分离的做法是拥有一个全局的资源管理器(ResourceManager,RM),以及每个应用程序对应一个的应用管理器(ApplicationMaster,AM),应用程序由一个作业(Job)或者Job的有向无环图(DAG)组成。
快速理解:
1)YARN可以将多种计算框架(如离线处理MapReduce、在线处理的Storm、迭代式计算框架Spark、流式处理框架S4等) 部署到一个公共集群中,共享集群的资源。并提供如下功能:
资源的统一管理和调度:
集群中所有节点的资源(内存、CPU、磁盘、网络等)抽象为Container(集装箱)。计算框架需要资源进行运算任务时需要向YARN申请Container,YARN按照特定的策略对资源进行调度进行Container的分配。
资源隔离:
YARN使用了轻量级资源隔离机制Cgroups进行资源隔离以避免相互干扰,一旦Container使用的资源量超过事先定义的上限值,就将其杀死。
YARN是对Mapreduce V1重构得到的,有时候也称为MapReduce V2。
YARN可以看成一个云操作系统,由一个ResourceManager和多个NodeManager组成, 它负责管理所有NodeManger上多维度资源,并以Container(启动一个Container相当于启动一个进程)方式分配给应用程序启动ApplicationMaster(相当于主进程中运行逻辑) ,或运行ApplicationMaster切分的各Task(相当于子进程中运行逻辑)
YARN链接:https://blog.csdn.net/qq_28001193/article/details/79480786
(3)MapReduce
(3)MapReduce(分布式计算,是大数据应用技术的解决方案)
分而治之,一个大任务分成多个小的任务(map),并行执行后,合并结果(reduce)
快速理解:
1)用于执行MapReduce任务的机器角色有两个:一个是JobTracker;另一个是TaskTracker,JobTracker是用于调度工作的,TaskTracker是用于执行工作的。一个Hadoop集群中只有一台JobTracker。
2)TaskTracker对应HDFS中的DataNode。
3)JobTracker的作用:作业调度,分配任务,监控任务执行进度;监督TaskTracker的状态
4)TaskTracker的作用:执行任务,汇报任务状态。
5)mapreduce的容错机制,重复执行(4次),推测执行。
应用:
1)100G的网络访问日志文件,找出访问次数最多的地址。
2)wordcount.
链接:
1)https://blog.csdn.net/wuya814070935/article/details/78664674
2)https://blog.csdn.net/qq_24908345/article/details/52791944
3)https://www.imooc.com/article/34049
第四节 Hadoop其他组件介绍
(4) Flume(日志收集工具)【水槽】
Flume数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。同时,Flume还具备能够将日志写往各种数据目标的能力。
相关概念:
Flume逻辑上分为三层架构:agent, collector, storage
agent用于采集数据,collector用户数据汇总,storage是存储系统。
(5) sqoop(数据同步传输工具)
用于hadoop(hive)与传统数据库的数据传输。TEL
(6) Zookeeper(分布式协作服务)【动物饲养员】
Zookeeper解决分布环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。Hadoop的许多组件依赖于Zookeeper,它运行在计算集群上面,用户管理Hadoop操作。分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。
快速理解:
Zookeeper的核心功能,文件系统和通信机制。
1)文件系统:
每个目录都是一个znode节点;Znode节点可直接存储数据;类型,持久化。
2)通信机制:
客户端监听关心的Znode节点;znode节点有变化时,通知客户端。
3)Zookeeper的核心是原子广播,保证了各个Server之间的同步。实现这种机制的协作叫做ZAB协议。(Zookeeper Atomic BrodCast)
ZAB协议:
核心算法paxos算法,一种基于消息传递且具有高度容错性的一致性算法。分布式系统中的节点通信存在两种模型,共享内存,消息传递。
paxos算法解决的问题是一个可能发生上述异常的分布式系统中如何就某个值达成一致,保证不论发生以上任何异常,都不会破坏决策的一致性。
(7) Hbase(分布式列存储数据库)
hbase是运行在hdfs之上的一种数据库,以键值对的形式存储数据,能够快速在主机内数十亿行数据中定位所需的数据并访问,而HDFS缺乏随即读写操作,不能满足实时需求。
快速理解:
1)海量数据存储
2)准实时查询,100ms
特点:
1)容量大,百亿行,百万列
2)面向列,列式存储,可单独对列进行操作
3)扩展性,底层依赖于HDFS,动态增加机器即可
4)可靠性,HDFS本身也有备份
5)高性能,LSM数据结构,Rowkey有序排序
Hbase表结构:
1)列簇,1张列簇不超过5个,列簇没有限制,列只有插入数据才存在,列在列簇中是有序的。eg:个人信息|教育信息|工作经历
2)不支持条件查询,列动态增加,数据自动切分,高并发读写。
启动方式:
输入:habse shell
查询表:list
查询表数据信息:(1)scan '表名' (2)count '表名'
命令:(注意,复制可能报错,只能手打)
#查看
scan '表名:列簇','条件'
#只返回前两行记录
scan 'table_name:info',{LIMIT =>2}
#查看具体某一行
get 'table_name:info','00123_22'
#模糊查找某一列数据
scan 'table_name:info',FILTER=>"ColumnPrefixFilter('td_id') AND ValueFilter(=,'substring:$_08_03')"
(8) Hive(数据仓库)
Hive是建立在hadoop上的数据仓库基础架构,类似一种SQL解析引擎,它将SQL语句转成MapReduce,然后再Hadoop上执行。
启动方式:
hive;
show tables;
select * from table_name;
quit;
命令:
# 创建数据文件
hadoop fs -vi /home/testdata.dat
#创建库
create database test
#创建表
create table test(id int,name string,age string) ROW format DELIMITED FIELDS
TERMINATED BY ' ' stored as TEXTFILE;
#加载数据
load data local inpath '/root/data/students.txt' into table test;
#删除表
drop database if exists test;
#大小写转换
select lower('hello world'),upper('hello world')
#去掉前后的空格
trim
#habse 和 hive的区别
1) habse是基于Haddoop实现的数据库,不支持SQL
2) hive是基于hadoop实现的数据仓库,适合海量全量数据,支持类SQL操作。
#数据仓库的特性
数据仓库用称做数据立方体的多维数据结构建模,它是一个从多个数据源收集的信息存储库,存放在一致的模式下,并且通常驻留在单个站点上。
数据仓库是面向主题的、集成的、其数据是随着时间变化而变化的,其数据是不可修改的。
(9) Tez
支持DAG作业的计算框架,对MapReduce的进一步拆分。
(10) OOzie(工作流调度系统)
用来管理hadoop任务,工作流调度:工作流程的编排、调整,安排事件的触发执行。OOzie是一个可扩展的工作体系,集成于Hadoop的堆栈,用于协调多个MapReduce作业的执行。OOzie的工作流是放置在控制依赖DAG(有向无环图 Direct Acyclic Graph)的一组动作(例如,hadoop的Map/Reduce作业,Pig作业等),其中指定了动作执行的顺序。OOzie使用hPDL(一种XML流程定义语言)来描述这个图。
(11) Hue (Hadoop user Experience)大数据协作框架,web访问。
访问端口:8889
使用Hue我们可以在浏览器端的Web控制台上与Hadoop集群进行交互来分析处理数据,例如操作HDFS上的数据,运行MapReduce Job,执行Hive的SQL语句,浏览Hbase数据库。
(12) Impala (数据查询系统)
提供SQL语义,能查询存储在Hadoop的HDFS和HBASE的PB级的大数据。Impala没有使用MapReduce进行并行运算,所以Hive适合于长时间的批处理查询分析,而Impala适合于实时交互式SQL查询。
(13) Sentry(事件日志记录和汇集的平台)【哨兵】
Sentry是一个开源的实时错误报告工具,支持Web前后端、移动应用以及游戏。通常我们所说的Sentry是指后端,有Django编写。
(14) Solr(全文搜索服务器,基于lucene)
Sentry是一个独立的企业其搜索应用服务器,它是一个高性能,采用JAVA5开发,它对外提供类似于Web-service的API接口。用户可以通过HTTP请求,向搜索引擎提交一定格式的XML文件,生成索引。
(15) Lucene
它是一套用于全文检索和搜索的开发源代码程序库。Lucene提供了一个简单却强大的应用接口程序,能够做全文索引和搜索,它是最受欢迎的免费Java信息检索程序库。
(16) pig
为大型数据集的处理提供抽象,与MapReduce相比,Pig提供了更丰富的数据结构,一般都是多值和嵌套的数据结构。它提供强大的数据变换,包括在MapReduce中被忽视的连接Join操作。
(17) Ambari
一种基于web的工具,支持hadoop集群的供应、管理和监控。
(18)Storm(实时处理框架)【暴风雨】
类似于Hadoop的实时处理框架,毫秒级。随着越来越多的场景对Hadoop的MapReduce高延迟无法容忍,比如网站统计、推荐系统、预警系统、金融系统(高频交易)等等,大数据实时处理解决方法的应用日趋广泛,其中Strom成为流计算技术中的佼佼者。
基本概念:
Storm的主从架构由Nimbus(主结点)、zookeeper(协作框架)、supervisor(从节点)和worker(各个机器)组成。
1)Nimbus的作用:接收客户端代码,拆分成多个task,将task信息存入zookeper;将task分配给supervisor,将映射关系存入zookeeper;故障检测
2)supervisor的作用:从Nimbus目录读取代码,从zk上读取分配的task;启动工作进程worker执行任务;检测运行的工作进度worker.
3) worker的作用:从zk上去读取分配的task,并计算出task需要给哪些task分布消息;启动一个或多个Executor线程执行任务Task.
4)zookeeper的作用:协调Nimbus与supervisor进行通信;协调supervisor与worker进行通信;保证Nimbus的高可用性。
(19)Kylin【麒麟】
一个开源的分布式分析引擎,为Hadoop等大型分布式数据平台之上的超大规模数据集提供通过标准SQL查询及多维分析(OLAP)的功能,提供亚秒级的交互分析能力。
Tips:ETL(数据仓库技术)
extract,transform,load(抽取)(转换)(加载)
(20) Kibana
它是一个开源的分析和可视化平台,设计用于和ElasticSearch一起工作,你用Kibana来搜索,查看并存在ES索引中的数据进行交互。
常用端口(ES):5601
常用es查询指令:
通常格式:GET 索引/类型
例如:
精确查找:
GET topic_index/topic_type/_search
{
"query":{
"term":{
"id":{
"value":"$09_1213"
}
}
}
}
模糊前缀查找:
GET topic_index/topic_type/_search
{
"query":{
"prefix":{
"id":{
"value":"$09"
}
}
}
}
参考链接:https://blog.csdn.net/u011262847/article/details/78007119
同时附es-java-api:
https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-search.html
(21) Kafka(分布式消息队列)
端口号:9092
主要用于处理活跃的流式数据,这些数据包括网站的pv,uv。
它由producer、Broker和consumer三部分组成。
基本概念:
producer: 消息和数据的生产者,向kafka的一个topic发布消息的进程、代码、服务,负责发布消息到Broker.
Broker: Kafka集群包含一个或多个服务器,这种服务被称为Broker.
Consumer: 消息和数据的消费者,订阅消息,向Broker读取消息的客户端。
Topic: kafka消息的类别,每条发布到kafka集群的消息都有一个类别,这个类别称为Topic.
Partition: kafka下数据存储的基本单元,每个Topic包含一个或多个Partition.
Consumer Group: 对于同一个Topic,会广播给不同的Group。每个Consumer属于一个特定的Consumer Group.
Replication Leader: 负责partition上Producer与Consumer的交互。
ReplicaManager: 负责管理当前Broker所有分区和副本的信息。
特点:
1)多分区
2)多副本
3)多订阅者
4)基于zookeeper调度
应用场景:
1)消息队列
2)行为跟踪
3)元数据监控
4)日志收集
5)流处理,时间源
6)持久性日志
手动导入数据到Kafka命令
#创建主题,replication-factor表示该topic需要在不同的broker中保存几份,partions为几个分区
./kafka-topics.sh --create --zookeeper cdh-node04:2111 --replication-factor 3 -- partitions 1 --topic test01
#描述主题
./kafka-topic.sh --zookeeper cdh-node04:2111 --describe --topic test01
#生产者发送数据
./kafka-console-producer.sh --broker-list cdh-node04:2111,cdh-node05:3111 --topic test01 +(复制黏贴的数据【固定格式:一般为JSON 】)
#消费者消费数据
./kafaka-console-consumer.sh --zookeeper cdh-node04:2111 --topic test01 (--from-beginning从头开始查看数据)
(22) Azkaban(批量工作流任务调度器)
主要用于在一个工作流内以一个特定的顺序运行一组工作和流程,它的配置是通过简单的key:value键值对的方式,通过配置中的dependencies来设置依赖关系,这个依赖关系是无环的,否则会被视为无效的工作流。相比于OOzie的配置复杂度高,Azkaban有如下有点:
1)通过job配置文件快速建立任务和任务之间的依赖关系。
2)提供功能清晰,简单易用的web UI界面。
3)提供模块化和可插拔的插件机制,原生支持command,java,pig,hadoop。
4) 基于java开发,代码结构清晰,易于二次开发。
(23) Nginx(反向代理服务器)
它是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Nginx是一款轻量级的Web服务器/反向代理服务器以及电子邮件代理服务器,并在一个BSD-like协议下发型,其特点是占有内存小,并发能力强。事实上nginx的并发能力确实在同类型的网络服务器中表现较好,中国大陆使用nginx网站的有:百度,京东,腾讯,淘宝,网易。
应用:
Nginx实现负载均衡,链接:https://www.cnblogs.com/JimBo-Wang/p/6556360.html
(24) spark和spark2(大数据处理的计算引擎)
Spark是UC Berkeley AMP lab开发的一个集群计算的框架,类似于Hadoop,但有很多的区别。最大的优化是让计算任务的中间结果可以存储在内存中,不需要每次都写入HDFS,更适用于需要迭代的MapReduce算法场景中,可以获得更好的性能提升。例如一次排序测试中,对100TB数据进行排序,Spark比Hadoop快三倍,并且只需要十分之一的机器。Spark集群目前最大的可以达到8000节点,处理的数据达到PB级别,在互联网企业中应用非常广泛.
链接:https://www.cnblogs.com/smuxiaolei/p/7663744.html
相关概念:
1)在spark中,所有计算都是通过RDDS的创建、转化和操作完成的。RDDS(Resilent Distributed datasets,弹性分布式数据集)是并行分布在整个数据集中,是spark分发数据和计算的基础抽象类。
2)Spark运行架构包括集群资源管理器(Cluster Manager),运行作业任务的工作节点(worker Node),每个应用的任务控制节点(Driver)和每个工作节点上负责任务的执行进程(Executor).
Spark程序的执行过程:
1)创建SparkContext对象
2)从外部数据源读取数据,创建fileRDD对象
3)构建依赖关系,fileRDD->filterRDD,形成DAG
4)Cache()缓存,对filterRDD进行持久化
5)Count()执行。
spark基础:http://dblab.xmu.edu.cn/blog/spark/
与Hadoop MapReduce比较:
1)spark采用多线程来执行任务,而MapReduce采用多进程,优点是减少了任务开销。
2)Excutor中有一个BlockManager存储模块,会将内存和磁盘共同作为存储设备,当需要多轮时,可将中间结果存储到这个模块中,下次需要时,可以直接读取,不需要读写到HDFS等文件系统中,减少IO开销。
3)实例:100T的数据量,spark 206个节点,只需23分钟;MapReduce 2000个节点,需要72分钟。
链接:http://dblab.xmu.edu.cn/blog/985-2/
RDD在Spark架构中的运行过程(如图所示):
(1)创建RDD对象;
(2)SparkContext负责计算RDD之间的依赖关系,构建DAG;
(3)DAGScheduler负责把DAG图分解成多个阶段,每个阶段中包含了多个任务,每个任务会被任务调度器分发给各个工作节点(Worker Node)上的Executor去执行。