【征文大赛投稿】+Haddoop组件简介+2020.2.13

digest [复制链接]
发表于 : 2020-2-13 10:27:28 最新回复:2020-02-13 21:52:31
149 1
goodie
goodie  精英

讯方·智汇云校投稿 作者:张润泽,修正:赫荣博


一、HDFS
    HDFS(Hadoop Distribution File System)是运行在通用硬件(所谓通用硬件就是指软件对于底层的硬件平台的配置和设备没有需求,可以随意搭建并且兼容, 对于 HDFS 文件系统包括整体的 Hadoop 组件来说,这样做就可以达到完美的拓展性,由于本身设备对于硬件没有要求之后,那么我们就可以按照无限堆积硬件的 方式进行性能的拓展,直到满足大数据处理系统的需求,这样做可以减小在实际操作中的成本,并且可以提供更好的容错性,如果我们对于设备的型号或者性能有需求那么不免我们会在搭建时使用相同的设备来进行操作,这样的话,如果某一厂商的设备存在有 BUG,那么就会在一批设备上出现相同的问题,造成整体性能的下降或者系统的安全性危机)上的分布式文件系统,它具有高容错性,高吞吐量并且支持大文件存储。
    HDFS 支持的主要是大文件的流数据,对于离散的小文件的支持性较弱,尤其是对延迟比较敏感的应用,由于 HDFS 要支持高吞吐量,所以势必要以牺牲延迟作为代价。
    在大数据的组件架构中,HDFS 提供的是整个结构最底层的文件存储功能,他组织了文件形式,将数据切分为数据块存储起来,并且记载和维护元数据。
HDFS 分为三个组件:Namenode,Datanode,Client
(1) Namenode:用于存储生成元数据,运行一个实例。该进程是由 HDFS 调入到内存中运行的。NameNode 作为元数据的维护进程,为了能够提升整体读取的效率,所以我们将元数据的维护进程搭载在内存中进行运行,但是内存中的数据是易失的,所以平时元数据还是在 DataNode 中进行维护的。当系统启动之后, 服务器会拉起 HDFS 进程,然后将NameNode 加载到内存中,然后 NameNode 会加载元数据镜像文件到自身内存中。
(2) Datanode:用于存储实际的数据,每个 Datanode 会将自己维护的数据块信息上报到 Namenode,运行多个实例。HDFS 默认最小的存储空间为 block,每个 block 默认的大小为 128MB。DataNode 除了需要维护数据之外,还需要留有一部分的空间用于存储元数据镜像文件Fsimage。如果 NameNode 和 DataNode 是部署在一起的,那么Fsimage 就在 DataNode 上,其实相当于是在服务器的存储介质如果 NameNode 和 DataNode 是分开部署的,那么就相当于 Fsimage 是存储在部署 NameNode 的服务器上的。
(3) Client:支持业务访问 HDFS,并从 Namenode 和 Datanode 中获取数据, 返回给用户,多个业务和实例一起运行。这里所说的 Client 并不是指实际的用户应用,而是 HDFS 本身自带的进程,通过该进程我们可以访问 HDFS,相当于 HDFS 是一间房,Client 为我们提供了进入的门,Client 提供的接口主要有 JDBC 和 ODBC 接口。


二、MapReduce
    Mapreduce 是一个分布式的计算框架,提供计算的模型,框架和平台,它易于编程,我们在进行功能组件开发的时候只需要通过代码表达我们需要做什么就可以,具体的计算和操作交由执行框架进行处理即可。如果平台性能无法满足我们的需求的时候,我们只需要按需拓展我们的节点,通过 Scale-out 来进行性能线性拓展,而本身平台又提供了高容错性,我们可以通过计算迁移或者数据迁移操作,当节点出现故障的时候不会影响我们的现有业务。
它包含以下三层含义:
(1)MapReduce 是基于集群的高性能并行计算平台(ClusterInfrastructure)。
这里主要是指其在 Hadoop 中作为一个组件被使用,MapReduce 在大数据平台中提供的是一个离线的分布式计算引擎。其可以和底层的存储相关的组件进行交互,将文件进行计算和其他相关的操作。
(2)MapReduce 是一个并行计算与运行软件框架(SoftwareFramework)。作为一个软件框架,MapReduce 主要是被使用在编程语句中,进行相关的软件编译,比如其在 Python 中就作为了一个语句固件被编程者使用。
(3)MapReduce 是一个并行程序设计模型(ProgrammingModel&Methodology)。在早期谷歌提出 MapReduce 的设计思想时,其实它并没有一个专门的作用领域,而是作为一个思想来使用,它提供了计算的方法,所以在实际中,我们还可以按照这种设计模型和思想进行其他相关的开发。


三、YARN架构
    Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。
由以下几个组件构成:
(1)ResourceManager(RM):负责集群中所有资源的统一管理和分配。它接收来自各个节点(NodeManager)的资源汇报信息,并根据收集的资源按照一定的策略分配给各个应用程序。
(2)NodeManager(NM):是每个节点上的代理,它管理 Hadoop 集群中单个计算节点,包括与 ResourceManger 保持通信,监督 Container 的生命周期管理,监控每个 Container 的资源使用(内存、CPU 等)情况,追踪节点健康状况,管理日志和不同应用程序用到的附属服务(auxiliary service)。
(3)Application Master(AM):负责一个 Application 生命周期内的所有工作。包括:与 RM 调度器协商以获取资源;将得到的资源进一步分配给内部任务(资源的二次分配);与 NM 通信以启动/停止任务;监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务。
(4)Container:Yarn 中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。


四、Spark
    Spark 是一种基于内存进行计算的分布式批处理引擎,他的主要工作是执行以下几种计算:
(1) 数据处理,可以进行快速的数据计算工作,具备容错性和可拓展性。
(2) 迭代计算,Spark 支持迭代计算,可以对多步数据逻辑处理进行计算工作。
(3) 数据挖掘,在海量数据基础上进行挖掘分析,可以支持多种数据挖掘和机器学习算法。
对比于 hadoop 来说,Spark 更适用于数据处理,机器学习,交互式分析,最主要的是迭代计算中,它可以提供比 hadoop 更低的延迟,更高效的处理,并且开发效率更高,容错性也更好,但是需要注意的是,Spark 的性能只有在进行多层迭代计算的时候才会有显著的性能提升,相对于迭代层数少的现象,Spark 的计算性能提升的并不明显,基本和 Hadoop 持平。
由以下几个组件构成:
(1)SparkCore:类似于 MR 的分布式内存计算框架,Core 是整体 Spark 计算的核心进程,上层的计算按照计算的类型进行区分,用于适应不同层面的和不同目的的计算,然后计算的流程和中间处理进程都是由 Core 来进行的计算,所以本身从原理上来说,Spark 通过各种上层进程,满足了不同需求的计算,并且进行转化,下层的 Core 只进行计算,这样做就可以保证整体的所有组件都正常运行,并且达到资源的利用最大化,最大的特点是将中间计算结果直接放在内存中,提升计算性能。自带了 Standalone 模式的资源管理框架,同时,也支持 YARN、MESOS 的资源管理系统。FI 集成的是 SparkOnYarn 的模式。其它模式暂不支持。
(2)SparkSQL:SparkSQL 是一个用于处理结构化数据的 Spark 组件,作为Apache Spark 大数据框架的一部分,主要用于结构化数据处理和对数据执行类SQL 查询。通过 SparkSQL,可以针对不同数据格式(如:JSON,Parquet,ORC 等)和数据源执行 ETL 操作(如:HDFS、数据库等),完成特定的查询操作。当我们需要对 Sql 进行相关的操作的时候,就像之前所说,首先用户通过 SQL 语句发送对应的请求到达 Spark 的 SQL 执行引擎,SQL 执行引擎将我们提交的请求做语义执行,转化为对应的对数据的操作,之后,将对应的操作和执行处理任务交给Core 来进行计算。
(3)SparkStreaming:微批处理的流处理引擎,将流数据分片以后用SparkCore 的计算引擎中进行处理。相对于 Storm,实时性稍差,优势体现在吞吐量上。
(4)Mllib 和 GraphX 主要一些算法库
(5)FusionInsight Spark 默认运行在 YARN 集群之上。
(6)Structured Streaming 为 2.0 版本之后的 spark 独有。它是构建在SparkSQL 上的计算引擎,其将流式数据理解成为是不断增加的数据库表,这种流式的数据处理模型类似于数据块处理模型,可以把静态数据库表的一些查询操作应用在流式计算中,Spark 执行标准的 SQL 查询,从无边界表中获取数据。


五、HBase
    HBase 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。适合于存储大表数据(表的规模可以达到数十亿行以及数百万列),并且对大表数据的读、写访问可以达到实时级别;利用 Hadoop HDFS(Hadoop Distributed File System)作为其文件存储系统,提供实时读写的分布式数据库系统;利用 ZooKeeper 作为协同服务。
HBase 包含模块:
(1)HMaster
在 HA 模式下,包含主用 Master 和备用 Master。
①主用 Master:负责 HBase 中 RegionServer 的管理,包括表的增删改查;
RegionServer 的负载均衡,Region 分布调整;Region **以及**后的 Region
分配;RegionServer 失效后的 Region 迁移等。
②备用 Master:当主用 Master 故障时,备用 Master 将取代主用 Master 对外提
供服务。故障恢复后,原主用 Master 降为备用。
(2)RegionServer
    RegionServer 负责提供表数据读写等服务,是 HBase 的数据处理和计算单元。        RegionServer 一般与 HDFS 集群的 DataNode 部署在一起,实现数据的存储功能。就像如上所说,RegionServer 这里需要负责的是对 Region 的读写,这个很像是DataNode,只有使用的权限,没有管理的权限。由于 RegionServer 本身在设计时就没有设计管理的权限,所以对于 RegionServer 来说,虽然称之为RegionServer,但是其实际上并没有服务管理的含义只有核心处理的功能,相当于每次用户提交了关于数据库的读写请求之后,RegionServer 只做了相关的处理操作。受理用户的请求,对用户的命令进行解析,并且转化为对应的读写操作和 Zookeeper 以及 Region 进行相关的任务操作执行,并且将最终执行返回的结果进行整合,并返回用户进行查看。
HBase 协作组件:ZooKeeper
    ZooKeeper 为 HBase 集群中各进程提供分布式协作服务。各 RegionServer 将自己的信息注册到 Zookeeper 中,主用 Master 据此感知各个 RegionServer 的健康状态。


六、Streaming
    Streaming 基于开源 Storm,是一个分布式、实时计算框架。Storm可水平扩展,支持容错,保证所有数据被处理,易于安装维护,可以使用各种程序设计语言开发,具备高性能,单节点每秒可以处理上百万记录。
Streaming 具有以下几种特点:
(1) 实时响应,低延迟。
(2) 数据不存储,先计算。
(3) 连续查询。
(4) 事件驱动。
Streaming 中分为了业务进程和数据进程,其中业务逻辑进程有以下几种:
(1) Topology:Streaming 中运行的一个实时应用程序。
(2) Nimbus:负责资源分配和任务调度。
(3) Supervisor:负责接受 Nimbus 分配的任务,启动和停止属于自己管理的 worker 进程。
(4) Worker:Topology 运行时的物理进程。每个 Worker 是一个 JVM 进程。
(5) ZooKeeper:为 Streaming 服务中各进程提供分布式协作服务。主备Nimbus、Supervisor、Worker 将自己的信息注册到 ZooKeeper 中,Nimbus 据此感知各个角色的健康状态。
(6) Task:Worker 中每一个 Spout/Bolt 的线程称为一个 task。
数据进程有以下几种:
(1) Spout:在一个 Topology 中产生源数据流的组件。
(2) Bolt:在一个 Topology 中接受数据然后执行处理的组件。
(3) Tuple: Streaming 的核心数据结构,是消息传递的基本单元,不可变 Key-Value 对,这些 Tuple 会以一种分布式的方式进行创建和处理。
(4) Stream :一个无边界的连续 Tuple 序列。


七、Flink
    Flink 是一个批处理和流处理结合的统一计算框架,其核心是一个提供了数据分发以及并行化计算的流数据处理引擎。它的最大亮点是流处理,是业界最顶级的开源流处理引擎。Flink 与 Storm 类似,属于事件驱动型实时流系统。Flink 最适合的应用场景是低时延的数据处理场景:高并发处理数据,时延毫秒级,且兼具可靠性。
典型应用场景有:
(1) 互联网金融业务。
(2) 点击流日志处理。
(3) **(**情绪)监控。
Flink 的特点有以下几种:
(1) 低时延:提供 ms 级时延的处理能力。
(2) Exactly Once:提供异步快照机制,保证所有数据真正只处理一次
(3) HA:JobManager 支持主备模式,保证无单点故障。
(4) 水平扩展能力:TaskManager 支持手动水平扩展。
Flink 能够支持 Yarn,能够从 HDFS 和 HBase 中获取数据;能够使用所有的Hadoop 的格式化输入和输出;能够使用 Hadoop 原有的 Mappers 和 Reducers,并且能与 Flink 的操作混合使用;能够更快的运行 Hadoop 的作业。


八、Flume
    Flume 是流式日志采集工具,Flume 提供对数据进行简单处理并且写到各种数据接受方(可定制)的能力,Flume 提供从本地文件(spooldirectorysource)、实时日志(taildir、exec)、REST 消息、Thrift、Avro、Syslog、Kafka 等数据源上收集数据的能力。
Flume 适用场景:应用系统产生的日志采集,采集后的数据供上层应用分析。
Flume 不适用场景:大量数据的实时数据采集(要求低延迟、高吞吐率)。与其他开源日志收集工具 scribe 比较而言,几乎不用用户开发,scribe 需要用户另外开发 client,而 Flume 每一种数据源均有相应的 source 去读取或者接收数据。
适用环境:提供从固定目录下采集日志信息到目的地(HDFS,Hbase,Kafka)能力。提供实时采集日志信息(taildir)到目的地的能力。Flume 支持级联(多个 Flume 对接起来),合并数据的能力。Flume 支持按照用户定制采集数据的能力。


九、Solr
    Solr 是一个高性能,基于 Lucene 的全文检索服务,也可以作为 NoSQL 数据库使用。Solr 对 Lucene 进行了扩展,提供了比 Lucene 更为丰富的查询语言,同时实现了可配置、可扩展,并对查询性能进行了优化,还提供了一个完善的功能管理界面。SolrCloud 从 Solr 4.0 版本基于 Solr 和 Zookeeper 进行开发,具有开创意义的分布式索引和搜索方案。
应用场景:
    待检索的数据类型复杂:如需要查询的数据有结构化数据(关系型数据库等)、半结构化数据(网页、XML 等)、非结构化数据(日志、图片、图像等)等,Solr 可以对以上数据类型进行清洗、分词、建立倒排索引等一系列操作(建立索引),然后提供全文检索(查询)的能力。检索条件多样化(如涉及字段太多),常规查询无法满足:全文检索(查询)可以包括词和短语,或者词或短语的多种形式。读数据取远多于写入数据的应用场景。在实际生活中,我们也需要使用到大量的检索服务才可以正常的执行相关的工作,比如春运买票,作为 12306 的系统,我们在买票的时候,后台需要首先检索出我们的数据,之后检查我们的购票记录,然后针对于我们的购票行为还要添加新的 数据到数据库中。那么在 12306 后台数据库中,用户十几亿,如何快速的检索出一条数据这就是我们所需要关注的问题了。
Solr 提供的功能分为:索引和查询。
索引数据涉及的内容:数据来源、索引存储以及索引数据导入方式。
(1)数据来源可以从 DB、HBase、HDFS 等组件的数据导入而来。
(2)索引存储方式 可以选择为存储于本地或者 HDFS。
(3)索引方式 可以采用 MR 的任务进行批量导入及使用客户端 API 实时导入。


十、Kafka
    Kafka 是一个高吞吐、分布式、基于发布订阅的消息系统,利用 Kafka 技术可在廉价 PCServer 上搭建起大规模消息系统。Kafka 和其他组件比较,具有消息持久化、高吞吐、分布式、多客户端支持、实时等特性,适用于离线和在线的消息消费,如常规的消息收集、网站活性跟踪、聚合统计系统运营数据(监控数据)、日志收集等大量数据的互联网服务的数据收集场景。


十一、Zookeeper
    Zookeeper 分布式服务框架主要是用来解决分布式应用中经常遇到的一些数据管理问题,提供分布式、高可用性的协调服务能力,在 FusionInsight 集群中主要用途是保存上层组件的元数据,并保证其主备倒换。
Zookeeper 的作用
(1) 配置管理这个好理解。分布式系统都有好多机器,比如我在搭建 hadoo的 HDFS 的时候,需要在一个主机器上(Master 节点)配置好 HDFS 需要的各种配置文件,然后通过 scp 命令把这些配置文件拷贝到其他节点上,这样各个机器拿到的配置信息是一致的,才能成功运行起来 HDFS 服务。Zookeeper 提供了这样的一种服务:一种集中管理配置的方法,我们在这个集中的地方修改了配置,所有对这个配置感兴趣的都可以获得变更。这样就省去手动拷贝配置了,还保证了可靠和一致性。这里写图片描述
(2) 名字服务这个可以简单理解为一个电话薄,电话号码不好记,但是人名好记,要打谁的电话,直接查人名就好了。分布式环境下,经常需要对应用/服务进行统一命名,便于识别不同服务;类似于域名与 ip 之间对应关系,域名容易记住;通过名称来获取资源或服务的地址,提供者等信息
(3) 分布式锁,单机程序的各个进程需要对互斥资源进行访问时需要加锁,那分布式程序分布在各个主机上的进程对互斥资源进行访问时也需要加锁。很多分布式系统有多个可服务的窗口,但是在某个时刻只让一个服务去干活,当这台服务出问题的时候锁释放,立即 failover 到另外的服务。这在很多分布式系统中都是这么做,这种设计有一个更好听的名字叫LeaderElection(leader 选举)。举个通俗点的例子,比如银行取钱,有多个窗口,但是呢对你来说,只能有一个窗口对你服务,如果正在对你服务的窗口的柜员突然有急事走了,那咋办?找大堂经理(zookeeper)!大堂经理指定另外的一个窗口继续为你服务!
(4) 集群管理,在分布式的集群中,经常会由于各种原因,比如硬件故障,软件故障,网络问题,有些节点会进进出出。有新的节点加入进来,也有老的节点退出集群。这个时候,集群中有些机器(比如 Master 节点)需要感知到这种变化,然后根据这种变化做出对应的决策。我已经知道 HDFS中 namenode 是通过 datanode 的心跳机制来实现上述感知的,那么我们可以先假设 Zookeeper 其实也是实现了类似心跳机制的功能的。
  • x
  • 常规:

点评 回复

智汇云校主要培训华为认证、红帽、Oracle等认证培训,https://www.zhihuirongyun.com
跳转到指定楼层
Becky_2019
Becky_2019  管理员 发表于 2020-2-13 21:52:31 已赞(0) 赞(0)

感谢投稿!^_^
  • x
  • 常规:

点评 回复

发表回复
您需要登录后才可以回帖 登录 | 注册

警告 内容安全提示:尊敬的用户您好,为了保障您、社区及第三方的合法权益,请勿发布可能给各方带来法律风险的内容,包括但不限于政治敏感内容,涉黄赌毒内容,泄露、侵犯他人商业秘密的内容,侵犯他人商标、版本、专利等知识产权的内容,侵犯个人隐私的内容等。也请勿向他人共享您的账号及密码,通过您的账号执行的所有操作,将视同您本人的行为,由您本人承担操作后果。详情请参看“隐私声明
如果附件按钮无法使用,请将Adobe Flash Player 更新到最新版本!
登录参与交流分享

登录参与交流分享

登录