一、Hive概念

Hive最初是应Facebook每天产生的海量新兴社会网络数据进行管理和机器学习的需求而产生和发展的,是建立在Hadoop上的数据仓库基础架构。作为Hadoopd的一个数据仓库的工具,Hive可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,Hive数据仓库软件提供对存储在分布式中的大型数据集的查询和管理,它本身是建立在Apache Hadoop之上,主要提供以下功能:

  1. 它提供了一系列的工具,可用来对数据进行提取/转化/加载(ETL);
  2. 是一种可以存储、查询和分析存储在HDFS(或者HBase)中的大规模数据的机制;
  3. 查询是通过MapReduce来完成的(并不是所有的查询都需要MapReduce来完成,比如select * from XXX就不需要;
  4. 在Hive0.11对类似select a,b from XXX的查询通过配置也可以不通过MapReduce来完成

二、为什么要是用Hive

直接使用 MapReduce 所面临的问题:

  • 人员学习成本太高
  • 项目周期要求太短
  • 直接操作MapReduce难度大

为什么使用Hive:

  • Hive有更友好的接口,操作接口采用类SQL语法,提供快速开发的能力
  • 更低的学习成本,避免学习MapReduce,减少开发人员的学习成本
  • 更好的扩展,可自由扩展集群规模而无需重启服务,还支持自定义函数

三、Hive优缺点

优点:

  1. ==可扩展性,横向扩展==,Hive 可以自由的扩展集群的规模,一般情况下不需要重启服务 横向扩展:通过分担压力的方式扩展集群的规模 纵向扩展:一台服务器cpu i7-6700k 4核心8线程,8核心16线程,内存64G => 128G
  2. ==延展性==,Hive 支持自定义函数,用户可以根据自己的需求来实现自己的函数
  3. ==良好的容错性==,可以保障即使有节点出现问题,SQL 语句仍可完成执行
      

缺点:

  1. ==Hive 不支持记录级别的增删改操作==,但是用户可以通过查询生成新表或者将查询结 果导入到文件中(当前选择的 hive-2.3.2 的版本支持记录级别的插入操作)
  2. ==Hive 的查询延时很严重==,因为 MapReduce Job 的启动过程消耗很长时间,所以不能 用在交互查询系统中。
  3. ==Hive 不支持事务==(因为不没有增删改,所以主要用来做 OLAP(联机分析处理),而 不是 OLTP(联机事务处理),这就是数据处理的两大级别)。

四、hive架构

hive是基于hadoop的一个数据仓库工具,可以将结构化的数据映射成一张数据库表,并提供HQL(hive SQL)查询功能,底层数据存储在HDFS上,Hive本质上是将SQL语句转化为MapReduce任务运行,是不熟悉MapReduce的用户很方便利用HQL处理和计算HDFS上的结构化的数据,适用于离线计算。
hive工作方式,发出sql,hive将其转化为Mapduce任务,mapduce执行任务,操作HDFS中的文件

名称说明:

  1. 用户接口层,用户与Hive交互的界面和工具
  2. 界面与Hive内部驱动交互的协议和接口提供
  3. 底层驱动,Driver 组件完成 HQL 查询语句从词法分析,语法分析,编译,优化,以及生成逻辑执行 计划的生成。生成的逻辑执行计划存储在 HDFS 中,并随后由 MapReduce 调用执行Hive 的核心是驱动引擎, 驱动引擎由四部分组成:

(1) 解释器:解释器的作用是将 HiveSQL 语句转换为抽象语法树(AST)

(2) 编译器:编译器是将语法树编译为逻辑执行计划

(3) 优化器:优化器是对逻辑执行计划进行优化

(4) 执行器:执行器是调用底层的运行框架执行逻辑执行计划

  1. 元存储系统RDBS Mysql,元数据,通俗的讲,就是存储在 Hive 中的数据的描述信息。
    Hive 中的元数据通常包括:表的名字,表的列和分区及其属性,表的属性(内部表和 外部表),表的数据所在目录。
    Metastore 默认存在自带的 Derby 数据库中。缺点就是不适合多用户操作,并且数据存 储目录不固定。数据库跟着 Hive 走,极度不方便管理。
    解决方案:通常存我们自己创建的 MySQL 库(本地 或 远程)
    Hive 和 MySQL 之间通过 MetaStore 服务交互。

工作原理:

接收到一个sql,后面做的事情包括:

  1. 词法分析/语法分析
    使用antlr将SQL语句解析成抽象语法树-AST
  2. 语义分析
    从Megastore获取模式信息,验证SQL语句中队表名,列名,以及数据类型的检查和隐式转换,以及Hive提供的函数和用户自定义的函数(UDF/UAF)
  3. 逻辑计划生产
    生成逻辑计划-算子树
  4. 逻辑计划优化
    对算子树进行优化,包括列剪枝,分区剪枝,谓词下推等
  5. 物理计划生成
    将逻辑计划生产包含由MapReduce任务组成的DAG的物理计划
  6. 物理计划执行
    将DAG发送到Hadoop集群进行执行
  7. 将查询结果返回

Hive初始的更多相关文章

  1. 【hive】——Hive初始了解

    1.没有接触,不知道这个事物是什么,所以不会产生任何问题.2.接触了,但是不知道他是什么,反正我每天都在用.3.有一定的了解,不够透彻.那么hive,1.我们对它了解多少?2.它到底是什么?3.hiv ...

  2. Hive_初步见解,安装部署与测试

    一.hive是什么东东 1. 个人理解 hive就是一个基于hdfs运行于MapReduce上的一个java项目, 这个项目封装了jdbc,根据hdfs编写了处理数据库的DDL/DML,自带的 二进制 ...

  3. hive--构建于hadoop之上、让你像写SQL一样编写MapReduce程序

    hive介绍 什么是hive? hive:由Facebook开源用于解决海量结构化日志的数据统计 hive是基于hadoop的一个数据仓库工具,可以将结构化的数据映射为数据库的一张表,并提供类SQL查 ...

  4. 初始Hive

    Hive 背景 引入原因 对存在HDFS上的文件或HBase中的表进行查询时,是要手工写一推MapReduce代码 对于统计任务,只能由懂MapReduce的程序员才能搞定 耗时耗力,更多精力没有有效 ...

  5. 安装Hive(独立模式 使用mysql连接)

    安装Hive(独立模式 使用mysql连接) 1.默认安装了java+hadoop 2.下载对应hadoop版本的安装包 3.解压安装包 tar zxvf apache-hive-1.2.1-bin. ...

  6. 一步一步安装hive

    安装hive 1.下载hive-0.11.0.tar.gz,解压; 2.下载mysql-connector-java-5.1.29-bin.jar并放到hive/lib/下: 3.配置hive/con ...

  7. Hadoop之Hive(2)--配置Hive Metastore

    Hive metastore服务以关系性数据库的方式存储Hive tables和partitions的metadata,并且提供给客户端访问这些数据的metastore service的API.下面介 ...

  8. hadoop学习记录(四)hadoop2.6 hive配置

    一.安装mysql 1安装服务器 sudo apt-get install mysql-server 2安装mysql客户端 sudo apt-get install mysql-client sud ...

  9. ubuntu中为hive配置远程MYSQL database

    一.安装mysql $ sudo apt-get install mysql-server 启动守护进程 $ sudo service mysql start 二.配置mysql服务与连接器 1.安装 ...

随机推荐

  1. AndroidStudio-Error Please select Android SDK

    这里是×错误信息: 点击运行提示,Error:Please select Android SDK: 网上说了很多解决办法都不靠谱,只有这种方式是可以解决的: 点击:Exit: 红框的感叹号!已经提示了 ...

  2. TSQL--使用CTE完成递归查询

    CREATE TABLE TB001( CategoryId INT PRIMARY KEY, ParentCategoryId INT, CategoryName NVARCHAR(200))GO ...

  3. Bug报告提交规范

    首先声明,bug的测试规范应该在公司的正式文档建立.本建议非正式文档,有些内容可能不正确,有些内容可能需要继续商榷,甚至有些内容同公司规范有冲突.如果发现问题,直接忽略本文相应内容.本帖本意仅就工作中 ...

  4. ie11下ajax用escape发送中文参数失败

    一个项目中,登录请求是ajax,get模式.登录名无中文可以正常登录:登录名是中文则偶尔可以登录,大部分情况下无法登录,ajax请求无法发送成功. 登录名是用js的escape函数转码. 经过多次测试 ...

  5. RabbitMq初探——用队列实现RPC

    rabbitmq构造rpc 前言 rpc——remote procedure call 远程调用.在我接触的使用过http协议.thrift框架来实现远程调用.其实消息队列rabbitmq也可以实现. ...

  6. LWIP

    LWIP 今天要谈的不是LWIP协议栈的内容,只是简单谈谈关于STM32F407快速使用LWIP做网络通讯的一些经历. 我是一个网络小白,对网络知识一窍不通,仅仅是知道有IP地址.网关这玩意,也从来没 ...

  7. Activity启动流程

    Activity启动过程中做了哪些事情?下面的时序图展示里启动过程中函数的调用过程, 从图中可以知道大概流程. 在介绍细节的时候是从上往下函数调用过程介绍的,如果不知道某个函数是在哪里被谁调用的,可以 ...

  8. 磁盘IO的概念

    转载自:http://blog.csdn.net/letterwuyu/article/details/53542291 在数据库优化和存储规划过程中,总会提到IO的一些重要概念,在这里就详细记录一下 ...

  9. [ActionScript3.0] 使用FileReferenceList处理多个文件上载

    package { import flash.display.Sprite; import flash.events.DataEvent; import flash.events.Event; imp ...

  10. 功能一: 数据库访问DAO层方法定义

    功能1: 今天到现在为止 实战课程的访问量 yyyyMMdd courseID 使用数据库来进行存储我们的统计结果 Spark Streaming把统计结果写入到数据库里面 可视化前端根据: yyyy ...