Hive的基本介绍

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

blogroll

social