Hadoop

hadoop是分布式系统基础架构,主要解决海量数据的存储和海量数据的分析计算问题。

        优势:高可靠性(其中一个节点出现故障,也不会导致数据的丢失)、高扩展性(动态增加或删除节点)、高效性(并行工作)、高容错性(能够将失败的任务重新分配)

        组成:MapReduce(计算)、yarn(资源调度)、HDFS(数据存储)、Common(辅助工具)

zookeeper

zookeeper是一个开源的分布式的,为分布式框架提供协调服务的项目。从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,负责存储和管理较为重要的数据,然后接受观察者的注册,一旦数据状态发生变化,zookeeper就将负责通知已经在zookeeper上注册的观察者(客户端)作出相同的反应

hive

hive是hadoop的一个数据仓库工具,用来解决海量结构化日志的数据统计工具,可以将结构化数据文件映射为一张表,并提供查询功能。

hive的本质是将HQL语句转化为MapReduce的程序来进行计算查询服务。其中hive处理后的数据存储在HDFS,也可以加载到本地。

增加:sparksql的本质是将sql语句转化为spark的程序进行计算

小总结:数据库和数据仓库的区别

由于 Hive 采用了类似 SQL 的查询语言 HQL(Hive Query Language),因此很容易将 Hive 理解为数据库。其实从结构上来看,Hive 和数据库除了拥有类似的查询语言,再无类似之处。 本文将从多个方面来阐述 Hive 和数据库的差异。数据库可以用在 Online 的应用中,但是 Hive 是为数据仓库而设计的,清楚这一点,有助于从应用角度理解 Hive 的特性。

        1)数据更新

       由于 Hive 是针对数据仓库应用设计的,而数据仓库的内容是读多写少的。因此,Hive 中不建议对数据的改写,所有的数据都是在加载的时候确定好的。而数据库中的数据通常是需要经常进行修改的,因此可以使用 INSERT INTO … VALUES 添加数据,使用 UPDATE … SET 修 改数据。 

        2) 执行延迟

        Hive 在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高。另外一个导 致 Hive 执行延迟高的因素是 MapReduce 框架。由于 MapReduce 本身具有较高的延迟,因此 在利用 MapReduce 执行 Hive 查询时,也会有较高的延迟。

        数据库的执行延迟较低。 当然,这个低是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候, Hive 的并行计算显然能体现出优势(reduce并行计算)。

        3)数据规模

        由于 Hive 建立在集群上并可以利用 MapReduce 进行并行计算,因此可以支持很大规模 的数据;对应的,数据库可以支持的数据规模较小。

hadoop高可用HA

主要是通过在不同主机上建立多个NameNode,防止由于一台主机失去作用而导致集群失效,配置hadoop高可用,可以自动的使其他主机处于从standby转化为active状态

flume

高可用高可靠的日志系统,通过编写.conf文件来实现对日志文件的收集后转存到文件或hdfs集群的操作(离线日志文件)。

kafka

Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。

小总结:kafka和flume之间的区别

同样是流式数据采集框架,

        flume一般用于日志采集,可以定制很多数据源,减少开发量,基本架构是一个flume进程agent(source、拦截器、选择器、channel<Memory Channel、File Channel>、sink),其中传递的是原子性的event数据;使用双层Flume架构可以实现一层数据采集,一层数据集合;

        kafka一般用于日志缓存,是一个可持久的分布式消息队列,自带存储,提供push和pull两种存储数据功能;包括producer、kafkaCluster(broker:topic、partition)、consumer,依赖于Zookeeper(brokerid、topic、partition元数据存在ZNode,partition选举leader依赖Zookeeper)

        区别点一:

        flume和kafka的侧重点不同,kafka追求的是高吞吐,高负载,同一topic下可以有多个partition,由于是pull模式拉取数据,因此适合多个消费者的场景;kafka没有内置的producer和consumer组件,需要自己编写代码。

        而flume追求的是数据和数据源、数据流向的多样性,适合多个生产者的场景;flume有自己内置的多种source和sink组件,具体操作方式是编写source、channel和sink的.conf配置文件,开启flume组件的时候用命令关联读取配置文件实现;

        区别点二:

flume和kafka的定位有所不同:

1. flume

cloudera公司研发,适合多个生产者;

适合下游数据消费者不多的情况;(一个消费者开一个channel)

适合数据安全性要求不高的操作;(数据没有备份、没有副本)

适合与Hadoop生态圈对接的操作。(HDFS、Hbase等)

适合生产和收集数据

2. kafka

linkedin公司研发,适合多个消费者;

适合数据下游消费众多的情况;(kafka从磁盘读,并且只找Leader读)

适合数据安全性要求较高的操作,支持replication(多副本)。

适合消费数据

HBase

HBase 是一种分布式、可扩展、支持海量数据存储的 NoSQL 数据库。

小总结:HBase 与 Hive 的对比

        1.Hive

        (1) 数据仓库 Hive 的本质其实就相当于将 HDFS 中已经存储的文件在 Mysql 中做了一个双射关系,以 方便使用 HQL 去管理查询。

        (2) 用于数据分析、清洗 。Hive 适用于离线的数据分析和清洗,延迟较高。

         (3) 基于 HDFS、MapReduce Hive 存储的数据依旧在 DataNode 上,编写的 HQL 语句终将是转换为 MapReduce 代码执行。

         2.HBase

         (1) 数据库是一种面向列族存储的非关系型数据库。

         (2) 用于存储结构化和非结构化的数据。适用于单表非关系型数据的存储,不适合做关联查询,类似JOIN 等操作。

         (3) 基于 HDFS 数据持久化存储的体现形式是 HFile,存放于 DataNode 中,被 ResionServer 以 region 的形式进行管理。

        (4) 延迟较低,接入在线业务使用 面对大量的企业数据,HBase 可以直线单表大量数据的存储,同时提供了高效的数据访问速度。

scala

        

spark

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐