常见的大数据组件有哪些?

2021-04-02 17:31发布

14条回答
小磊子
2楼 · 2021-04-06 09:44

Hadoop生态圈各常用组件介绍


Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。具有可靠、高效、可伸缩的特点。


Hadoop的核心是YARN,HDFS和MapReduce。Hdfs是分布式文件存储系统,用于存储海量数据;MapReduce是并行处理框架,实现任务分解和调度。Hadoop可以用来搭建大型数据仓库,对海量数据进行存储、分析、处理和统计等业务,功能十分强大。


Hadoop具有成熟的生态系统,包括众多的开源工具,从下图可以大致看出Hadoop生态圈的庞大。




图1 hadoop生态圈


下面对其中常用的组件进行介绍。


 


一、 HDFS

Hdfs是hadoop的核心组件,hdfs上的文件被分成块进行存储,默认块的大小是64M,块是文件存储处理的逻辑单元。


HDFS是Master和Slave的结构。分NameNode、SecondaryNameNode、DataNode这几个角色。


NameNode:是Master节点,管理数据块映射,处理客户端的读写请求,配置副本策略,管理HDFS的名称空间;


SecondaryNameNode:是NameNode的冷备份,分担NameNode的工作量,合并fsimage和fsedits然后再发给NameNode,定期同步元数据映像文件和修改日志,当NameNode发生故障时,备份转正。


DataNode:是Slave节点,负责存储client发来的数据块block,执行数据块的读写操作,定期向NameNode发送心跳信息。



图2 hdfs 读文件流程


 


图3 hdfs写文件流程


Hdfs的特点:


1. 数据冗余,硬件容错,每个数据块有三个备份;


2. 流式的数据访问,数据写入不易修改;


3. 适合存储大文件,小文件会增加NameNode的压力。


Hdfs的适用性与局限性;


1. 适合数据批量读写,吞吐量高;


2. 不适合做交互式应用,低延迟很难满足;


3. 适合一次写入多次读取,顺序读写;


4. 不支持多用户并发写相同文件。


二、 MapReduce

MapReduce的工作原理用一句话概括就是,分而治之,然后归约,即将一个大任务分解为多个小任务(map),并行执行后,合并结果(reduce)。


整个MapReduce的过程大致分为Map-->Shuffle(排序)-->Combine(组合)-->Reduce。




图4 MapReduce工作过程


1.将文件拆分成splits(片),并将每个split按行分割形成对。这一步由MapReduce框架自动完成,其中偏移量即key值;


2.将分割好的对交给用户定义的map方法进行处理,生成新的对;


3.得到map方法输出的对后,Mapper会将它们按照key值进行Shuffle(排序),并执行Combine过程,将key值相同得value值累加,得到Mapper的最终输出结果;


4.Reducer先对从Mapper接收的数据进行排序,再交由用户自定义的reduce方法进行处理,得到新的对。


 


三、 YARN

YARN是Hadoop 2.0中的资源管理系统,它的基本设计思想是将MRv1中的JobTracker拆分成了两个独立的服务:一个全局的资源管理器ResourceManager和每个应用程序特有的ApplicationMaster。其中ResourceManager负责整个系统的资源管理和分配,而ApplicationMaster负责单个应用程序的管理。


YARN总体上仍然是Master/Slave结构,在整个资源管理框架中,ResourceManager为Master,NodeManager为Slave,ResourceManager负责对各个NodeManager上的资源进行统一管理和调度。当用户提交一个应用程序时,需要提供一个用以跟踪和管理这个程序的ApplicationMaster,它负责向ResourceManager申请资源,并要求NodeManger启动可以占用一定资源的任务。由于不同的ApplicationMaster被分布到不同的节点上,因此它们之间不会相互影响。


1.ResourceManager(RM)


RM是一个全局的资源管理器,负责整个系统的资源管理和分配。它主要由两个组件构成:调度器(Scheduler)和应用程序管理器(Applications Manager,ASM)。


(1)调度器


调度器根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。


需要注意的是,该调度器是一个“纯调度器”,它不再从事任何与具体应用程序相关的工作,比如不负责监控或者跟踪应用的执行状态等,也不负责重新启动因应用执行失败或者硬件故障而产生的失败任务,这些均交由应用程序相关的ApplicationMaster完成。调度器仅根据各个应用程序的资源需求进行资源分配,而资源分配单位用一个抽象概念“资源容器”(ResourceContainer,简称Container)表示,Container是一个动态资源分配单位,它将内存、CPU、磁盘、网络等资源封装在一起,从而限定每个任务使用的资源量。此外,该调度器是一个可插拔的组件,用户可根据自己的需要设计新的调度器,YARN提供了多种直接可用的调度器,比如Fair Scheduler和Capacity Scheduler等。


(2) 应用程序管理器


应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动它等。


2. ApplicationMaster(AM)


用户提交的每个应用程序均包含1个AM,主要功能包括:


1)  与RM调度器协商以获取资源(用Container表示);


2)  将得到的任务进一步分配给内部的任务;


3)  与NM通信以启动/停止任务;


4)  监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务。


3. NodeManager(NM)


NM是每个节点上的资源和任务管理器,一方面,它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态;另一方面,它接收并处理来自AM的Container启动/停止等各种请求。


4. Container


Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是用Container表示的。YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源。

5. YARN工作流程


当用户向YARN中提交一个应用程序后,YARN将分两个阶段运行该应用程序:


第一个阶段是启动ApplicationMaster;


第二个阶段是由ApplicationMaster创建应用程序,为它申请资源,并监控它的整个运行过程,直到运行完成。


如图5所示,YARN的工作流程分为以下几个步骤:




图5 YARN的工作流程


Step1:用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等;


Step2:ResourceManager为该应用程序分配第一个Container,并与对应的Node-Manager通信,要求它在这个Container中启动应用程序的ApplicationMaster;


Step3:ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7;


Step4:ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源;


Step5:一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务;


Step6:NodeManager为任务设置运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务;


Step7:各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。 在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态;


Step8:应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。


四、 Hive

Hive是构建在Hadoop HDFS上的一个数据仓库,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能,其本质是将SQL转换为MapReduce程序。


数据仓库是一个面向主题的、集成的、不可更新的、随时间变化的数据集合,它用于支持企业或组织的决策分析处理。


Hive的表其实就是HDFS的目录/文件。


1.Hive的体系结构


Hive默认采用的是Derby数据库进行元数据的存储(metastore),也支持mysql数据库。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性,表的数据所在目录等。




图6 Hive的体系结构


2.HQL的执行过程


解释器、编译器、优化器完成HQL查询语句从词语分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后的MapReduce调用执行。


3.Hive安装的三种模式

   1.嵌入模式,数据存储在hive自带的derby数据库,只允许一个连接,多用于本地演示demo;

   2.本地模式,一般是mysql,与hive位于同一台服务器,允许多连接,但实际生产环境并不用这种模式;

   3.远程模式,mysql安装在远程服务器上,允许多连接,多用于实际生产环境。


4.Hive的数据类型


1)基本数据类型


整型:tinyint/smallint/int/bigint


浮点型:float/double


布尔型:Boolean


字符串:string


2)复杂数据类型


数组类型:Array,有一系列相同数据类型的元素组成


集合类型:Map,包括key->value键值对,可以通过key值访问元素


结构类型:struct,可以包含不同数据类型的元素,可以通过“点语法”的方式获得这些元素


3)时间类型


Date


Timestamp


5.hive与关系型数据库的不同


1)  hive和关系数据库存储文件的系统不同,hive使用的是hadoop的HDFS(hadoop的分布式文件系统),关系数据库则是服务器本地的文件系统;


2)  hive使用的计算模型是mapreduce,而关系数据库则是自己设计的计算模型;


3)  关系数据库都是为实时查询的业务进行设计的,而hive则是为海量数据做数据挖掘设计的,实时性很差;实时性的区别导致hive的应用场景和关系数据库有很大的不同;


4)  Hive很容易扩展自己的存储能力和计算能力,这个是继承hadoop的,而关系数据库在这个方面要比数据库差很多。


6.Hive的管理


1)命令行方式(CLI方式)


--hive


--hive --service ci


2)web界面方式


端口号:9999


启动方式:hive --service hwi &


通过浏览器访问:http://:9999/hwi/


3)远程服务访问


       一个表可以有一个或者多个分区列,Hive将会为分区列上的每个不同的值组合创建单独的数据目录。分区列是虚拟列,要避免分区列名和数据列名相同,可以基于分区列进行查询。


 


五、 Pig

Pig是yahoo捐献给apache的一个项目,使用SQL-like语言,是在MapReduce上构建的一种高级查询语言,把一些运算编译进MapReduce模型的Map和Reduce中。


1.Pig运行模式:


1)  本地模式:Pig运行于本地模式,只涉及单独的一台计算机;本地模式下不支持MapReduce的(线程)并行,因为在当前的hadoop版本中,hadoop的LocalJobRunner 运行器不是一个线程安全的类。


2)  MapReduce模式:Pig运行于MapReduce模式,需要能访问一个Hadoop集群,并且需要装上HDFS。


以pig命令方式启动:


(1):pig -x local (local模式)


(2)pig -x mapreduce (集群模式)


以java命令启动模式:


(1),java -cp pig.jar  org.opache.pig.Main -xlocal (local模式)


(2),java -cp pig.jar  org.opache.pig.Main -xmapreduce (集群模式)


2.Pig调用方式:


1)  Grunt shell方式:通过交互的方式,输入命令执行任务;


2)  Pig script方式:通过script脚本的方式来运行任务。我们可以把pig的一系列处理,封装成一个pig脚本文件,后缀名以.pig结尾,正如我们把linux命令封装在.sh的脚本里,这样执行起来非常方便,而且容易管理。


3.pig的注释:


(1)多行注释:/*pig脚本语句*/


(2)当行注释:- - pig脚本语句


4.pig语法


在pig中,pig latin是使用pig来处理数据的基本语法,这类似于我们在数据库系统中使用SQL语句一样。


Pig latin语句,通常组织如下:


(一)一个load声明从文件系统上加载数据


使用load操作和(load/store)函数读数据进入Pig(默认的存储模式是PigStorage);


(二)一系列的转化语句去处理数据


使用filter语句来过滤tuple或一行数据(类似于SQL中的where);使用foreach语句来操作列的数据(类似于 select field1,filed 2 ,.... from table里面限制列返回。);使用group语句来分组(类似SQL里面的group by);使用cogroup,inner join,outerjoin来分组或关联两个以上的表关联(与SQL里的join类似);使用union语句来合并两个以上关系的结果数据,使用split语句可以把一个表拆分为多个分散的小表(注意在这里说表,只是为了方便理解,在pig没有表这一个概念).


(三)一个dump语句,来展示结果或者store语句来存储结果,只有Dump和Store语句能产生输出


使用store操作和load/store函数,可以将结果集写入文件系统中,默认的存储格式是PigStorage,在测试阶段,可以使用dump命令,直接将结果显示在我们的屏幕上,方便调试,在一个生产环境中,一般使用store语句,来永久存储结果集。


pig提供了一写操作符,来帮助我们调试我们的结果:


使用dump语句,显示结果在我们的终端屏幕上;


使用describe语句,来显示我们的schema的关系(类似查看表的结构);


使用explain语句,来显示我们的执行逻辑或物理视图,可以帮助我们查看map,reduce的执行计划;


使用illustrate语句,可以一步步的查看我们的语句执行步骤;


此外,pig还定义了一些非常方面的别名集,来快速帮助我们调试脚本:


dump的别名 \d;describe的别名 \de;explain的别名 \e;illustrate的别名  \i;退出\q.


六、 Zookeeper

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。


ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。


ZooKeeper本质上是一个分布式的小文件存储系统。原本是Apache Hadoop的一个组件,现在被拆分为一个Hadoop的独立子项目,在Hbase(Hadoop的另外一个被拆分出来的子项目,用于分布式环境下的超大数据量的DBMS)中也用到了ZooKeeper集群。 


Hadoop,使用Zookeeper的事件处理确保整个集群只有一个NameNode,存储配置信息等.

  HBase,使用Zookeeper的事件处理确保整个集群只有一个HMaster,察觉HRegionServer联机和宕机,存储访问控制列表等。


1. 启动ZK服务:       sh bin/zkServer.sh start


2. 查看ZK服务状态: sh bin/zkServer.sh status


3. 停止ZK服务:       sh bin/zkServer.sh stop


4. 重启ZK服务:       sh bin/zkServer.sh restart


七、 Hbase

1.HBase简介


HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。


HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。


在hadoop 的各层系统中,HBase位于结构化存储层,Hadoop HDFS为HBase提供了高可靠性的底层存储支持;Hadoop MapReduce为HBase提供了高性能的计算能力;Zookeeper为HBase提供了稳定服务和failover机制(failover 又称故障切换,指系统中其中一项设备或服务失效而无法运作时,另一项设备或服务即可自动接手原失效系统所执行的工作);Pig和Hive为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单; Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。


Row Key: 行键,Table的主键,Table中的记录按照Row Key排序;


Timestamp: 时间戳,每次数据操作对应的时间戳,可以看作是数据的version number;


Column Family:列簇,Table在水平方向有一个或者多个Column Family组成,一个Column Family中可以由任意多个Column组成,即Column Family支持动态扩展,无需预先定义Column的数量以及类型,所有Column均以二进制格式存储,用户需要自行进行类型转换。


Hbase shell 常用命令


名称


命令表达式


创建表


create '表名称', '列名称1','列名称2','列名称N'


添加记录      


put '表名称', '行名称', '列名称:', '值'


查看记录


get '表名称', '行名称'


查看表中的记录总数


count  '表名称'


删除记录


delete  '表名' ,'行名称' , '列名称'


删除一张表


先要屏蔽该表,才能对该表进行删除,第一步 disable '表名称' 第二步 drop '表名称'


查看所有记录


scan "表名称"  


查看某个表某个列中所有数据


scan "表名称" , ['列名称:']


更新记录


就是重写一遍进行覆盖


八、 Sqoop

 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据移植过去并不容易。Apache Sqoop正在加紧帮助客户将重要数据从数据库移到Hadoop。随着Hadoop和关系型数据库之间的数据移动渐渐变成一个标准的流程,云管理员们能够利用Sqoop的并行批量数据加载能力来简化这一流程,降低编写自定义数据加载脚本的需求。


Apache Sqoop(SQL-to-Hadoop)项目旨在协助 RDBMS 与 Hadoop 之间进行高效的大数据交流。用户可以在 Sqoop 的帮助下,轻松地把关系型数据库的数据导入到 Hadoop 与其相关的系统 (如HBase和Hive)中;同时也可以把数据从 Hadoop 系统里抽取并导出到关系型数据库里。因此,可以说Sqoop就是一个桥梁,连接了关系型数据库与Hadoop。




图7 sqoop作用


sqoop中一大亮点就是可以通过hadoop的mapreduce把数据从关系型数据库中导入数据到HDFS。Sqoop架构非常简单,其整合了Hive、Hbase和Oozie,通过map-reduce任务来传输数据,从而提供并发特性和容错。


 Sqoop工作机制:Sqoop在import时,需要制定split-by参数。Sqoop根据不同的split-by参数值来进行切分,然后将切分出来的区域分配到不同map中。每个map中再处理数据库中获取的一行一行的值,写入到HDFS中(由此也可知,导入导出的事务是以Mapper任务为单位)。同时split-by根据不同的参数类型有不同的切分方法,如比较简单的int型,Sqoop会取最大和最小split-by字段值,然后根据传入的num-mappers来确定划分几个区域。


表2 sqoop1和sqoop2区别


功能


Sqoop 1


Sqoop 2


用于所有主要 RDBMS 的连接器


支持


不支持


解决办法: 使用已在以下数据库上执行测试的通用 JDBC 连接器: Microsoft SQL Server 、PostgreSQL 、 MySQL 和 Oracle 。


此连接器应在任何其它符合 JDBC 要求的数据库上运行。但是,性能可能无法与 Sqoop 中的专用连接器相比 


Kerberos 安全集成


支持


不支持


数据从 RDBMS 传输至 Hive或 HBase


支持


不支持


解决办法: 按照此两步方法操作。


将数据从 RDBMS 导入HDFS


在 Hive 中使用相应的工具和命令(例如   LOAD DATA   语句),手动将数据载入 Hive 或 HBase


数据从 Hive或HBase传输至RDBMS


不支持


解决办法: 按照此两步方法操作。


 从 Hive 或HBase 将数据提取至 HDFS(作为文本或Avro 文件)


使用 Sqoop 将上一步的输出导出至RDBMS


不支持


按照与 Sqoop 1 相同的解决方法操作


九、 Flume

Flume 作为cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用。Flume 初始的发行版本目前被统称为Flume OG(original generation),属于 cloudera。重构后的版本统称为 Flume NG(next generation),属于Apache。


1.OG与NG比较


架构方面:


Flume OG有三种角色的节点:代理节点agent、收集节点collector、主节点master;


agent负责从各个数据源收集日志数据、将收集到的数据集中到collector,再由collector节点汇总存入到HDFS.而master负责管理agent\collector的活动;


agent、collector都称为node,node的角色根据配置的不同分为逻辑节点和物理节点,对于逻辑节点的区分、配置、使用非常复杂.

agent、collector由source、sink组成,表示当前节点的数据从source传送到sink


以上相对于Flume NG来说:


Flume NG只有一种角色节点:代理节点agent没有collector、master节点,这是最核心的变化.


去除逻辑节点和物理节点的概念和内容


agent节点的组成发生变化,由source、sink、channel三个组件组成。


Zookeeper方面:


Flume OG的稳定性依赖zookeeper,它需要zookeeper对其多类节点的工作进行管理,虽然OG可以使用内存的方式对各类节点进行管理,但需要用户忍受机器出现故障时信息丢失的出现.


Flume NG的节点角色数量由原来的3个缩减为1个,不存在多类角色的问题,所以不再需要zookeeper对各类节点协调的作用,由此脱离了对zookeeper的依赖.


2.flume中核心概念


组件


功能


Agent


使用JVM 运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。


Client


生产数据,运行在一个独立的线程。


Source


从Client收集数据,传递给Channel。


Sink


从Channel收集数据,运行在一个独立线程。


Channel


连接 sources 和 sinks ,这个有点像一个队列。


Events


可以是日志记录、 avro 对象等。


 


3.数据流模型


Flume(水道)以agent为最小的独立运行单位。一个agent就是一个JVM。单agent由Source、Sink和Channel三大组件构成,如下图:


 


Flume的数据流由事件(Event)贯穿始终。事件是Flume的基本数据单位,它携带日志数据(字节数组形式)并且携带有头信息,这些Event由Agent外部的Source,比如上图中的Web Server生成。当Source捕获事件后会进行特定的格式化,然后Source会把事件推入(单个或多个)Channel中。你可以把Channel看作是一个缓冲区,它将保存事件直到Sink处理完该事件。Sink负责持久化日志或者把事件推向另一个Source。很直白的设计,其中值得注意的是,Flume提供了大量内置的Source、Channel和Sink类型。不同类型的Source,Channel和Sink可以自由组合。组合方式基于用户设置的配置文件,非常灵活。比如:Channel可以把事件暂存在内存里,也可以持久化到本地硬盘上。Sink可以把日志写入HDFS, Hbase,甚至是另外一个Source等等。


ban_gank
3楼 · 2021-04-06 10:02

Hdfs是hadoop的核心组件,hdfs上的文件被分成块进行存储,默认块的大小是64M,块是文件存储处理的逻辑单元。

MapReduce的工作原理用一句话概括就是,分而治之,然后归约,即将一个大任务分解为多个小任务(map),并行执行后,合并结果(reduce)。

YARN是Hadoop 2.0中的资源管理系统,它的基本设计思想是将MRv1中的JobTracker拆分成了两个独立的服务:一个全局的资源管理器ResourceManager和每个应用程序特有的ApplicationMaster。其中ResourceManager负责整个系统的资源管理和分配,而ApplicationMaster负责单个应用程序的管理。

Hive是构建在Hadoop HDFS上的一个数据仓库,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能,其本质是将SQL转换为MapReduce程序。

Pig是yahoo捐献给apache的一个项目,使用SQL-like语言,是在MapReduce上构建的一种高级查询语言,把一些运算编译进MapReduce模型的Map和Reduce中。

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等

HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。

Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据移植过去并不容易。Apache Sqoop正在加紧帮助客户将重要数据从数据库移到Hadoop。随着Hadoop和关系型数据库之间的数据移动渐渐变成一个标准的流程,云管理员们能够利用Sqoop的并行批量数据加载能力来简化这一流程,降低编写自定义数据加载脚本的需求。

Flume 作为cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用。Flume 初始的发行版本目前被统称为Flume OG(original generation),属于 cloudera。重构后的版本统称为 Flume NG(next generation),属于Apache。


樱田妮妮NiNi
4楼 · 2021-04-06 11:14

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。具有可靠、高效、可伸缩的特点。


Hadoop的核心是YARN,HDFS和MapReduce。Hdfs是分布式文件存储系统,用于存储海量数据;MapReduce是并行处理框架,实现任务分解和调度。Hadoop可以用来搭建大型数据仓库,对海量数据进行存储、分析、处理和统计等业务,功能十分强大。



三岁奶猫
5楼 · 2021-04-06 13:14

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。具有可靠、高效、可伸缩的特点。

JJN
6楼 · 2021-04-06 13:38

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是GoogleChubby一个开源的实现,是HadoopHbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

ZooKeeper包含一个简单的原语集,  提供JavaC的接口。

ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在zookeeper-3.4.3\src\recipes。其中分布锁和队列有JavaC两个版本,选举只有Java版本。

那么Zookeeper能做什么事情呢,简单的例子:假设我们有20搜索引擎服务器(每个负责总索引中的一部分的搜索任务)和一个总服务器(负责向这20个搜索引擎的服务器发出搜索请求并合并结果集),一个备用的总服务器(负责当总服务器宕机时替换总服务器),一个webcgi(向总服务器发出搜索请求)。搜索引擎的服务器中的15个服务器提供搜索服务,5个服务器正在生成索引。这20个搜索引擎的服务器经常要让正在提供搜索服务的服务器停止提供服务开始生成索引,或生成索引的服务器已经把索引生成完成可以提供搜索服务了。使用Zookeeper可以保证总服务器自动感知有多少提供搜索引擎的服务器并向这些服务器发出搜索请求,当总服务器宕机时自动启用备用的总服务器。

 

二、spark

Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎SparkUC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。

Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。

Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。

Spark 主要有三个特点 

首先,高级 API 剥离了对集群本身的关注,Spark 应用开发者可以专注于应用所要做的计算本身。

其次,Spark 很快,支持交互式计算和复杂算法。

最后,Spark 是一个通用引擎,可用它来完成各种各样的运算,包括 SQL 查询、文本处理、机器学习等,而在 Spark 出现之前,我们一般需要学习各种各样的引擎来分别处理这些需求。

三、kafka

Kafka是由Apache软件基金会开发的一个开源流处理平台,由ScalaJava编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消费。

特性:

通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。

高吞吐量 :即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。

支持通过Kafka服务器和消费机集群来分区消息。

支持Hadoop并行数据加载。


猫的想法不敢猜
7楼 · 2021-04-06 19:15

一、 HDFS

Hdfs是hadoop的核心组件,hdfs上的文件被分成块进行存储,默认块的大小是64M,块是文件存储处理的逻辑单元。


HDFS是Master和Slave的结构。分NameNode、SecondaryNameNode、DataNode这几个角色。


NameNode:是Master节点,管理数据块映射,处理客户端的读写请求,配置副本策略,管理HDFS的名称空间;


SecondaryNameNode:是NameNode的冷备份,分担NameNode的工作量,合并fsimage和fsedits然后再发给NameNode,定期同步元数据映像文件和修改日志,当NameNode发生故障时,备份转正。


DataNode:是Slave节点,负责存储client发来的数据块block,执行数据块的读写操作,定期向NameNode发送心跳信息。


图2 hdfs 读文件流程


 


图3 hdfs写文件流程


Hdfs的特点:


1. 数据冗余,硬件容错,每个数据块有三个备份;


2. 流式的数据访问,数据写入不易修改;


3. 适合存储大文件,小文件会增加NameNode的压力。


Hdfs的适用性与局限性;


1. 适合数据批量读写,吞吐量高;


2. 不适合做交互式应用,低延迟很难满足;


3. 适合一次写入多次读取,顺序读写;


4. 不支持多用户并发写相同文件。


二、 MapReduce

MapReduce的工作原理用一句话概括就是,分而治之,然后归约,即将一个大任务分解为多个小任务(map),并行执行后,合并结果(reduce)。


整个MapReduce的过程大致分为Map-->Shuffle(排序)-->Combine(组合)-->Reduce。



图4 MapReduce工作过程


1.将文件拆分成splits(片),并将每个split按行分割形成对。这一步由MapReduce框架自动完成,其中偏移量即key值;


2.将分割好的对交给用户定义的map方法进行处理,生成新的对;


3.得到map方法输出的对后,Mapper会将它们按照key值进行Shuffle(排序),并执行Combine过程,将key值相同得value值累加,得到Mapper的最终输出结果;


4.Reducer先对从Mapper接收的数据进行排序,再交由用户自定义的reduce方法进行处理,得到新的对。


 


三、 YARN

YARN是Hadoop 2.0中的资源管理系统,它的基本设计思想是将MRv1中的JobTracker拆分成了两个独立的服务:一个全局的资源管理器ResourceManager和每个应用程序特有的ApplicationMaster。其中ResourceManager负责整个系统的资源管理和分配,而ApplicationMaster负责单个应用程序的管理。


YARN总体上仍然是Master/Slave结构,在整个资源管理框架中,ResourceManager为Master,NodeManager为Slave,ResourceManager负责对各个NodeManager上的资源进行统一管理和调度。当用户提交一个应用程序时,需要提供一个用以跟踪和管理这个程序的ApplicationMaster,它负责向ResourceManager申请资源,并要求NodeManger启动可以占用一定资源的任务。由于不同的ApplicationMaster被分布到不同的节点上,因此它们之间不会相互影响。


1.ResourceManager(RM)


RM是一个全局的资源管理器,负责整个系统的资源管理和分配。它主要由两个组件构成:调度器(Scheduler)和应用程序管理器(Applications Manager,ASM)。


(1)调度器


调度器根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。


需要注意的是,该调度器是一个“纯调度器”,它不再从事任何与具体应用程序相关的工作,比如不负责监控或者跟踪应用的执行状态等,也不负责重新启动因应用执行失败或者硬件故障而产生的失败任务,这些均交由应用程序相关的ApplicationMaster完成。调度器仅根据各个应用程序的资源需求进行资源分配,而资源分配单位用一个抽象概念“资源容器”(ResourceContainer,简称Container)表示,Container是一个动态资源分配单位,它将内存、CPU、磁盘、网络等资源封装在一起,从而限定每个任务使用的资源量。此外,该调度器是一个可插拔的组件,用户可根据自己的需要设计新的调度器,YARN提供了多种直接可用的调度器,比如Fair Scheduler和Capacity Scheduler等。


(2) 应用程序管理器


应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动它等。


2. ApplicationMaster(AM)


用户提交的每个应用程序均包含1个AM,主要功能包括:


1)  与RM调度器协商以获取资源(用Container表示);


2)  将得到的任务进一步分配给内部的任务;


3)  与NM通信以启动/停止任务;


4)  监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务。


3. NodeManager(NM)


NM是每个节点上的资源和任务管理器,一方面,它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态;另一方面,它接收并处理来自AM的Container启动/停止等各种请求。


4. Container


Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是用Container表示的。YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源。

5. YARN工作流程


当用户向YARN中提交一个应用程序后,YARN将分两个阶段运行该应用程序:


第一个阶段是启动ApplicationMaster;


第二个阶段是由ApplicationMaster创建应用程序,为它申请资源,并监控它的整个运行过程,直到运行完成。


如图5所示,YARN的工作流程分为以下几个步骤:



图5 YARN的工作流程


Step1:用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等;


Step2:ResourceManager为该应用程序分配第一个Container,并与对应的Node-Manager通信,要求它在这个Container中启动应用程序的ApplicationMaster;


Step3:ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7;


Step4:ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源;


Step5:一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务;


Step6:NodeManager为任务设置运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务;


Step7:各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。 在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态;


Step8:应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。


四、 Hive

Hive是构建在Hadoop HDFS上的一个数据仓库,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能,其本质是将SQL转换为MapReduce程序。


数据仓库是一个面向主题的、集成的、不可更新的、随时间变化的数据集合,它用于支持企业或组织的决策分析处理。


Hive的表其实就是HDFS的目录/文件。


1.Hive的体系结构


Hive默认采用的是Derby数据库进行元数据的存储(metastore),也支持mysql数据库。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性,表的数据所在目录等。



图6 Hive的体系结构


2.HQL的执行过程


解释器、编译器、优化器完成HQL查询语句从词语分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后的MapReduce调用执行。


3.Hive安装的三种模式

   1.嵌入模式,数据存储在hive自带的derby数据库,只允许一个连接,多用于本地演示demo;

   2.本地模式,一般是mysql,与hive位于同一台服务器,允许多连接,但实际生产环境并不用这种模式;

   3.远程模式,mysql安装在远程服务器上,允许多连接,多用于实际生产环境。


4.Hive的数据类型


1)基本数据类型


整型:tinyint/smallint/int/bigint


浮点型:float/double


布尔型:Boolean


字符串:string


2)复杂数据类型


数组类型:Array,有一系列相同数据类型的元素组成


集合类型:Map,包括key->value键值对,可以通过key值访问元素


结构类型:struct,可以包含不同数据类型的元素,可以通过“点语法”的方式获得这些元素


3)时间类型


Date


Timestamp


5.hive与关系型数据库的不同


1)  hive和关系数据库存储文件的系统不同,hive使用的是hadoop的HDFS(hadoop的分布式文件系统),关系数据库则是服务器本地的文件系统;


2)  hive使用的计算模型是mapreduce,而关系数据库则是自己设计的计算模型;


3)  关系数据库都是为实时查询的业务进行设计的,而hive则是为海量数据做数据挖掘设计的,实时性很差;实时性的区别导致hive的应用场景和关系数据库有很大的不同;


4)  Hive很容易扩展自己的存储能力和计算能力,这个是继承hadoop的,而关系数据库在这个方面要比数据库差很多。


6.Hive的管理


1)命令行方式(CLI方式)


--hive


--hive --service ci


2)web界面方式


端口号:9999


启动方式:hive --service hwi &


通过浏览器访问:http://:9999/hwi/


3)远程服务访问


       一个表可以有一个或者多个分区列,Hive将会为分区列上的每个不同的值组合创建单独的数据目录。分区列是虚拟列,要避免分区列名和数据列名相同,可以基于分区列进行查询。


 


五、 Pig

Pig是yahoo捐献给apache的一个项目,使用SQL-like语言,是在MapReduce上构建的一种高级查询语言,把一些运算编译进MapReduce模型的Map和Reduce中。


1.Pig运行模式:


1)  本地模式:Pig运行于本地模式,只涉及单独的一台计算机;本地模式下不支持MapReduce的(线程)并行,因为在当前的hadoop版本中,hadoop的LocalJobRunner 运行器不是一个线程安全的类。


2)  MapReduce模式:Pig运行于MapReduce模式,需要能访问一个Hadoop集群,并且需要装上HDFS。


以pig命令方式启动:


(1):pig -x local (local模式)


(2)pig -x mapreduce (集群模式)


以java命令启动模式:


(1),java -cp pig.jar  org.opache.pig.Main -xlocal (local模式)


(2),java -cp pig.jar  org.opache.pig.Main -xmapreduce (集群模式)


2.Pig调用方式:


1)  Grunt shell方式:通过交互的方式,输入命令执行任务;


2)  Pig script方式:通过script脚本的方式来运行任务。我们可以把pig的一系列处理,封装成一个pig脚本文件,后缀名以.pig结尾,正如我们把linux命令封装在.sh的脚本里,这样执行起来非常方便,而且容易管理。


3.pig的注释:


(1)多行注释:/*pig脚本语句*/


(2)当行注释:- - pig脚本语句


4.pig语法


在pig中,pig latin是使用pig来处理数据的基本语法,这类似于我们在数据库系统中使用SQL语句一样。


Pig latin语句,通常组织如下:


(一)一个load声明从文件系统上加载数据


使用load操作和(load/store)函数读数据进入Pig(默认的存储模式是PigStorage);


(二)一系列的转化语句去处理数据


使用filter语句来过滤tuple或一行数据(类似于SQL中的where);使用foreach语句来操作列的数据(类似于 select field1,filed 2 ,.... from table里面限制列返回。);使用group语句来分组(类似SQL里面的group by);使用cogroup,inner join,outerjoin来分组或关联两个以上的表关联(与SQL里的join类似);使用union语句来合并两个以上关系的结果数据,使用split语句可以把一个表拆分为多个分散的小表(注意在这里说表,只是为了方便理解,在pig没有表这一个概念).


(三)一个dump语句,来展示结果或者store语句来存储结果,只有Dump和Store语句能产生输出


使用store操作和load/store函数,可以将结果集写入文件系统中,默认的存储格式是PigStorage,在测试阶段,可以使用dump命令,直接将结果显示在我们的屏幕上,方便调试,在一个生产环境中,一般使用store语句,来永久存储结果集。


pig提供了一写操作符,来帮助我们调试我们的结果:


使用dump语句,显示结果在我们的终端屏幕上;


使用describe语句,来显示我们的schema的关系(类似查看表的结构);


使用explain语句,来显示我们的执行逻辑或物理视图,可以帮助我们查看map,reduce的执行计划;


使用illustrate语句,可以一步步的查看我们的语句执行步骤;


此外,pig还定义了一些非常方面的别名集,来快速帮助我们调试脚本:


dump的别名 \d;describe的别名 \de;explain的别名 \e;illustrate的别名  \i;退出\q.


六、 Zookeeper

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。


ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。


ZooKeeper本质上是一个分布式的小文件存储系统。原本是Apache Hadoop的一个组件,现在被拆分为一个Hadoop的独立子项目,在Hbase(Hadoop的另外一个被拆分出来的子项目,用于分布式环境下的超大数据量的DBMS)中也用到了ZooKeeper集群。 


Hadoop,使用Zookeeper的事件处理确保整个集群只有一个NameNode,存储配置信息等.

  HBase,使用Zookeeper的事件处理确保整个集群只有一个HMaster,察觉HRegionServer联机和宕机,存储访问控制列表等。


1. 启动ZK服务:       sh bin/zkServer.sh start


2. 查看ZK服务状态: sh bin/zkServer.sh status


3. 停止ZK服务:       sh bin/zkServer.sh stop


4. 重启ZK服务:       sh bin/zkServer.sh restart


七、 Hbase

1.HBase简介


HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。


HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。


在hadoop 的各层系统中,HBase位于结构化存储层,Hadoop HDFS为HBase提供了高可靠性的底层存储支持;Hadoop MapReduce为HBase提供了高性能的计算能力;Zookeeper为HBase提供了稳定服务和failover机制(failover 又称故障切换,指系统中其中一项设备或服务失效而无法运作时,另一项设备或服务即可自动接手原失效系统所执行的工作);Pig和Hive为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单; Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。


Row Key: 行键,Table的主键,Table中的记录按照Row Key排序;


Timestamp: 时间戳,每次数据操作对应的时间戳,可以看作是数据的version number;


Column Family:列簇,Table在水平方向有一个或者多个Column Family组成,一个Column Family中可以由任意多个Column组成,即Column Family支持动态扩展,无需预先定义Column的数量以及类型,所有Column均以二进制格式存储,用户需要自行进行类型转换。


Hbase shell 常用命令


名称


命令表达式


创建表


create '表名称', '列名称1','列名称2','列名称N'


添加记录      


put '表名称', '行名称', '列名称:', '值'


查看记录


get '表名称', '行名称'


查看表中的记录总数


count  '表名称'


删除记录


delete  '表名' ,'行名称' , '列名称'


删除一张表


先要屏蔽该表,才能对该表进行删除,第一步 disable '表名称' 第二步 drop '表名称'


查看所有记录


scan "表名称"  


查看某个表某个列中所有数据


scan "表名称" , ['列名称:']


更新记录


就是重写一遍进行覆盖


八、 Sqoop

 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据移植过去并不容易。Apache Sqoop正在加紧帮助客户将重要数据从数据库移到Hadoop。随着Hadoop和关系型数据库之间的数据移动渐渐变成一个标准的流程,云管理员们能够利用Sqoop的并行批量数据加载能力来简化这一流程,降低编写自定义数据加载脚本的需求。


Apache Sqoop(SQL-to-Hadoop)项目旨在协助 RDBMS 与 Hadoop 之间进行高效的大数据交流。用户可以在 Sqoop 的帮助下,轻松地把关系型数据库的数据导入到 Hadoop 与其相关的系统 (如HBase和Hive)中;同时也可以把数据从 Hadoop 系统里抽取并导出到关系型数据库里。因此,可以说Sqoop就是一个桥梁,连接了关系型数据库与Hadoop。



图7 sqoop作用


sqoop中一大亮点就是可以通过hadoop的mapreduce把数据从关系型数据库中导入数据到HDFS。Sqoop架构非常简单,其整合了Hive、Hbase和Oozie,通过map-reduce任务来传输数据,从而提供并发特性和容错。


 Sqoop工作机制:Sqoop在import时,需要制定split-by参数。Sqoop根据不同的split-by参数值来进行切分,然后将切分出来的区域分配到不同map中。每个map中再处理数据库中获取的一行一行的值,写入到HDFS中(由此也可知,导入导出的事务是以Mapper任务为单位)。同时split-by根据不同的参数类型有不同的切分方法,如比较简单的int型,Sqoop会取最大和最小split-by字段值,然后根据传入的num-mappers来确定划分几个区域。


表2 sqoop1和sqoop2区别


功能


Sqoop 1


Sqoop 2


用于所有主要 RDBMS 的连接器


支持


不支持


解决办法: 使用已在以下数据库上执行测试的通用 JDBC 连接器: Microsoft SQL Server 、PostgreSQL 、 MySQL 和 Oracle 。


此连接器应在任何其它符合 JDBC 要求的数据库上运行。但是,性能可能无法与 Sqoop 中的专用连接器相比 


Kerberos 安全集成


支持


不支持


数据从 RDBMS 传输至 Hive或 HBase


支持


不支持


解决办法: 按照此两步方法操作。


将数据从 RDBMS 导入HDFS


在 Hive 中使用相应的工具和命令(例如   LOAD DATA   语句),手动将数据载入 Hive 或 HBase


数据从 Hive或HBase传输至RDBMS


不支持


解决办法: 按照此两步方法操作。


 从 Hive 或HBase 将数据提取至 HDFS(作为文本或Avro 文件)


使用 Sqoop 将上一步的输出导出至RDBMS


不支持


按照与 Sqoop 1 相同的解决方法操作


九、 Flume

Flume 作为cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用。Flume 初始的发行版本目前被统称为Flume OG(original generation),属于 cloudera。重构后的版本统称为 Flume NG(next generation),属于Apache。


1.OG与NG比较


架构方面:


Flume OG有三种角色的节点:代理节点agent、收集节点collector、主节点master;


agent负责从各个数据源收集日志数据、将收集到的数据集中到collector,再由collector节点汇总存入到HDFS.而master负责管理agent\collector的活动;


agent、collector都称为node,node的角色根据配置的不同分为逻辑节点和物理节点,对于逻辑节点的区分、配置、使用非常复杂.

agent、collector由source、sink组成,表示当前节点的数据从source传送到sink


以上相对于Flume NG来说:


Flume NG只有一种角色节点:代理节点agent没有collector、master节点,这是最核心的变化.


去除逻辑节点和物理节点的概念和内容


agent节点的组成发生变化,由source、sink、channel三个组件组成。


Zookeeper方面:


Flume OG的稳定性依赖zookeeper,它需要zookeeper对其多类节点的工作进行管理,虽然OG可以使用内存的方式对各类节点进行管理,但需要用户忍受机器出现故障时信息丢失的出现.


Flume NG的节点角色数量由原来的3个缩减为1个,不存在多类角色的问题,所以不再需要zookeeper对各类节点协调的作用,由此脱离了对zookeeper的依赖.


2.flume中核心概念


组件


功能


Agent


使用JVM 运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。


Client


生产数据,运行在一个独立的线程。


Source


从Client收集数据,传递给Channel。


Sink


从Channel收集数据,运行在一个独立线程。


Channel


连接 sources 和 sinks ,这个有点像一个队列。


Events


可以是日志记录、 avro 对象等。


 


3.数据流模型


Flume(水道)以agent为最小的独立运行单位。一个agent就是一个JVM。单agent由Source、Sink和Channel三大组件构成,如下图:


 

Flume的数据流由事件(Event)贯穿始终。事件是Flume的基本数据单位,它携带日志数据(字节数组形式)并且携带有头信息,这些Event由Agent外部的Source,比如上图中的Web Server生成。当Source捕获事件后会进行特定的格式化,然后Source会把事件推入(单个或多个)Channel中。你可以把Channel看作是一个缓冲区,它将保存事件直到Sink处理完该事件。Sink负责持久化日志或者把事件推向另一个Source。很直白的设计,其中值得注意的是,Flume提供了大量内置的Source、Channel和Sink类型。不同类型的Source,Channel和Sink可以自由组合。组合方式基于用户设置的配置文件,非常灵活。比如:Channel可以把事件暂存在内存里,也可以持久化到本地硬盘上。Sink可以把日志写入HDFS, Hbase,甚至是另外一个Source等等。

————————————————

版权声明:本文为CSDN博主「wangqianqjl」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/baidu_28398971/article/details/70821114


香蕉牛油果酸奶
8楼 · 2021-04-07 10:01

1. 开源大数据生态圈
Hadoop HDFS、Hadoop MapReduce, HBase、Hive 渐次诞生,早期Hadoop生态圈逐步形成。
开源生态圈活跃,并免费,但Hadoop对技术要求高,实时性稍差。

2. 商用大数据分析工具
一体机数据库/数据仓库(费用很高)

IBM PureData(Netezza), Oracle Exadata, SAP Hana等等。

数据仓库(费用较高)
Teradata AsterData, EMC GreenPlum, HP Vertica 等等。

数据集市(费用一般)
QlikView、 Tableau 、国内永洪科技Yonghong Data Mart 等等。

前端展现
用于展现分析的前端开源工具有JasperSoft,Pentaho, Spagobi, Openi, Birt等等。
用于展现分析商用分析工具有Cognos,BO, Microsoft, Oracle,Microstrategy,QlikView、 Tableau 、国内永洪科技Yonghong Z-Suite等等。

征戰撩四汸
9楼 · 2021-04-07 19:01

一、zookeeper


ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。


ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。


ZooKeeper包含一个简单的原语集,[1]  提供Java和C的接口。


ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在zookeeper-3.4.3\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。(概述图片来源:[2]  )


那么Zookeeper能做什么事情呢,简单的例子:假设我们有20个搜索引擎的服务器(每个负责总索引中的一部分的搜索任务)和一个总服务器(负责向这20个搜索引擎的服务器发出搜索请求并合并结果集),一个备用的总服务器(负责当总服务器宕机时替换总服务器),一个web的cgi(向总服务器发出搜索请求)。搜索引擎的服务器中的15个服务器提供搜索服务,5个服务器正在生成索引。这20个搜索引擎的服务器经常要让正在提供搜索服务的服务器停止提供服务开始生成索引,或生成索引的服务器已经把索引生成完成可以提供搜索服务了。使用Zookeeper可以保证总服务器自动感知有多少提供搜索引擎的服务器并向这些服务器发出搜索请求,当总服务器宕机时自动启用备用的总服务器。


 


二、spark


Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。


Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。


Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。


Spark 主要有三个特点[2]  :


首先,高级 API 剥离了对集群本身的关注,Spark 应用开发者可以专注于应用所要做的计算本身。


其次,Spark 很快,支持交互式计算和复杂算法。


最后,Spark 是一个通用引擎,可用它来完成各种各样的运算,包括 SQL 查询、文本处理、机器学习等,而在 Spark 出现之前,我们一般需要学习各种各样的引擎来分别处理这些需求。


三、kafka


Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消费。


特性:


通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。


高吞吐量 :即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。


支持通过Kafka服务器和消费机集群来分区消息。


支持Hadoop并行数据加载。


 


术语介绍:


Broker  


Kafka集群包含一个或多个服务器,这种服务器被称为broker[5] 


Topic


每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)


Partition


Partition是物理上的概念,每个Topic包含一个或多个Partition.


Producer


负责发布消息到Kafka broker


Consumer


消息消费者,向Kafka broker读取消息的客户端。


Consumer Group


每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。


四、cassandra


Cassandra是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存收件箱等简单格式数据,集GoogleBigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身Facebook于2008将 Cassandra 开源,此后,由于Cassandra良好的可扩展性,被Digg、Twitter等知名Web 2.0网站所采纳,成为了一种流行的分布式结构化数据存储方案。


Cassandra是一个混合型的非关系的数据库,类似于Google的BigTable。其主要功能比Dynamo (分布式的Key-Value存储系统)更丰富,但支持度却不如文档存储MongoDB(介于关系数据库和非关系数据库之间的开源产品,是非关系数据库当中功能最丰富,最像关系数据库的。支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型)。Cassandra最初由Facebook开发,后转变成了开源项目。它是一个网络社交云计算方面理想的数据库。以Amazon专有的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型。P2P去中心化的存储。很多方面都可以称之为Dynamo 2.0。


Cassandra的主要特点就是它不是一个数据库,而是由一堆数据库节点共同构成的一个分布式网络服务,对Cassandra 的一个写操作,会被复制到其他节点上去,对Cassandra的读操作,也会被路由到某个节点上面去读取。对于一个Cassandra群集来说,扩展性能是比较简单的事情,只管在群集里面添加节点就可以了。


 


五、Neo4j


Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。


Neo4j因其嵌入式、高性能、轻量级等优势,越来越受到关注.


你可以把Neo看作是一个高性能的图引擎,该引擎具有成熟和健壮的数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。 [1] 


Neo是一个网络——面向网络的数据库——也就是说,它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络上而不是表中。网络(从数学角度叫做图)是一个灵活的数据结构,可以应用更加敏捷和快速的开发模式。


六、ES


ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。


我们建立一个网站或应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的。我们希望搜索解决方案要运行速度快,我们希望能有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP来索引数据,我们希望我们的搜索服务器始终可用,我们希望能够从一台开始并扩展到数百台,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。因此我们利用Elasticsearch来解决所有这些问题及可能出现的更多其它问题。


相关概念:


cluster


代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。


shards


代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。


replicas


代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。


recovery


代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。


River


代表es的一个数据源,也是其它存储方式(如:数据库)同步数据到es的一个方法。它是以插件方式存在的一个es服务,通过读取river中的数据并把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的。


gateway


代表es索引快照的存储方式,es默认是先把索引存放到内存中,当内存满了时再持久化到本地硬盘。gateway对索引快照进行存储,当这个es集群关闭再重新启动时就会从gateway中读取索引备份数据。es支持多种类型的gateway,有本地文件系统(默认),分布式文件系统,Hadoop的HDFS和amazon的s3云存储服务。


discovery.zen


代表es的自动发现节点机制,es是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。


Transport


代表es内部节点或集群与客户端的交互方式,默认内部是使用tcp协议进行交互,同时它支持http协议(json格式)、thrift、servlet、memcached、zeroMQ等的传输协议(通过插件方式集成)。


七、ActiveMQ


ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。


八、nginx


Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。


其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。


Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。


Nginx作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务器对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。

Nginx代码完全用C语言从头写成。



相关问题推荐

  • 什么是大数据时代?2021-01-13 21:23
    回答 100

    大数据(big data)一词越来越多地被提及,人们用它来描述和定义信息爆炸时代产生的海量数据,而这个海量数据的时代则被称为大数据时代。随着云时代的来临,大数据(Big data)也吸引了越来越多的关注。大数据(Big data)通常用来形容一个公司创造的大量非结...

  • 回答 84

    Java和大数据的关系:Java是计算机的一门编程语言;可以用来做很多工作,大数据开发属于其中一种;大数据属于互联网方向,就像现在建立在大数据基础上的AI方向一样,他两不是一个同类,但是属于包含和被包含的关系;Java可以用来做大数据工作,大数据开发或者...

  • 回答 52
    已采纳

    学完大数据可以从事很多工作,比如说:hadoop 研发工程师、大数据研发工程师、大数据分析工程师、数据库工程师、hadoop运维工程师、大数据运维工程师、java大数据工程师、spark工程师等等都是我们可以从事的工作岗位!不同的岗位,所具备的技术知识也是不一样...

  • 回答 29

    简言之,大数据是指大数据集,这些数据集经过计算分析可以用于揭示某个方面相关的模式和趋势。大数据技术的战略意义不在于掌握庞大的数据信息,而在于对这些含有意义的数据进行专业化处理。大数据的特点:数据量大、数据种类多、 要求实时性强、数据所蕴藏的...

  • 回答 14

    tail -f的时候,发现一个奇怪的现象,首先 我在一个窗口中 tail -f test.txt 然后在另一个窗口中用vim编辑这个文件,增加了几行字符,并保存,这个时候发现第一个窗口中并没有变化,没有将最新的内容显示出来。tail -F,重复上面的实验过程, 发现这次有变化了...

  • 回答 18

    您好针对您的问题,做出以下回答,希望有所帮助!1、大数据行业还是有非常大的人才需求的,对于就业也有不同的岗位可选,比如大数据工程师,大数据运维,大数据架构师,大数据分析师等等,就业难就难在能否找到适合的工作,能否与你的能力和就业预期匹配。2、...

  • 回答 17

    最小的基本单位是Byte应该没多少人不知道吧,下面先按顺序给出所有单位:Byte、KB、MB、GB、TB、PB、EB、ZB、YB、DB、NB,按照进率1024(2的十次方)计算:1Byte = 8 Bit1 KB = 1,024 Bytes 1 MB = 1,024 KB = 1,048,576 Bytes 1 GB = 1,024 MB = 1,048,576...

  • 回答 33

    大数据的定义。大数据,又称巨量资料,指的是所涉及的数据资料量规模巨大到无法通过人脑甚至主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。大数据是对大量、动态、能持续的数据,通过运用新系统、新工具、新...

  • 回答 5

    MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL的版本:针对不同的用户,MySQL分为两种不同的版本:MySQL Community Server社区版本,免费,但是Mysql不提供...

  • mysql安装步骤mysql 2022-05-07 18:01
    回答 2

    mysql安装需要先使用yum安装mysql数据库的软件包 ;然后启动数据库服务并运行mysql_secure_installation去除安全隐患,最后登录数据库,便可完成安装

  • 回答 5

    1.查看所有数据库showdatabases;2.查看当前使用的数据库selectdatabase();3.查看数据库使用端口showvariableslike'port';4.查看数据库编码showvariableslike‘%char%’;character_set_client 为客户端编码方式; character_set_connection 为建立连接...

  • 回答 5

    CREATE TABLE IF NOT EXISTS `runoob_tbl`(    `runoob_id` INT UNSIGNED AUTO_INCREMENT,    `runoob_title` VARCHAR(100) NOT NULL,    `runoob_author` VARCHAR(40) NOT NULL,    `submission_date` DATE,    PRI...

  • 回答 9

    学习多久,我觉得看你基础情况。1、如果原来什么语言也没有学过,也没有基础,那我觉得最基础的要先选择一种语言来学习,是VB,C..,pascal,看个人的喜好,一般情况下,选择C语言来学习。2、如果是有过语言的学习,我看应该一个星期差不多,因为语言的理念互通...

  • 回答 7

    添加语句 INSERT插入语句:INSERT INTO 表名 VALUES (‘xx’,‘xx’)不指定插入的列INSERT INTO table_name VALUES (值1, 值2,…)指定插入的列INSERT INTO table_name (列1, 列2,…) VALUES (值1, 值2,…)查询插入语句: INSERT INTO 插入表 SELECT * FROM 查...

  • 回答 5

    看你什么岗位吧。如果是后端,只会CRUD。应该是可以找到实习的,不过公司应该不会太好。如果是数据库开发岗位,那这应该是不会找到的。

  • 回答 7

    查找数据列 SELECT column1, column2, … FROM table_name; SELECT column_name(s) FROM table_name 

没有解决我的问题,去提问