Hue支持展示多种组件,目前支持HDFS、Hive、YARN/MapReduce、Oozie、Solr、ZooKeeper以及Spark。
Hue是建立在Django Python的Web框架上的Web应用程序,采用了MTV(模型M-模板T-视图V)的软件设计模式。(Django Python是开放源代码的Web应用框架。)Hue由“Supervisor Process”和“WebServer”构成。“Supervisor Process”是Hue的核心进程,负责应用进程管理。“Supervisor Process”和“WebServer”通过“THRIFT/REST”接口与WebServer上的应用进行交互,如图所示。
实现FusionInsight HD与关系型数据库、文件系统之间交换数据和文件的数据加载工具;同时也可以将数据从关系型数据库或者文件服务器导入到FusionInsight HD的HDFS/HBase中,或者反过来从HDFS/HBase导出到关系型数据库或者文件服务器中。同时提供REST API接口,供第三方调度平台调用。
Loader模型主要由Loader Client和Loader Server组成:
一个分布式、可靠和高可用的海量日志聚合系统,支持在系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写入各种数据接受方(可定制)的能力。
FTP-Server是一个纯Java的、基于现有开放的FTP协议的FTP服务。FTP-Server支持FTP、FTPS协议,每个服务都支持PORT、PASSIVE数据通信协议。用户或业务组件可通过通用的FTP客户端、传输协议提供对HDFS文件系统进行基本的操作,例如:文件上传、文件下载、目录查看、目录创建、目录删除、文件权限修改等。
FTP-Server服务由多个FTP-Server进程或FTPS-Server进程组成。
FTP-Server服务可以部署在多个节点上,每个节点上只有一个FTP-Server实例,每个实例只有一个FTP Server进程。
建立在Hadoop基础上的开源的数据仓库,提供大数据平台批处理计算能力,能够对结构化/半结构化数据进行批量分析汇总完成数据计算。提供类似SQL的Hive Query Language语言操作结构化数据存储服务和基本的数据分析服务。其基本原理是将HQL语言自动转换成MapReduce任务,从而完成对Hadoop集群中存储的海量数据进行查询和分析。
Hive为单实例的服务进程,提供服务的原理是将HQL编译解析成相应的MapReduce或者HDFS任务,下图为Hive的结构概图。
提供快速并行处理大量数据的能力,是一种分布式数据处理模式和执行环境。MapReduce是一种简化并行计算的编程模型,名字源于该模型中的两项核心操作:Map和Reduce。Map将一个作业分解成为多个任务,Reduce将分解后多个任务处理的结果汇总起来,得出最终的分析结果。
如图所示,MapReduce通过实现YARN的Client和ApplicationMaster接口集成到YARN中,利用YARN申请计算所需资源。
提供分布式、高性能、高可靠、容错的实时计算平台,可以对海量数据进行实时处理。CQL(Continuous Query Language)提供的类SQL流处理语言,可以快速进行业务开发,缩短业务上线时间。
基于内存进行计算的分布式计算框架。在迭代计算的场景下,数据处理过程中的数据可以存储在内存中,提供了比MapReduce高10到100倍的计算能力。Spark可以使用HDFS作为底层存储,使用户能够快速地从MapReduce切换到Spark计算平台上去。Spark提供一站式数据分析能力,包括小批量流式处理、离线批处理、SQL查询、数据挖掘等,用户可以在同一个应用中无缝结合使用这些能力。
一个高性能,基于Lucene的全文检索服务器。Solr对Lucene进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文检索引擎。从Solr 4.0版本开始,支持SolrCloud模式,该模式下能够进行集中式的配置信息、近实时搜索、自动容错等功能。
提供了对开源Hadoop组件的任务编排、执行的功能。以Java Web应用程序的形式运行在Java servlet容器(如:Tomcat)中,并使用数据库来存储工作流定义、当前运行的工作流实例(含实例的状态和变量)。
基于Ext提供WEB Console,该Console仅提供对Oozie工作流的查看和监控功能。通过Oozie对外提REST方式的WS接口,Oozie client通过该接口控制(启动、停止等操作) Workflow流程,从而编排、运行Hadoop MapReduce任务,如下图所示。
一个开源的、基于网络的,高性能的key-value分布式存储数据库,支持丰富的数据类型,弥补了memcached这类key-value存储的不足,满足实时的高并发需求。
Redis跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。支持在服务器端计算集合的并、交和补集(difference)等,还支持多种排序功能。
一个分布式的、分区的、多副本的实时消息发布和订阅系统。它提供了类似于JMS的特性,但在设计上特性,但在设计上完全不同,它具有消息持久化、高吞吐、分布式、多客户端支持、实时等特性,适用于离线和在线的消息消费,如常规的消息收集、网站活性跟踪、聚合统计系统运营数据(监控数据)、日志收集等大量数据的互联网服务的数据收集场景。
Kafka是一个分布式、分区化、多副本的消息发布-订阅系统。生产者(Producer)将消息发布到Kafka主题(Topic),消费者(Consumer)订阅这些主题并消费这些消息。在Kafka集群上一个服务器称为一个Broker。对于每一个主题,Kafka集群保留一个用于缩放、并行化和容错性的分区(Partition)。每个分区是一个有序、不可变的消息序列,并不断追加到提交日志文件。分区的消息每个也被赋值一个称为偏移顺序(Offset)的序列化编号。
资源管理系统,它是一个通用的资源模块,可以为各类应用程序进行资源管理和调度。YARN并不局限于MapReduce,也可以供其他框架使用,比如Tez、Spark、Storm等。YARN类似于资源管理系统Mesos和更早的Torque。
Hadoop分布式文件系统(Hadoop Distributed File System),提供高吞吐量的数据访问,适合大规模数据集方面的应用。为海量数据提供存储,提供类POSIX接口。
HDFS是一个Master/Slave的架构,在Master上运行NameNode,而在每一个Slave上运行DataNode,ZKFC需要和NameNode一起运行。
在HDFS内部,一个文件分成一个或多个“数据块”,这些“数据块”存储在DataNode集合里,NameNode负责保存和管理所有的HDFS元数据。客户端连接到NameNode,执行文件系统的“命名空间”操作,例如打开、关闭、重命名文件和目录,同时决定“数据块”到具体DataNode节点的映射。DataNode在NameNode的指挥下进行“数据块”的创建、删除和复制。客户端连接到DataNode,执行读写数据块操作。
HDFS中NameNode负责管理整个文件系统的元数据。由于NameNode的元数据将使用内存来管理,当产品业务在使用中生成较多的小文件时,会迅速消耗掉NameNode上的内存,对NameNode运行产生压力,影响整个集群的效率。
提供小文件后台合并功能,能够自动发现系统中的小文件(通过文件大小阈值判断),在闲时进行合并,并把元数据存储到本地的LevelDB中,来降低NameNode压力,同时提供新的FileSystem接口,让用户能够透明的对这些小文件进行访问。将大量小文件按一定的周期进行合并、删除、清理任务来减少HDFS上的小文件数量,大大降低NameNode元数据管理压力。
一个具备高可靠性的传统关系型数据库,适用于存储小量数据(10GB左右),比如:组件元数据。DBService仅提供给集群内部的组件使用,如为Hive、Hue、Spark组件提供元数据存储服务,提供数据存储、查询、删除等功能。
DBService组件在集群中采用主备模式部署两个DBServer实例,每个DBServer实例包含三个模块:HA、Database和Floatip。
HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。HBase适合于存储大表数据(表的规模可以达到数十亿行以及数百万列),并且对大表数据的读、写访问可以达到实时级别。提供海量数据存储功能,是一种构建在HDFS之上的分布式、面向列的存储系统。
提供分布式、高可用性的协调服务能力。帮助系统避免单点故障,从而建立可靠的应用程序。