内容:
文章整理自:https://edu.huaweicloud.com/courses
是基于Google发布的GFS论文进行设计开发,运行在通用硬件上的分布式文件系统。
即,将普通配置的机器结合起来形成一个完整的文件系统
(1)高容错性:认为硬件总是不可靠的,所以每份数据都有备份文件。
一般每份数据会有3份,分别存储在不同机器上,如果某个机器坏掉了,HDFS会将该机器上的数据自动备份3份并存储到其他机器上,保证始终有3份数据存在,来保证系统的可靠性
(2)高吞吐量:为大量数据访问的应用提供高吞吐量支持
HDFS可以将命令下发到它所管理的机器上进行数据的读写,来提高数据的吞吐量
(3)大文件存储:支持存储TB-PB级别的数据
理论上可以通过扩容机器上的硬盘容量或者增加机器数量来达到无限的存储空间
(1)NameNode:NameNode用于存储、生成文件系统的元数据信息。包括文件的物理地址,大小,备份数据等
(2)DataNode:DataNode用于存储实际的数据,将自己管理的数据信息上报给NameNode。
(3)Client:支持外面的应用程序访问HDFS,从NameNode,DataNode获取数据返回给业务
Hadoop2.0中的资源管理系统,它是一个通用的资源管理模块,可为各类应用程序进行资源管理和作业调度,除了提供MapReduce框架,还可以支持其他框架,比如Spark、Storm等
(1)良好的扩展性:可通过添加节点以扩展集群能力。
(2)高容错性:通过计算迁移策略提高集群的容错性
如果检测到一个机器的任务失败后,会将机器的任务分配给其他机器继续执行
(1)ResourceManger:负责集群资源和计算框架的管理,可以根据容量队列限制条件,将系统中的资源分配给应用程序,然后监控程序的运行状态
(2)NodeManager:它运行在每台机器上,是分配和监控的最终执行者
(3)Container:它是Yarn的资源抽象,它封装某个节点上的多维度资源,包括:CPU,内存,磁盘,网络等,并且任务最终是运行在Container当中
Hive是基于Hadoop的数据仓库软件,可以查询和管理PB级别的分布式数据。
提供类SQL 的HiveQL语言将SQL查询转换为MapReduce任务实现数据处理。
(1)数据清洗:数据抽取、数据加载、数据转换
(2)非实时分析:日志分析、文本分析等
(3)数据挖掘:用户行为分析、兴趣分区等
(1)HiveServer:对外提供Hive数据库服务,可以将用户提交的SQL编译解析成对应的Map和Reduce任务或者HDFS操作,并返回查询结果
(2)MetaStore:提供Hive的原数据服务,负责Hive的表结构和属性信息的读写和修改
(3)WebHCat:提供接口,可以通过请求执行HIve命令,提交MapReduce任务
由于Hive是基于MapReduce框架,查询数据非常缓慢,所以如果需要实时查询数据时,我们可以使用HBase
HBase是一个高可靠性、高性能、面向列、可伸缩的分布式数据库,提供海量数据存储功能,用来解决关系型数据库在处理海量数据时的局限性
HBase常见场景:
(1)存储大表数据(表的规模可以达到数十亿行以及数百万列)
(2)高效的随机读取
(3)同时处理结构化和非结构化的数据
(1)HMaster:负责RegionServer的管理,包括表的增删改查和RegionServer的负载均衡等
(2)RegionServer:提供表数据的读写服务,是HBase数据处理的计算单元
(1)HDFS:是作为HBase的文件存储,并且HBase的RegionServer一般会和HDFS的DataNode部署到一起
(2)Zookeeper:为HBase提供分布式的协作服务。所有的RegionServer会将自己的信息注册到Zookeeper中,HMaster可以根据Zookeeper中的信息感知到各个RegionServer的健康状态
是一种通用的高性能集群计算系统。既有类似于MR的分布式内存计算框架,也有类似Hive的类SQL查询,还提供了实时数据的处理引擎和机器学习的算法库
(1)快速的数据处理,ETL(抽取、转换、加载)
(2)实时数据分析
(3)数据挖掘和机器学习
相比于MR来讲,它的核心特点是使用内存进行计算。MR会将中间计算结果存在到HDFS当中,然后再从HDFS当中读取进行计算;而Spark是将中间数据存放在内存当中,直接在内存中进行迭代计算
是一个高吞吐、分布式、基于发布订阅的消息系统,利用Kafka技术可在廉价的机器上搭建起大规模消息系统,适用于离线和在线的消息消费。
实时数据像水流一样,所以Kafka有一个“生产者程序”和“消费者程序”,分别对数据池进行生成数据和消费处理
(1)常规的消息收集
(2)网站活性跟踪
(3)聚合统计系统运营数据(如监控数据)
(1)实时分析:如实时日志处理、交通流量分析等
(2)实时统计:如网站的实时访问统计、排序等
(3)实时推荐:如实时广告定位、事件营销等
(1)Client客户端向Nimbus提交具体的分析任务;
(2)Nimbus接收客户端提交的任务并将任务分发给Supervisor;
(3)Supervisor负责监听并接收Nimbus分配的任务,根据需要启动或停止自己管理的Worker进程;
(4)Worker进程是具体运行处理主件逻辑的进程,每一个Worker是一个单独的JVM进程,其中Excutor是Worker中的线程,负责处理具体的业务逻辑;
(5)Zookeeper为服务提供分布式的协作,Nimbus和Supervisor以及Worker会将自己的信息注册到Zookeeper中,然后Nimbus根据Zookeeper中的信息感知各个角色的状态
Flume是一个分布式、可靠和高可用的海量日志聚合的系统。支持在系统中定制各类数据发送方,用于收集数据然后写到各种数据接收方的能力。用户几乎不必进行任何额外开发即可使用。只需要配置好Source,Channel,Sink就可以进行数据传输
(1)Source:数据源,Flume会将原始数据建模抽象成自己处理的数据对象,然后缓存到Channel当中
(2)Channel:主要作用就是临时缓存数据
(3)Sink:从Channel中取出数据并将数据放到最终的目的地当中
(1)从固定目录下采集日志信息到目的地(HDFS, HBase, Kafka)
(2)实时采集日志信息到目的地