Published: 2017-02-25 22:23:00
By ytwan
In Big Data .
tags: things
Hive-介绍
Hive--海量数据做数据挖掘--查询--分析-映射-hive里导入数据只是简单的将数据移动到表所在的目录中
作为ETL工具--用来进行数据提取-转化-加载
容易扩展自己的存储能力和计算能力
hive使用的文件系统--hadoop的HDFS
使用的计算模型有如下
MapReduce--
Hive on Spark----Spark SQL
Hive不再使用它默认的MapReduce计算引擎,
Spark会直接读取Hive的元数据存储,将Hive数据转换成Spark RDD数据--<本版本升级为DataFrame>,通过Spark提供的计算操作来实现(Transformation和Action)
Hive的版本
版本--本例子基于版本release 1.2.1
2016-12-08 : release 2.1.1 available
2016-06-20 : release 2.1.0 available
2016-03-25 : release 2.0.1 available
2016-02-15 : release 2.0.0 available
2016-01-28 : hive-parent-auth-hook made available
2015-06-27 : release 1.2.1 available
2015-05-21 : release 1.0.1, 1.1.1, and ldap-fix are available
2015-05-18 : release 1.2.0 available
2015-03-08 : release 1.1.0 available
2015-02-04 : release 1.0.0 available
Hive-架构
服务端
Driver组件:该组件包括Complier、Optimizer和Executor,
它的作用是将我们写的HiveQL(类SQL)语句进行解析、编译优化,生成执行计划,
然后调用底层的mapreduce计算框架。
Metastore组件:元数据服务组件,这个组件存储hive的元数据,hive的元数据存储在关系数据库里,
hive支持的关系数据库有Derby MySQL PostgreSQL等。
元数据对于hive十分重要,因此hive支持把metastore服务独立出来,安装到远程的服务器集群里,
从而解耦hive服务和metastore服务,保证hive运行的健壮性
Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
由于Hive的元数据需要不断的更新、修改,
而HDFS系统中的文件是多读少改的,这显然不能将Hive的元数据存储在HDFS中。所以使用关系型数据库
Thrift服务:thrift是facebook开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发,
hive集成了该服务,能让不同的编程语言调用hive的接口。
HiveServer或者HiveServer2都是基于Thrift的,但HiveSever有时被称为Thrift server
HiveServer2支持多客户端的并发和认证,为开放API客户端如JDBC、ODBC提供更好的支持。
在本版本中HiveServer已经被移除,
启动Hiveserver2有两种方式,一种是hive --service hiveserver2,另一种更为简洁,为hiveserver2
HiveClient-客户端
JDBC
CLI:command line interface,命令行接口。
Thrift客户端:上面的架构图里没有写上Thrift客户端,但是hive架构的许多客户端接口是建立在thrift客户端之上,
包括JDBC和ODBC接口。
WEBGUI:hive客户端提供了一种通过网页的方式访问hive所提供的服务。这个接口对应hive的hwi组件
(hive web interface),使用前要启动hwi服务。
Hive的启动
1.hive 命令行模式
进入hive安装目录,输入bin/hive的执行程序,或者输入 hive –service cli
用于Linux平台命令行查询,查询语句基本跟MySQL查询语句类似
2.hive web界面的启动方式
bin/hive –service hwi (& 表示后台运行)
用于通过浏览器来访问hive,感觉没多大用途,浏览器访问地址是:127.0.0.1:9999/hwi
3.hive 远程服务 (端口号10000) 启动方式
bin/hive –service hiveserver2 & 其中(&表示后台运行)
用java,Python等程序实现通过jdbc等驱动的访问hive就用这种起动方式了,这个是程序员最需要的方式了
Hive数据类型
数据模型:表 ( Table ) ,外部表 ( External Table ) ,分区 ( Partition ) ,桶 ( Bucket ) 。
数据类型
1 . 原始数据类型
• Integers
TINYINT - 1 byte
SMALLINT - 2 byte
INT - 4 byte
BIGINT - 8 byte
• Boolean type
BOOLEAN - TRUE / FALSE
BINARY
• Floating point numbers
FLOAT –单精度
DOUBLE – 双精度
• String type
STRING - sequence of characters in a specified character set
VARCHAR
CHAR
• Date / Time Types
TIMESTAMP
DATE
INTERVAL
2 . 复杂数据类型
• Structs : 例子 { c INT ; d INT }
• Maps ( key-value tuples ):. 例子 'group' - > gid M [ 'group' ]
• Arrays ( indexable lists ): 例子 [ '1' , '2' , '3' ]
• union
• structs
Hive的操作和函数
操作
关系操作-Relational Operators
逻辑操作-Logical Operators
算数操作-Arithmetic Operators
函数
count(*)
to_date
操作方式
hive 执行有二种模式,一种是客户端,
一种是 HiveServer 模式
--前提条件之一:在环境路径中有设置
1.不进入交互模式
Hive命令行接口(Hive Command Line)
显示帮助hive –H
从命令行执行指定的sql语句
hive -e 'select a.col from tab1 a'
以非交互式模式执行sql文件
hive -f /home/my/hive-script.sql
在进入交互模式之前,执行初始化sql文件
hive -i /home/my/hive-init.sql
设计Hive的日志级别
hive -hiveconf hive.root.logger=INFO,console
2.进入交互模式
Hive交互Shell(Hive Interactive Shell)
当命令 $ HIVE_HOME /bin/hive 以不带 -e/-f 选项的方式运行时,hive将进入到交互模式
进入的有hive> 提示符的交互式命令行
在这里可以执行查询语句,设置参数等等。
所有的命令必须以分号结束
3.JavaAPI模式
另起一章介绍
Hive常见操作
进入Hive,类 SQL 查询语言,称为 HQL
DDL数据库模式定义语言
show databases;
show tables;
DESCRIBE invites;
创建表--CREATE)
创建普通表 CREATE TABLE pokes (foo INT, bar STRING);
创建外部表 CREATE EXTERNAL TABLE pokes( id INT,name STRING
)LOCATION '/home/hive/external';
external的关键字说明以及LOCATION指定外部表存放的路径
没有LOCATION,Hive将在
HDFS上的/user/hive/warehouse文件夹下以外部表的表名创建一个文件夹,
并将属于这个表的数据存放在这
创建分区表
先创建分区,然后使用PARTITIONED
创建Bucket表
设置环境变量 hive>set hive.enforce.bucketing = true
DML:数据操纵语言
LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes
DQL:数据库查询语言
基本的 Select 操作
基于 Partition 的查询
HAVING 查询
Join 查询
其他
Hive本身不存储数据,它完全依赖HDFS和MapReduce,
只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive就可以解析数据
Hive表格的存储格式
TEXTFILE------textfile---------默认格式,数据不做压缩
SEQUENCEFILE--sequencefile-----Hadoop API提供的一种二进制文件支持,三种压缩-NONE, RECORD, BLOCK
RCFILE--------rcfile----------列式存储方式,数据加载时性能消耗较大,但是具有较好的压缩比和查询响应
ORCfile------orcfile---------对rcfile的优化,可以提高hive的读、写、数据处理性能,提供更高的压缩效率
parquet存储格式
自定义格式
HCatalog作为各种数据格式和数据处理工具之间的数据管理层
HCatalog库提供应用程序与集群中的MAPR-FS层的表视图,扩展您的应用程序的选项从读/写数据流添加表的操作,
如获取行和存储行。该HCatalog库存储要求其在蜂房Metastore操作的元数据
WebHCat服务器提供HCatalog一个类似REST的网络API
参考
版本--http://hive.apache.org/downloads.html
hive的架构 https://cwiki.apache.org/confluence/display/Hive/Design
数据类型-- https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types
[一起学Hive]之八-使用Hive命令行 http://lxw1234.com/archives/2015/06/292.htm
LanguageManual DDL https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL
jdbc远程连接hiveserver2 http://www.cnblogs.com/superAng/p/5939642.html
JDBC hive https://cwiki.apache.org/confluence/display/Hive/HiveClient