Hadoop 之 hive 学习

原创 2016年06月01日 09:22:43
     1. hive介绍

    Hive 是建立在Hadoop上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop  中的大规模数据的机制。Hive 定义了简单的类 SQL  查询语言,称为 QL ,它允许熟悉 SQL  的用户查询数据。同时,这个语言也允许熟悉 MapReduce  开发者的开发自定义的 mapper和reducer来处理内建的mapper和reducer无法完成的复杂的分析工作。

    Hive是SQL解析引擎,它将SQL语句转译成M/R Job然后在Hadoop执行。

    Hive的表其实就是HDFS的目录/文件,按表名把文件夹分开。如果是分区表,则分区值是子文件夹,可以直接在M/R Job里使用这些数据

    HIVE支持数据更新,有限更新;支持列式数据库;


    2、Hive架构与基本组成
    下面是Hive的架构图。
图1.1 Hive体系结构

   Hive的体系结构可以分为以下几部分:
    (1)用户接口主要有三个:CLI,Client 和 WUI。其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至Hive Server。在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。 WUI是通过浏览器访问Hive。
    (2)Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
    (3)解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。
    (4)Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(包含*的查询,比如select * from tbl不会生成MapRedcue任务)。

    Hive将元数据存储在RDBMS中,


     3. hive 与 mysql数据库

    因为HIVE的元数据保存在MYSQL中,所以实际使用时需要在LINUX下安装和使用mysql数据库;

     一,安装说明

按实验手册完成安装;

启动mysql时,使用root用户;

/etc/init.d/mysql  restart    //重启服务

service mysql status       //查看状态;

进入mysql客户端,使用root用户,注意u和root之间没有空格;

mysql  -uroot            //初始安装后,root用户无密码,可以设置密码

或者mysql –uroot –p      //使用密码登陆

    二,使用mysql

查看内置用户, mysql数据库的user表(show tabes查看)。

在mysql下:

show databases;       //包含系统数据库mysql

select Host, User, Password from mysql.user;   //查看系统的用户表

   

        新建mysql 用户hadoop(密码hadoop),并授权其在本机或者任何其他机器使用密码登陆,并可以操作任何数据库;注意,该字符的定界符,不是单引号’,而是`(键盘中,波浪线~键下方的按键);然后刷新权限。

mysql>grant all on *.* to hadoop@'%' identified by 'hadoop';

mysql>grant all on *.* to hadoop@'localhost' identified by 'hadoop';

mysql>grant all on *.* to hadoop@'master' identified by 'hadoop';

mysql>flush privileges; 

在NAVICAT 工具中连接虚拟机数据库,要授权给root用户(允许其他其他机器访问本数据库);

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'zkpk' WITH GRANT OPTION;

FLUSH  PRIVILEGES;


4. Hive QL 操 作

1, 内部表的建立和使用

create table stest(id int,name string) row format delimited fields terminated by ‘\t’;

describe stest;

//编辑文件testdata1(两个字段,以\t分隔, 输入几行数据),并上传(注意文件路径)到表中;

load data local inpath '/home/zkpk/testdata1' overwrite into table stest;

select * from stest;

   2, 外部表的建立和使用

create external table stest_ext(id int,name string) row format delimited fields terminated by ‘\t’ location ‘/hive/ext’;

show create table stest_ext;

//编辑文件testdata2(两个字段,以\t分隔),并上传到表中;

load data local inpath '/home/zkpk/testdata2' overwrite into table stest_ext;

select * from stest_ext;

   3, 分区表的建立和使用

create external table stest_par(id int,name string) partitioned by (class string) row format delimited fields terminated by ‘\t’ location ‘/hive/par’;

show create table stest_par;

//编辑文件testdata3(两个字段,以\t分隔),并上传到表中;

load data local inpath '/home/zkpk/testdata3' overwrite into table stest_par patition (class='A');

//编辑文件testdata4(两个字段,以\t分隔),并上传到表中;

load data local inpath '/home/zkpk/testdata4' overwrite into table stest_par patition (class='B');

dfs -cat  /hive/par/testdata3;

select * from stest_par;

select * from stest_par a where a.class='A';

4  建Bucket表                                                           

                  CREATE TABLE par_table(viewTime INT, userid BIGINT,

                  page_url STRING, referrer_url STRING,
                  ip STRING COMMENT 'IP Address of the User')
                 COMMENT 'This is the page view table'
                 PARTITIONED BY(date STRING, pos STRING)
                 CLUSTERED BY(userid) SORTED BY(viewTime) INTO 32 BUCKETS
                 ROW FORMAT DELIMITED ‘\t’

                   FIELDS TERMINATED BY '\n'
               STORED AS SEQUENCEFILE;

               复制一个空表

                   CREATE TABLE empty_key_value_store

                    LIKE key_value_store;


                  删除表

                 DROP TABLE table_name


5. Hive数据处理案例--搜狗搜索日志分析


    1.数据和脚本程序(用于数据预处理)准备

       使用SSH Secure File Transfer Client 将所需文件传到Linux虚拟机的本地目录

    2.数据预处理

       1.数据扩展

          将日志记录的时间字段拆分,添加年,月,日,小时字段

          进入脚本程序所在的文件目录,执行:bash sogou-log-extend.sh                                     /home/sogou_data/sogou.500w.utf8  /home/sogou_data/sogou.500w.utf8.ext

       2.数据过滤

           过滤掉某几个字段为空的行(使用到数据扩展之后产生的数据)

           进入脚本程序所在的文件目录,执行:bash sogou-log-extend.sh                                      /home/sogou_data/sogou.500w.utf8.ext /home/sogou_data/sogou.500w.utf8.flt

    3.基于Hive构建日志数据的数据仓库

          首先在集群运行的环境下启动hive:启动命令 bin/hive,之后创建一个搜狗数据库:create                 database sogou

          创建扩展4个字段(年,月,日,小时)数据的外部表

          创建一个按年,月,日,小时分区的分区表

    4.数据仓库建好之后就可以对数据进行分析了

          1. 实现数据分析需求一:条数统计

             1.数据总条数:

              Select count(*)  from sogou_flt;

              

             2.独立uid总数:

              Select  count(distinct(uid))  from sogou_flt;

              

         2.实现数据分析需求二:关键词分析

             1.查询关键词长度统计:

                

             

             2.查询频度排名(频度最高的前50词): 

               Selectkeyword, count(*) as cnt from sogou_flt group by keyword order by cnt                  keyworddesc limit 50;     

                                         

总结:Hive是一个基于Hadoop文件系统之上的数据仓库架构,它为数据仓库的管理提供了许多功能:数据ETL(抽取,转换和加载)工具,数据存储管理和大型数据集的查询和分析能力。同时Hive定义了类SQL语言---Hive QL,Hive QL允许用户进行和SQL相似的操作,还允许开发人员方便的使用Mapper和Reducer操作。总之,Hive是一种数据仓库技术,用于查询,管理和分析存储在分布式存储系统上的海量结构化和非结构化的数据。



版权声明:本文为博主原创文章,未经博主允许不得转载。

Hadoop之hive学习_01

Hive是构建在hdfs上的一个数据仓库,本质上就是数据库,用来存储数据 数据仓库是一个面向主题的、集成的、不可更新的、随时间不变化的数据集合,用于支持企业或组织的决策分析处理。 1.      ...
  • csdn_flying97
  • csdn_flying97
  • 2016年07月07日 09:02
  • 4173

hive 操作(二)——使用 mysql 作为 hive 的metastore

Hive 操作(一) hive 默认使用 derby 作为映射表(SQL 操作映射为MapReduce Job,将SQL中创建的表映射为 hdfs 的文件/文件夹,字段映射为其中的行),但 derby...
  • lanchunhui
  • lanchunhui
  • 2016年03月11日 16:10
  • 1656

大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机)

在[大数据学习系列之一 ----- Hadoop环境搭建(单机)](http://blog.csdn.net/qazwsxpcm/article/details/78637874) 成功的搭建了Had...
  • qazwsxpcm
  • qazwsxpcm
  • 2017年12月16日 09:32
  • 516

navicat初步使用

这几天正在做kaggle上的一个小的项目,因为多个数据表的原因,需要集成到数据库中进行分析,初次使用navicat,navicat for MySQL为MySQL设计的强大数据库管理及开发工具的遇到一...
  • stone_mad
  • stone_mad
  • 2015年10月23日 23:24
  • 672

hadoop生态系统学习之路(六)hive的简单使用

一、hive的基本概念与原理Hive是基于Hadoop之上的数据仓库,可以存储、查询和分析存储在 Hadoop 中的大规模数据。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 S...
  • qiyongkang520
  • qiyongkang520
  • 2016年04月05日 13:02
  • 3801

学习Hadoop第三十课(Hive简单入门)

上节课我们一起学习了用Java来对HBase的表进行增、删、改、查操作。这节课我们开始步入Hive的学习阶段        我们先来看一下Hive的简介,如下图所示,Hive是一个数据仓库,它部署在H...
  • u012453843
  • u012453843
  • 2016年11月05日 14:40
  • 4885

Hadoop系列四:Hadoop之Hive篇

Hive安装和运行 Pig与RDBMS、Hive比较 Pig Latin是一种数据流编程语言,而SQL是一种描述性编程语言。换句话说,Pig程序是相对于输入的一步步操作,其中每一步是对数据的一个简...
  • fjssharpsword
  • fjssharpsword
  • 2016年03月11日 16:42
  • 14031

Hadoop基础教程-第11章 Hive:SQL on Hadoop(11.8 HQL:排序)(草稿)

第11章 Hive:SQL on Hadoop11.8 HQL:排序11.8.1 order byHive 中的 order by与SQL 中的order by语义相同,会对查询结果进行全局排序,但是...
  • chengyuqiang
  • chengyuqiang
  • 2017年08月20日 17:39
  • 395

北风网Hadoop套餐教程 Hive 入门实战:Mysql+Hive

1,本例将hadoop的错误日志经过Hive导入到mysql中。这里不讨论实验的实际意义,目的是通过调用Hive的java API,加深对Hive的理解,熟悉Hive的运用。 2,实验的逻辑: 2...
  • epitomizelu
  • epitomizelu
  • 2014年12月14日 18:11
  • 499

学习Hadoop第三十一课(hive基础及分区表)

上节课我们一起学习了Hive的简单入门,这节课我们一起来学习Hive基础及分区表。 第一部分:hive基础          首先我们在itcast03上启动hive并创建一张表,如下所示。 ...
  • u012453843
  • u012453843
  • 2016年11月06日 17:17
  • 892
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hadoop 之 hive 学习
举报原因:
原因补充:

(最多只允许输入30个字)