概述

hive 是一个包裹着 hdfs 的壳子,hive 通过 hql,将 sql 翻译成 MR ,进行数据查询。

Hive是⼀个构建在Hadoop之上的数据仓库

hive的数据存在hdfs上,元信息放在metastore中,metastore也放在hdfs上

和传统的数据仓库⼀样,主要⽤来访问和管理数据,同样提供了类SQL查询语⾔

和传统数据仓库不⼀样,可以处理超⼤规模的数据,可扩展性和容错性⾮常强

举个直观一点的例子,一个MapReduce程序,需要写很多代码,但是我们可以在hive上使用一条sql来实现,比如

SELECT word, COUNT(*) FROM doc LATERAL VIEW explode(split(text, ' ')) lTable as word GROUP BY word;

hive会将上述sql翻译成MapReduce程序,帮我们跑,生活太美好了

Thrift是facebook开源的,支持任意语言的访问,如果你想让你的系统支持任意语言,那么就让你的系统支持Thrift的协议

sql-beeline(这个是轻量级)-hiveserver,他会和metastor交互,hiveserver进行语法解析,解析成语法树,变成查询计划,进行优化后,将查询计划交给执行引擎,默认是MR,然后翻译成mr,他会将sql发送到hiveserver上

sql-hive-metastore-mysql,这个是重量级,因为hive是在本地那里进行语法解析,翻译成mr

数据加载与插入语句,hive的load导入非常快,他不会对数据类型进行任何转换,而是在mr程序中进行校验,如果int但是值是string,则报错,如果本地load,则会把本地数据上传到hdfs上,如果load的是hdfs,则会复制一份到另一个hdfs的目录下

列式存储也可以按行读,只不过是拼接的开销大,不影响sql的编写

rc是一种非常经典的存储格式,可以查一下

支付宝的自己开发的一个系统oceanBase

OLAP的开源系统 greenplum/druid/kylin/presto(和他很像的是impala)/hive

create table table-test,的时候,不要把show create table table1的结果,复制到table-test的create语句,因为show table1里面有这个表在hdfs的地址,如果你删除table-test的时候,会删除table1,这时候就数据丢失,很严重

取整行的时候,行存储比列存储好,当你对事务要求高的时候,行存储比列存储适合

开源的etl工具,kettle,开源可视化,
ETL用hive就可以实现

我们希望日志,在flume进kafka之前就进行清洗,转换成java类对象,但这样比较难,岂不是自己写flume
可以这样做,flume先写进kafka,然后用etl工具去消费这个旧的topic,处理后,在写进kafka,用一个新的topic,然后下游就可以用了

myslq有个binlog,hbase的log是WAL Hlog

hive默认的mr并行个数是8

beeeline是官方推荐的,最好用这个,而不是hive方式

大数据方面的sort:merge sort,真是厉害

列式存储,是先按行切分,然后在block1中写入第一列的值,第二列的值

mysql中not in 比 not exists效率低,不过在hive中差不多,底层类似join

Hive典型应用场景

日志分析,统计⽹站⼀个时间段内的pv、uv,多维度数据分析,⼤部分互联⽹公司使⽤Hive进⾏⽇志分析,包括百度、淘宝等,海量结构化数据离线分析,低成本进⾏数据分析(不直接编写MR,简单的sql就直接查询不会走MR)

但是hive不是一个OLTP,也不是LOAP系统,响应时间慢,⽆法实时更新数据,对事务的⽀持很弱,表达能力弱,不⽀持迭代式计算,有些复杂运算⽤SQL不易表达

Hive的运行原理

sql发送给hive cli,从MetaStore获取一些元信息(列信息,表的位置信息,文件格式,序列化器,统计信息),然后会向yarn申请资源,去运行MapReduce,最后输出结果

Hive基本架构

⽤户接口,包括CLI,JDBC/ODBC,WebUI

元数据存储(metastore),默认存储在⾃带的数据库derby中,线上使⽤时⼀般换为MySQL

驱动器(Driver),解释器、编译器、优化器、执⾏器

Hadoop,⽤MapReduce 进⾏计算,⽤HDFS 进⾏存储

Hive CLI的内部组成

执行物理计划

可替换的执行引擎

执行引擎对比

Hive命令行访问

Hive CLI

– hive
– hive -h <host> -p <port>

Hive Beeline
– beeline -u jdbc:hive2://<host>:<port>

数据模型

database-table-partiton-file

Databases,Tables:和关系型数据库中的数据库、表⼀样

Partitions(可选):⼀些特殊的列,⽤于优化数据的存储和查询

Files:实际数据的物理存储单元

数据类型

STRUCT、MAP、ARRAY是其他数据库没有的

两种分布式Join算法

Map-side Join(Broadcast join)
• Join操作在map task中完成,因此无需启动reduce task;
• 适合一个大表,一个小表的连接操作
• 思想:小表复制到各个节点上,并加载到内存中;大表分片,与小表完
成连接操作
Reduce-side Join(shuffle join)
• Join操作在reduce task中完成;
• 适合两个大表连接操作
• 思想:map端按照连接字段进行hash,reduce 端完成连接操作

Hive2.2.1概述(待重写)的更多相关文章

  1. IIS-URL重写模块配置参考

    本文提供了URL重写模块的概述,并解释了该模块使用的配置概念. 功能概述URL重写模块将请求URL重写为显示给用户或Web应用程序的简单,用户友好和搜索引擎友好的地址.URL重写使用定义的规则进行评估 ...

  2. 【java开发】方法重写和方法重载概述

    类的继承   父类-子类 关键字 extends 新建一个父类 public class Person {     private String name;          private int ...

  3. c#基础学习(0702)之面向对象和方法重写概述

    面向对象编程(OOP==>Object-Oriented Programming) OOA:面向对象分析 OOD:面向对象设计 OOAD:面向对象分析与设计 什么是面向对象?一种分析问题的方式( ...

  4. ASP.NET Core模块概述

    原文地址:ASP.NET Core Module overview By Tom Dykstra, Rick Strahl, and Chris Ross ASP.NET Core模块(ANCM)让你 ...

  5. iOS-UI-UI控件概述

    以下列举一些在开发中可能用得上的UI控件: IBAction和IBOutlet,UIView 1 @interface ViewController : UIViewController 2 3 @p ...

  6. MVC5 网站开发实践 概述

    目录 MVC5 网站开发实践  概述 MVC5 网站开发实践  1.建立项目 MVC5 网站开发实践  2.后台管理 MVC5 网站开发实践  2.1.管理员登陆 MVC5 网站开发实践 2.2.管理 ...

  7. Apache Shiro系列之五,概述 —— 配置

    Shiro设计的初衷就是可以运行于任何环境:无论是简单的命令行应用程序还是复杂的企业集群应用.由于运行环境的多样性,所以有多种配置机制可用于配置,本节我们将介绍Shiro内核支持的这几种配置机制.   ...

  8. 转:用C++实现的一种插件体系结构-----概述

    用C++实现的一种插件体系结构-----概述 本文讨论一种简单却有效的插件体系结构,它使用C++,动态链接库,基于面向对象编程的思想.首先来看一下使用插件机制能给我们带来哪些方面的好处,从而在适当时候 ...

  9. 《java集合概述》

    JAVA集合概述: Collection: |---List有序的:通过索引就可以精确的操作集合中的元素.元素是可以重复的. List提供了增删改查的动作. 增加add(element) add(in ...

随机推荐

  1. PHP实现懒加载

    寻常php的加载是通过include(),require()等方法来加载外部文件,之后再通过实例调用方法或直接调用静态方法,而这样子写引入语句实在很麻烦,有的框架会将特定路径的文件全部引入,直接实例化 ...

  2. 类加载器(ClassLoader)

    静态库.动态连接库 程序编制一般需经编辑.编译.连接.加载和运行几个步骤.在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件:在连接步骤中,连接器将从库文件取得所需的代码,复制 ...

  3. datagrid使用要点

    table自适应: (fit:true(设置table)) 列自动撑开:fitColumns: true,注意给列的width属性赋值

  4. Linux的文件权限(简单易懂)

    学习这个章节,必须明白以下三个概念: 1.所有者 2.所属组 3.其他人 明白这三个概念后,接下来就学习文件的属性,那么文件的属性有什么呢?如何查看文件的属性? 在命令行下,执行 ls -l 可以得到 ...

  5. Oracle 10gR2 RAC 启动与关闭

    一. 检查共享设备 一般情况下, 存放OCR 和 Voting Disk 的OCFS2 或者raw 都是自动启动的. 如果他们没有启动,RAC 肯定是启动不了的. 1.1 如果使用ocfs2的,检查o ...

  6. win7物理主机与虚拟XP系统互相ping不通解决方法

    安装了虚拟XP系统,win7物理主机与XP系统ping不通,原因在于安装虚拟XP系统网络连接方式选的仅主机网络,则win7物理主机上的网卡应为VMnet1,而自己的win7VMnet1网卡处于禁用状态 ...

  7. iOS7中弹簧式列表的制作

    本文转载至 http://www.devdiv.com/forum.php?mod=viewthread&tid=208170&extra=page%3D1%26filter%3Dty ...

  8. 《JAVA多线程编程核心技术》 笔记:第三章:线程间通信

    一. 等待/通知机制:wait()和notify()1.1.使用的原因:1.2 具体实现:wait()和notify()1.2.1 方法wait():1.2.2 方法notify():1.2.3 wa ...

  9. C++ 动态内存 栈堆

    C++ 动态内存_w3cschool https://www.w3cschool.cn/cpp/cpp-dynamic-memory.html

  10. Java中堆内存与栈内存分配浅析

    Java把内存划分成两种:一种是栈内存,另一种是堆内存.在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间, ...