hive 入门介绍

 一.Hive 是什么

              hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。

  其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

 

   与关系型数据库比较

     1:关系型数据库“写时模式”  vs    hive 为“读时模式”

         2:hive的  HQL 语法类似 mysql的sql语法

         3:关系型数据库支持insert/delete/update/select 、建索引等操作,hive没有update/delete等操作,支持select、追加数据、覆盖数据操作

          4:关系数据库查询速度快, hive 查询慢(底层将HQL转换为mapreduce程序执行)

 

与hbase集成

           查询hbase中数据 需要调用 hbase的java api去获取库中存放的值,当与hive集成时,可编写HQL语句查询

 
二.使用背景

            1:目前查询hbase数据复杂,除非编写java 程序

 

           2:查询mapreduce生成的文件中某些特定信息复杂,需要编写程序访问hdfs或再次编写mapreduce程序去查询特定信息

 

           3:对外接口系统中,存在对外提供全量站点商品信息需求。

          目前是将hbase的商品表中所有数据通过mapreduce程序上传到hdfs上

           1)提供其他mapreduce的基础数据

           2)提供hive 商品表的外部数据

           3)每天生成一份数据

 

三.Hive建表、分区、分桶

1:Hive 建表:内部(托管)表、外部表

Create [EXTERNAL] TABLE [IF NOT EXISTS] table_name 
[(col_name data_type [COMMENT col_comment], ...)] 
[COMMENT table_comment] 
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] 

[CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] 
[ROW FORMAT row_format] 
[STORED AS file_format] 
[LOCATION hdfs_path]

<!--[if ppt]-->
<!--[endif]-->

当使用EXTERNAL 关键字时,为外部表

1:内部表与外部表的区别

 

         drop table 时,内部表会把表结构及数据文件同时删除掉,外部表只删除表结构

 

 

     CREATE TABLE t_sys_conf_param(

                 param_key string,

                param_value String)

                ROW FORMAT DELIMITED FIELDS TERMINATED BY  ‘,';

           Drop table t_sys_conf_param;

 

2:分区

Hive 的分区可参照mysql中表分区概念理解

 

 在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念

 

例如:hive中按日期进行分区yyyyMMdd

 

ALTER TABLE p_site_product_hive DROP IF EXISTS PARTITION (dt='${hivevar:datetime}');

 

 

 

 

ALTER TABLE p_site_product_hive ADD partition(dt='${hivevar:datetime}') location '/user/spider/data/spider_stat/productText/${hivevar:datetime}';

 

四、Hive查询操作介绍

                    hive.fetch.task.conversion=more 表示简单的 sql语句执行可不转换为mapreduce程序

                     set  hive.fetch.task.conversion=minimal 

                  [内连接例子]  Select  a.product_id,b.std_product_id from p_site_product a  join   t_match_result b on (a.product_id = b.product_id)

 

 

五、hive 与 hbase表关联

                    1:建立hbase对应外部表

 

                   CREATE EXTERNAL TABLE t_sys_conf_param_hive(

                       param_key string, param_value String)

                      STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

                    WITH SERDEPROPERTIES ("hbase.columns.mapping" = "noverison:param_value")

                TBLPROPERTIES("hbase.table.name" = "ns_spider:t_sys_conf_param");

 

                 2:设置hive 输出文件是否压缩参数

 

                 drop table t_sys_conf_param;

 

                  set hive.exec.compress.output=false;

           

               3:建立内部表

 

                    CREATE TABLE t_sys_conf_param(

                                 param_key string, param_value String)

                   ROW FORMAT DELIMITED FIELDS TERMINATED BY  '\t';

 

 

             4:将外部表中数据导入 内部表

                INSERT OVERWRITE TABLE t_sys_conf_param SELECT * FROM t_sys_conf_param_hive;  (覆盖原有数据)

 

                 INSERT  INTO TABLE t_sys_conf_param SELECT * FROM t_sys_conf_param_hive; (追加数据)

 

             5:查看 hdfs文件中内容

 

 

                      hadoop fs -ls /user/spider/hive/warehouse/spider.db/

 

 

 

猜你喜欢

转载自yylcslg.iteye.com/blog/2282136
今日推荐