Hadoop(七)——子项目Hive

前边我们介绍了Hadoop项目的两大基础支柱HDFSMapReduce,随后又介绍了子项目Pig:一种用类似于SQL的、面向数据流的语言对HDFS下的数据进行处理的MapReduce上层客户端,这大大满足了那些不会Java,不会写MapReduce的程序员。但是对于那些以前一直从事Oracle等关系型数据库数据分析的数据分析师,DBA等,还是有些棘手的。而Hadoop的另一个子项目Hive则解决了这个问题。


    好,先看下这篇博客的脉络图:


 

    一,Hive的概念:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句(Hive QL)快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。   我们可以将其看做是从SQLMapReduce映射器

 


    二,Hive的安装:首先要知道HiveHDFS中的数据组织为表,通过这种方式为HDFS数据赋予结构,而这些数据(例如表模式)称之为Hive的元数据,其存放在metastore中。根据metastore存放位置不同,我们可以分为三种安装模式:


       1,内嵌模式:metastore服务和Hive服务运行在同一个JVM中,包含一个内嵌的以本地磁盘作为存储的Derby数据库实例。此种安装简单,适用于学习,只允许一个会话连接


       2,本地独立模式:将元数据存放在独立的数据库中,MySql是很受欢迎的选择,利用metastore服务连接到本地安装的MySQL数据库中,支持多会话多用户连接。


       3,远程模式:元数据放置在远程的MySql数据库中,这样一个或多个metastore服务和Hive服务运行在不同的进程内。

 

    好,Hive的安装是子项目里边比较简单的,这里看下的内嵌模式的安装:


     A,下载并解压到用户目录下:

         tar xzf ./apache-hive-1.2.1-bin.tar.gz

         解压的目录和其它项目都是类似的,不再讲述:



 B,设置环境变量:

       exportHIVE_HOME=/home/ljh/apache-hive-1.2.1-bin

       exportPATH=$PATH:$HIVE_HOME/bin

       exportCLASSPATH=$CLASSPATH:$HIVE_HOME/bin

 

     C,配置文件设置:

        c.1,hive-env.sh

           复制: cp hive-env.sh.template hive-env.sh

                  设置hadoop_home:HADOOP_HOME=/home/ljh/hadoop-1.2.1

                  设置hive的配置文件路径:export HIVE_CONF_DIR=/home/ljh/apache-hive-1.2.1-bin/conf

 

        c.2,hive-site.xml

           复制:cp hive-default.xml.template hive-site.xml

           注意:内嵌模式这里不怎么需要配置,如果是独立模式,远程模式,则需要对mysql等进行配置,我们可以通过baidu,google进行各项参数的了解。

 

      D,启动hive:

       ./hive即可。

 

    其它方式安装参考:

http://sishuok.com/forum/blogPost/list/6221.html

http://blog.csdn.net/xqj198404/article/details/9109715

 


                      

    三,常用sql语句进行操作Hive无在乎表的创建,删除,数据的增查(删和改其实都是增的操作),特点和里边的数据类型看这篇博客:http://blog.csdn.net/chenxingzhen001/article/details/20901045


       1,建表:create tabletest(id string ,name string)

              ROW FORMAT DELIMITED FIELDSTERMINATED BY '|'

              STORED AS TEXTFILE

 

       2,HDFS中的数据文件加载的表中:

              LOAD DATA LOCAL INPATH './examples/files/test.txt' OVERWRITE INTO TABLE test;

 

       3,将查询结果插入到表中,两个hive表中的数据进行过滤插入:

              insert overwrite tabletest2  select id,name from test where idis not null;

      

       4,查询:select id ,name from test;


       5,表连接:select test.id test1,name from test join test1 on(test.id=test1.id);

 

     这里只是简单的操作,具体的Hivesql语法,可以参考这篇文章,写的很好很全面:

http://www.cnblogs.com/HondaHsu/p/4346354.html

 

 


    四,Hive的体系架构最经典的一张图:


 4.1,基本组成:

•用户接口,包括CLI,JDBC/ODBC,WebUI

•元数据存储,通常是存储在关系数据库如mysql, derby 中

•解释器、编译器、优化器、执行器

•Hadoop:用HDFS 进行存储,利用 MapReduce 进行计算

 

 4.2,各个组件基本功能:

   A,用户接口主要有三个:CLI,JDBC/ODBC和WebUI

•CLI,即Shell命令行

•JDBC/ODBC 是 Hive的JAVA,与使用传统数据库JDBC的方式类似,即通过Java对其进行操作。

•WebGUI是通过浏览器访问Hive

 

   B,Hive将元数据存储在数据库中,Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。


   Metastore

•Metastore是系统目录(catalog)用于保存Hive中所存储的表的元数据(metadata)信息;


•Metastore是Hive被用作传统数据库解决方案(如oracle和db2)时区别其它类似系统的一个特征;


•Metastore包含如下的部分:

•Database是表(table)的名字空间。默认的数据库(database)名为‘default’;

•Table表(table)的原数据包含信息有:列(list ofcolumns)和它们的类型(types),拥有者(owner),存储空间(storage)和SerDei信息;

•Partition每个分区(partition)都有自己的列(columns),SerDe和存储空间(storage)。这一特征将被用来支持Hive中的模式演变(schemaevolution);

 

   C,解释器、编译器、优化器完成 HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行


   Compiler

•Driver调用编译器(compiler)处理HiveQL字串,这些字串可能是一条DDL、DML或查询语句;


•编译器将字符串转化为策略(plan):

•策略仅由元数据操作和HDFS操作组成,元数据操作只包含DDL语句,HDFS操作只包含LOAD语句

•对插入和查询而言,策略由map-reduce任务中的具有方向的非循环图(directedacyclicgraph,DAG)组成

 

   D,Hive 的数据存储在 HDFS中,大部分的查询由 MapReduce 完成(包含 * 的查询,比如 select * from table 不会生成 MapRedcue 任务)




    五,用户定义函数(user-defined functionUDF)其实就想我们Java项目的工具类,我们自己编写一下函数,在我们编写Hive Ql的时候可以直接调用,方便我们查询。UDF编写使用Java语言进行编写,Hive本身也是Java来编写的。Hive中有三种:


     1(普通)UDF:操作作用单个数据行,且产生一个数据行作为输出,大多函数(例如数学函数和字符串函数)都属于这一类(最常用)。


     2UDAF(user-definedaggregate function):用户自定义集聚函数:接受多个输入数据行,并产生一个输出数据行。像countmax等。


     3UDTF(user-defined table-generating function):用户定义表生成函数,操作用于单个数据行,并且产生多个数据行——一个表作为输出。

 

   至于UDF的编写:步骤继承UDF,重写evaluate方法即自定义逻辑——》打包为Jar文件——》在HIve中进行注册——》为编写的java类起个别名——》使用即可。

 

   具体看网上的例子吧,参考几个例子就会了:

http://blog.csdn.net/yfkiss/article/details/7885262

http://sishuok.com/forum/blogPost/list/6226.html

 

 

    好,综上为Hive的总体小结,只是大体框架的知识框架的梳理,对于具体的知识点,还需要我们通过网络+实践来加深理解。继续……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值