大数据hive,storm小知识(干货)

Hive简介

定义

Facebook为了解决海量日志数据的分析而开发了hive,后来开源给了Apache基金会组织。 hive是一种用SQL语句来协助读写、管理存储在HDFS上的大数据集的数据仓库软件。


为什么要使用Hive?

1) 从SQL角度,简单、容易上手、使用方便。

2) 从Hadoop角度,可以操作大规模的数据集,可以作为大数据的引擎。

3) 从MetaStore角度:有了这个之后,这些框架Pig/Impala/Presto/SparkSQL跟Hive可以共享元数据信息,

共享元数据即他们之间的元数据可以互通访问的,比如在Hive创建一张表,可以在SparkSQL能用,也可以在 Presto,Impala,Pig用。相反,在SparkSQL创建的表,在HIVE,Pig,Impala,Presto也能用。因为他们底层都是共享MetaStore。


Hive原理:

大数据hive,storm小知识(干货)

 

hive内核:

hive 的内核是驱动引擎,驱动引擎由四部分组成,这四部分分别是: 
▪解释器:解释器的作用是将hiveSQL语句转换为语法树(AST)。 
▪编译器:编译器是将语法树编译为逻辑执行计划。 
▪优化器:优化器是对逻辑执行计划进行优化。 
▪执行器:执行器是调用底层的运行框架执行逻辑执行计划。

hive底层存储:

hive的数据是存储在HDFS上,hive中的库和表可以看做是对HDFS上数据做的一个映射,所以hive必须运行在一个hadoop集群上。

hive程序执行过程

hive执行器是将最终要执行的mapreduce程序放到YARN上以一系列job的方式去执行。

hive特点:

▪ hive 最大的特点是通过类 SQL 来分析大数据,而避免了写 mapreduce Java 程序来分析数据,这样使得分析数据更容易。 
▪数据是存储在HDFS上的,hive本身并不提供数据的存储功能 
▪hive是将数据映射成数据库和一张张的表,库和表的元数据信息一般存在关系型数据库上(比如MySQL)。 
▪数据存储方面:他能够存储很大的数据集,并且对数据完整性、格式要求并不严格。 
▪数据处理方面:不适用于实时计算和响应,使用于离线分析。


什么是Storm?

Strom是一个老牌的实时数据处理框架,在Spark Streaming流行前,Storm统治者整个流式计算的江湖。

更详细的说,Storm是一个实时数据处理框架,具有低延迟/高可用/易扩展/数据不丢失等特点,同时,Storm还提供流类似与MapReduce的简单编程模型,便于开发。


Storm的使用场景

  • 实时监控与日志分析
  • 管道系统
  • 消息转换

Strom的核心组件:

大数据hive,storm小知识(干货)

 

Nimbus:负责资源分配和任务调度

Supervisor:负责接收Nimbus分配的任务,启动和停止属于自己的Worker进程

Worker:运行具体的处理逻辑的进程,Work运行的任务种类只有两种,一种是Spout任务,一种是Blot任务

Task:Work中的每个Spout/Blot任务都是一个线程,这个线程就是Task。但在0.8版本以后,一个task不再对应一个物理线程,有可能不同但Task共享同一个线程。

storm的模型:

大数据hive,storm小知识(干货)

 

Topology:Storm中一个独立的实时计算应用但名称;

Spout:在一个Toplogy中获源数据流的组件;

Bolt:接收数据并进行处理的组件,可以在其中定义处理逻辑;

Tuple:Storm中消息的基本单元,在Spout/Blot之间传递的每条消息就是一个Tuple;

Stream:表示数据的流向,也可以理解为tuple流转流程

storm的优势:

支持水平扩展

在Storm集群中真正运行topology的主要有三个实体:工作进程、线程和任务。Storm集群中的每台机器上都可以运行多个工作进程,每个工作进程又可创建多个线程,每个线程可以执行多个任务,任务是真正进行数据处理的实体,我们开发的spout、bolt就是作为一个或者多个任务的方式执行的。

因此,计算任务在多个线程、进程和服务器之间并行进行,支持灵活的水平扩展。

容错性强

如果在消息处理过程中出了一些异常,Storm会重新安排这个出问题的处理单元。Storm保证一个处理单元永远运行(除非你显式杀掉这个处理单元)。

可靠的消息保证

Storm可以保证spout发出的每条消息都能被“完全处理”,这也是直接区别于其他实时系统的地方.

快速的消息处理

用ZeroMQ作为底层消息队列, 保证消息能快速被处理

本地模式,支持快速编程测试

Storm有一种“本地模式”,也就是在进程中模拟一个Storm集群的所有功能,以本地模式运行topology跟在集群上运行topology类似,这对于我们开发和测试来说非常有用


流式计算一般架构

网络系统<-Flume集群<-Kafka集群<-Storm集群<-Redis集群

1.Flume用来采集数据

2.Kafka用来临时保存数据

3.Storm用来实时计算数据

4.Redis作为内存数据库保存最终数据


大数据hive,storm小知识(干货)

 

记录学习,每天进步一点点的橘子大王。