简单学习数据仓库HIVE

  • HIVE是一个构建于Hadoop顶端的数据仓库工具
  • 支持大规模数据存储,分析,具有良好的可扩展性
  • 某种程度上可以看做是用户编程接口,本身不存储和处理数据
  • 依赖分布式系统HDFS存储数据
  • 定义了简单的类似SQL的查询语言——HIVEQL
  • 用户可以通过编写的HIVEQL语句运行在MapReduce任务
  • 可以很容易把原来构建在关系数据库上的数据仓库应用程序移植到Hadoop平台上
  • 是一个可以提供有效,合理,直观组织和使用数据的分析工具

  特点:1.采用批处理方式处理海量数据:HIVE需要把HIVEQL语句转化成MapReduce任务进行运行,数据仓库存储的是静态数据,对静态数据的分析适合采用批处理方式,不需要快速相应给出结果,而且数据本身也不会频繁变化,2.本身提供一系列对数据进行提取,转换,加载(ETL)的工具,可以存储,查询和分析在Hadoop中大规模数据,这些工具能够很好地满足数据仓库各种应用场景

  与传统数据库的对比

  HIVE在企业大数据分析平台中的应用(一种)

  HIVE在Facebook公司中的应用:

  • 基于Oracle的数据茶农库系统已经无法满足急诊的业务需求
  • Facebook公司开发了数据库仓库工具HIVE,并在企业内部进行大量部署

  HIVE系统架构:

  • 用户接口模块包括CLI,HWI,JDBC,ODBC,Thrift Server
  • 驱动模块(Driver)包括编译器,优化器,执行器等,负责把HiveQL语句转化成一系列MapReduce作业
  • 元数据存储模块(Metastore)是一个独立的关系型数据库(自带derby数据库或者MySQL数据库)

  SQL语句转化成MapReduce作业的基本原理

  1.join的实现原理

  2.group by的实现原理

  存在一个分组(Group By)操作,其功能是把Score的不同片段按照rank和level的组合值进行合并,计算不同的rank和level的组合值进行合并,计算不同的rank和level的组合值分别有几条记录:select rank,level,count(*)as value form score group by rank,level

  HIVE中SQL查询转化成MapReduce作业的过程

  • 当用户向hive输入一段命令或查询时,hive需要与Hadoop交互工作来完成该操作:  
  1. 驱动模块接收该命令或查询编译器
  2. 对该命令或查询进行解析编译
  3. 由优化器对该命令或查询进行优化计算
  4. 该命令或查询通过执行器进行执行

  

  第1步:由Hive驱动模块中的编译器对用户输入的SQL语言进行词法和语法解析,将SQL语句转化为抽象语法树的形式

  第2步:抽象语法树的结构仍很复杂,不方便直接翻译为MapReduce算法程序,因此,把抽象语法书转化为查询块

  第3步:把查询块转换成逻辑查询计划,里面包含了许多逻辑操作符

  第4步:重写逻辑查询计划,进行优化,合并多余操作,减少MapReduce任务数量

  第5步:将逻辑操作符转换成需要执行的具体MapReduce任务

  第6步:对生成的MapReduce任务进行优化,生成最终的MapReduce任务执行计划

  第7步:由Hive驱动模块中的执行器,对最终的MapReduce任务进行执行输出

  几点说明:

  • 当启动MapReduce程序时,Hive本 身是不会生成MapReduce算法程序的需要通过一一个表示“Job执行计划”的XML文件驱动执行内置的、原生的Mapper和Reducer模块
  • Hive通过和JobTracker通信来初始化MapReduce任务,不必直接部署在JobTracker所在的管理节点上执行
  • 通常在大型集群上,会有专门的网关机来部署Hive工具。网关机的作用主要是远程操作和管理节点上的JobTracker通信来执行任务
  • 数据文件通常存储在HDFS上,HDFS由名称节点管理

  Hive HA基本原理

  • 由多个Hive实例进行管理的,这些Hive实例奖杯纳入到一个资源池中,并由HAOrooxy提供一个统一的对外接口
  • 对于程序开发人员来说,可以把它认为是一个超强“Hive”

  Impala

  • Impala是由Cloudera公司开发的新型查询系统,它提供SQL予以,能查询储存在Hadoop的HDFS和HBase上的PB级大数据,在性能上比Hive高出3~30倍
  • Impala的运行需要依赖于Hive的元数据
  • Impala是参照Dremel系统进行设计的
  • Impala采用了与商用并行关系数据库类似的分布式查询引擎,可以直接与HDFS和HBase进行交互查询
  • Impala和Hive采用相同的SQL语法、ODBC驱动程序和用户接口

  lmpala和Hive、HDFS、 HBase等工具是统一部署 在一-个Hadoop平台.上的Impala主要由Impalad, State Store和CLI三部分组成

  Impala主要是由Impalad,State Store和CLI三部分组成

  1. Impalad
  • 负责协调客户端提交的查询的执行
  • 包含Query Planner、 Query Coordinator和Query Exec Engine三个模块
  • 与HDFS的数据节点(HDFS DN)运行在同一节点上
  • 给其他Impalad分配任务以及收集其他Impalad的执行结果进行汇总
  • Impalad也会执行其他Impalad给其分配的任务,主要就是对本地HDFS和HBase里的部分数据进行操作

    2.State Store

  • 会创建一个statestored进程
  • 负责收集分布在集群中各个Impalad进程的资源信息,用于查询调度

    3.CLI

  • 给用户提供查询使用的命令行工具
  • 还提供了Hue,JDBC以及ODBC的使用接口
  说明: Impala中的元数据直接存储在Hive中。Impala采用与Hive相同的元数据、SQL语法、ODBC驱动程序和用户接口,从而使得在一一个Hadoop平台上,可以统一 部署Hive和Impala等分析工具,同时支持批处理和实时查询 。

  Impala执行查询的具体过程:

  • 第0步,当用户提交查询前,Impala先创建一个负责协调客户端提交的查询的Impalad进程,该进程会向Impala State Store提交注册订阅信息,State Store会创建一个statestored进程,statestored进 程通过创建多个线程来处理Impalad的注册订阅信息。
  • 第1步,用户通过CLI客户端提交一个查询到impalad进程,Impalad 的Query Planner对SQL 语句进行解析,生成解析树;然后,Planner把这个查询的解析树变成若干P1 anFragment,发送到Query Coordinator
  • 第2步,Coordinator 通过从MySQL元数据库中获取元数据,从HDFS的名称节点中获取数据地址,以得到存储这个查询相关数据的所有数据节点。
  • 第3步,Coordinator初始化相应impalad上的任务执行,即把查询任务分配给所有存储这个查询相关数据的数据节点。
  • 第4步,Query Executor 通过流式交换中间输出,并由Query Coord inator汇聚来自各个impalad的结果。
  • 第5步,Coordinator把汇总后的结果返回给CLI客户端。

  

  Hive和Impala不同点总结:

  1. Hive适合于长时间的批处理查询分析,而Impala适合于实时交互式SQL查询

  2. Hive依 赖于MapReduce计算框架,lmpala把执行计划表现为一棵完整的执行计划树,直接分发执行计划到各个Impalad执行查询

  3. Hive在执行过程中, 如果内存放不下所有数据,则会使用外存,;以保证查询能顺序执行完成,而Impala在遇到内存放不下数据时,不会利用外存,所以Impala目 前处理查询时会受到一.定的限制

  Hive和Impala相同点总结:

  1. Hive与Impala使用相同的存储数据池,都支持把数据存储于HDFS和HBase中

  2. Hive 与Impala使用相同的元数据3.Hive与Impala中对SQL的解释处理比较相似,都是通过词法分析生成执行计划

  总结:

  • lmpala的目的不在于替换现有的MapReduce工具
  • 把Hive与Impala配合使用效果最佳

  • 可以先使用Hive进行数据转换处理,之后再使用lmpala在Hive处理后的结果数据集_上进行快速的数据分析

大二暑假第六周总结--开始学习Hadoop基础(五)的更多相关文章

  1. 大二暑假第七周总结--开始学习Hadoop基础(六)

    复习关于Hadoop的操作语句以及重点 Shell版 跳转目录到Hadoop: cd /usr/local/hadoop 启动Hadoop: ./sbin/start-dfs.sh 注意:Hadoop ...

  2. 大二暑假第三周总结--开始学习Hadoop基础(二)

    简单学习NoSQL数据库理论知识 NoSQL数据库具有以下几个特点: 1.灵活的可扩展性(支持在多个节点上进行水平扩张) 2.灵活的数据模型(与关系数据库中严格的关系模型相反,显得较为松散) 3.与与 ...

  3. 大二暑假第二周总结--开始学习Hadoop基础(一)

    一.简单视频学习Hadoop的处理架构 二.简单视频学习分布式文件系统HDFS并进行简单的实践操作 简单操作教程:http://dblab.xmu.edu.cn/blog/290-2/ 注意:在建立H ...

  4. 大二暑假第五周总结--开始学习Hadoop基础(四)

    简单学习MapReduce并进行WordCount实践 分布式并行编程: MapReduce设计的一个理念就是“计算向数据靠拢”,将复杂的,运行于大规模集群上的并行计算过程高度地抽象到两个函数:Map ...

  5. 20145330第六周《Java学习笔记》

    20145330第六周<Java学习笔记> . 这周算是很忙碌的一周.因为第六周陆续很多实验都开始进行,开始要准备和预习的科目日渐增多,对Java分配的时间不知不觉就减少了,然而第十和十一 ...

  6. 第六周—Alpha阶段项目复审(五饭来了吗)

    第六周--Alpha阶段项目复审(五饭来了吗) 以下部分排名只是个人观点: 小组 优点 缺点,bug报告 名次 中午吃啥队 较完整的团体结构,可提供给商家和用户 感觉界面再优化一下就很棒了 1 天冷记 ...

  7. 20175215 2018-2019-2 第六周java课程学习总结

    第七章 内部类与异常类 1.内部类 Java支持在一个类中定义另一个类,这样的类称作内部类,而包含内部类的类成为内部类的外嵌类 内部类和外嵌类之间重要关系如下 内部类的外嵌类的成员变量在内部类中仍然有 ...

  8. Pytorch_第六篇_深度学习 (DeepLearning) 基础 [2]---神经网络常用的损失函数

    深度学习 (DeepLearning) 基础 [2]---神经网络常用的损失函数 Introduce 在上一篇"深度学习 (DeepLearning) 基础 [1]---监督学习和无监督学习 ...

  9. 大二暑假第一周总结--初次安装配置Hadoop

    本次配置主要使用的教程:http://dblab.xmu.edu.cn/blog/install-hadoop-in-centos/ 以下是自己在配置中的遇到的一些问题和解决方法,或者提示 一.使用虚 ...

随机推荐

  1. 【LOJ2542】「PKUWC2018」随机游走

    题意 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次询问给定一个集合 \(S\),求如果从 \(x\) 出发一 ...

  2. 吴裕雄--天生自然JAVAIO操作学习笔记:压缩流与回退流

    import java.io.File ; import java.io.FileInputStream ; import java.io.InputStream ; import java.util ...

  3. 容器STL

    一.迭代器iterator 迭代器是容器的一种遍历方式,每种容器都定义了自己的迭代器类型 声明一个迭代器: 容器名称<数据类型>::iterator 迭代器名称 vector<int ...

  4. 使用six库将Python2的项目完全转移到python3

    SIX是用于python2与python3兼容的库. 它存在的目的是为了拥有无需修改即可在Python 2和Python 3上同时工作的代码.话虽这么说,但是这并不代表在Python 3中引用该库就可 ...

  5. GNS3 模拟免费ARP

    R2 : conf t int f0/0 no shutdown ip add 192.168.1.254 255.255.255.0 end R1 : conf t int f0/0 no shut ...

  6. day02-Python运维开发基础

    1. Number 数据类型 2. 容器数据类型-字符串 """ 语法: "字符串" % (值1,值2 ... ) 占位符: %d 整型占位符 %f ...

  7. MongoDB 监控指标

    MongoDB uptime 启动时长 asserts.user 用户的断言数量 asserts.warning 警告的断言数量 connections.current 当前的连接数 大于 650co ...

  8. C语言中指针和取地址符&的关系

    一 概念定义: 严格说起来,应该这么讲:指针存的是地址,而&运算符是取变量的地址. 指针原理: 其实计算机中的内存就像一个个抽屉(一兆内存就相当于1百万个抽屉),每个抽屉都有一个编号,用于存放 ...

  9. python爬虫破解带有RSA.js的RSA加密数据的反爬机制

    前言 同上一篇的aes加密一样,也是偶然发现这个rsa加密的,目标网站我就不说了,保密. 当我发现这个网站是ajax加载时: 我已经习以为常,正在进行爬取时,发现返回为空,我开始用findler抓包, ...

  10. springboot 中单机 redis 实现分布式锁

    在微服务中经常需要使用分布式锁,来执行一些任务.例如定期删除过期数据,在多个服务中只需要一个去执行即可. 以下说明非严格意义的分布式锁,因为 redis 实现严格意义的分布式锁还是比较复杂的,对于日常 ...