zoukankan      html  css  js  c++  java
  • Hive简介

    最近的项目中可能用到Hive,先从概念上简单理解下~
     
    Hive是基于Hadoop(HDFS, MapReduce)的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
    本质是将SQL转换为MapReduce程序。
    通常用于离线分析。
     
    Hive系统结构
     
    Hive组成
    • 元数据存储(Metastore)
    • 驱动(Driver)
    • 查询编译器(Query Compiler)
    • 执行引擎(Execution Engine)
    • 服务器(HiveServer)
    • 客户端组件
    • 可扩展接口部分
    Hive原数据:
      元数据(数据的描述信息:表的名称,数据库的名称,权限,所有者,组成字段等等),  默认情况下存储在hive内部自带的derby数据库中。
      问题:derby数据库,在同一时刻,只允许一个线程操作
      建议:使用MySQL对元数据进行存储
    用户接口:
      CLI:启动的时候,会同时启动一个Hive副本
      Client:Hive的客户端,用户连接至Hive Server
      WUI:通过浏览器访问Hive
    语句转换:
      解析器:生成抽象语法树
      语法分析器:验证查询语法
      逻辑计划生成器(包括优化器):生成操作符树
      查询计划生成器:转换为map-reduce任务
    数据存储:
      Hive数据以文件形式存储在HDFS的指定目录下
      Hive语句生成查询计划,由MapReduce调用执行
     
    运行顺序
    1. 用户使用命令行工具或者JDBC发送HQL
    2. 使用Driver驱动结合MetaStore元数据,将指定翻译成MapReduce
    3. 首先使用SQL Parser解释器进行HQL的翻译
    4. 使用编译器对解释结果进行编译
    5. 使用优化器对编译结果进行优化
    6. 最后将优化的结果使用执行器进行执行操作(本质上就是在Hadoop集群上使用MapReduce操作)
    7. 将处理结果返回给客户端用户
     
    Hive和普通关系型数据库的异同
    • 数据存储:Hive是建立在Hadoop之上的,所有hive的数据都是存储在HDFS中的;数据库则可以将数据保存在块设备或者本地文件系统中。
    • 数据格式:Hive中没有定义专门的数据格式,由用户指定,需要制定三个属性:列分隔符,行分隔符,以及读取文件数据的方法;数据库中,存储引擎定了自己的数据格式,所有数据都会按照一定的组织存储。
    • 数据更新:Hive的内容是读多写少的,因此不支持对数据的改写和删除,数据都是在加载的时候确定好的;数据中的数据通常是经常需要修改的。
    • 执行延时:Hive在查询数据时,需要扫描整个表或者分区,因此延时较高,因为Hive只有在处理大数据时才有优势;数据库在处理小数据时执行延迟较低。
    • Hive中没有索引(暴力扫描整张表 , 访问数据延迟高;使用MR,并行访问数据) 
     
    为什么要使用Hive?
    • 操作接口采用类SQL语法,提供快速开发的能力
    • 避免了去写MapReduce,减少开发人员的学习成本
    Hive的特点
    • 可扩展,Hive可以自由扩展集群的规模,一般情况下不需要重启服务
    • 延展性,Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
    • 容错,良好的容错性,节点出现问题SQL仍可完成执行
     
    Hive运算基于Hadoop的MapReduce模型,MapReduce不能保证低延迟。因此,Hive的查询页不能保证低延迟。
    Hive的工作模式是:提交一个任务,等到任务结束时被通知,而不是实时查询。相对应的是,类似于Oracle这样的系统当运行小数据集的时候,响应非常快,可当处理的数据集非常大的时候,可能需要数小时。需要说明的是,hive即使在很小的数据集上运行,也可能需要数分钟才能完成。
     
    总之,低延迟不是hive追求的首要目标。Hive的设计目标是:可伸缩、可扩展、容错及输入格式松耦合。
     
     
  • 相关阅读:
    scala泛函编程是怎样被选中的
    新一代编程:scala泛函编程技术-唠叨
    maven依赖本地非repository中的jar包【转】
    关于maven的profile
    intellij idea使用技巧
    springmvc的过滤器和拦截器
    spring bean的生命周期
    关于spring的bean
    关于递归
    tcp
  • 原文地址:https://www.cnblogs.com/daydayup-lin/p/13525891.html
Copyright © 2011-2022 走看看