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是一种数据仓库技术,用于查询,管理和分析存储在分布式存储系统上的海量结构化和非结构化的数据。



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

hive语句简单统计搜索日志

一、前言          初步学习了hive,以搜狗实验室的一部分搜索日志为数据集进行hiveQL语句操作练习。 二、数据集介绍          语料官网:http://www.sogou....

Hive基于搜狗搜索的用户日志行为分析

问题导读 1.本文是如何学习大数据的? 2.用户查询中包含的中文、英文字数的平均个数,本文提出哪两个思路? 3.用户访问应用的时间特点如何使用hive实现统计的? 前言 ”大数据时代“,...

hive演示实验--sogou日志数据

1:日志处理演示 数据来源:http://download.labs.sogou.com/dl/q.html 完整版(2GB):gz格式 //SogouQ1.txt、SogouQ2.txt、Sogo...
  • Kinger0
  • Kinger0
  • 2015年01月27日 22:07
  • 1409

自学大数据:Hive基于搜狗搜索的用户日志行为分析

每天很多都听到很多关于wome

hive 简单操作搜狗实验室的词频文件

1:下载搜狗实验室的词频文件  http://www.sogou.com/labs/dl/w.html
  • wind520
  • wind520
  • 2014年08月21日 11:46
  • 1875

Hive最新数据操作详解(超级详细)

数据操作能力是大数据分析至关重要的能力。数据操作主要包括:更改(exchange),移动(moving),排序(sorting),转换(transforming)。Hive提供了诸多查询语句,关键字,...

Matlab数字图像处理之图像运算

由于这段时间在做一个图像处理与三维重建的项目,其中数字图像处理的知识是必不可少的,学习matlab也有一段时间了,所以现在抽点时间将这段时间所学的东西做个小总结,加深理解的同时也方便以后有需要时可以查...
  • lfw2016
  • lfw2016
  • 2016年04月19日 08:55
  • 4910

hadoop之hbase学习

HBASE介绍     HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtab...
  • lfw2016
  • lfw2016
  • 2016年07月12日 08:45
  • 871

hdfs的基本原理和基本操作总结

hdfs基本原理 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的...
  • lfw2016
  • lfw2016
  • 2016年04月21日 12:17
  • 9356

MapReduce基本原理与WordCount程序

MapReduce原理   通过简单的Mapper和Reducer的抽象提供一个编程模型,可以在一个由几十台上百台PC组成的不可靠集群上并发地,分布式处理大量的数据集,而把并发、分布式(机器间通信)...
  • lfw2016
  • lfw2016
  • 2016年05月07日 15:24
  • 942
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hadoop 之 hive 学习
举报原因:
原因补充:

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