Hadoop最常用的工具(SQL on Hadoop):Hive

来源:互联网 发布:adobe muse mac 破解 编辑:程序博客网 时间:2024/04/29 16:10
  • 认识Hive

    对十Hadoop的出现,无论是业界还是学术界对其都给予了极高的关注度,Hadoop及其生态圈提供了一个成熟高效的处理海量数据集的解决方案。随着Hadoop越来越流行,一个问题也随之产生:用户如何从现有的数据基础架构转移到Hadoop上,而所谓的数据基础架构大都基于传统关系型数据库(RMDBS )和结构化查询语言(SQL )。这就是Hive出现的原因,Hive的设训目的是为了让那些精通SQL技能而Java技能较弱的数据分析师能够利用Hadoop进行各种数据分析,对于前文的WordCount例子,Java代码大概在80行左右,这对于经验丰富的Java开发工程师来说也不是易事,但如果用Hive的查询语言(即HiveQL)来完成的话,只有区区几行代码:

CREATE TABLE text (line STRING);LOAD DATA INPATH’a.txt’OVERWRITE INTO  TABLE text;CREATE TABLE word_count AS SELECT word,COUNT(1) AS count FROM(SELECT EXPLODE (SPLIT(line,’\s’)))AS word FROM text) wGROUP BY wordORDER BY word; 

    可以看出HiveQL的语法和SQL常类似,实际上HiveQL是基本实现了SQL-92标准的。
    Hive是由Facebook开发的海量数据查询工具,目前己经捐献给Apache软件基金会,是Apache的顶级项目。
    在实际开发中,80%的操作都不会由MapReduce程序直接完成,而是由Hive来完成,所以说Hive本身实践性非常强,并,1.使用频率}I常高,它没有高深的原理,只需要用户对SQL熟练即可。掌握Hive对于使用Hadoop来说非常重要。

  • 从MapReduce到SQL

    Hive显著地降低了使用Hadoop来做数据分析的学习成本,对于那些精通Java的人来说,Hive仍然是首选,因为Hive稳定,代码精简并且易于维护。
    从前面介绍的MapReduce编程实例可以看出,常见的count,  group by,  order by,  join等SQL操作都可以由MapReduce来完成,在某种意义上,Hive可以说是HiveQL ( SQL)到MapReduce的映射器,如下图所示。



    Hive可以将用户输入的HiveQL脚本转化为一个或多个MapReduce作业并在集群上运行。同样的,Hadoop生态圈里还有一个叫Pig的组件,它的作用和Hive类似,但Pig提供的不是SQL接口而是一种叫做Pig Latin的语言接口,如下图所示。


    和SQL相比,Pig Latin更加灵活但是学习成本更高,在生产环境下没有Hive普遍。Pig Latin和HiveQL都是对MapReduce进行了一种封装,使用户不必直接编写MapReduce程序,所以它们可以说是Hadoop的“高级语言”。

可以在Hive安装的节点输入hive进入Hive命令行:

Hive history file=/tmp/hadoop/hive_job_log_hadoop_201407010908_503992358.txt hive>

可以对己有的表进行查询操作:

hive> select count(*)from test;

这时控制台会输出日志:

Total MapReduce jobs=1Launching Job 1 out of 1Number of reduce tasks determined atcompile time:1In order to change the average load for a reducer (in bytes):        set hive .exec.reducers.bytes.per.reducer=<number>      In orderto limit the maximum number of reducers:          set hive.exec.reducers.max=<number>        In order to set a constant number of reducers:        set mapred.reduce.tasks=<number>      Starting Job=job-201407010902_0002,Tracking ORL=http://master:50030/jobdetails.jsp?jobid=job-201907010902_0002      Kill Command=/home/hadoop/hadoop-0.20.2一cdh3u6/bin/hadoop job一Dmapred.job.tracker=master:9001-kill job_201407010902_0002      2019一07一01 09:11:91,334 Stage-1 map=0%,  reduce = 0%.      2019一07一01 09:11:97,370 Stage-1 map=0%,  reduce=100%.      2014一07一01 09:11:50,397 Stage一1 map=100%,  reduce=100%      Ended Job=job_ 201907010902_ 0002        OK        0        Time taken:14 .889 seconds

    从日志可以发现该条HiveQL(以下简称HQL)被转化为一个MapReduce作业执行,执行时与普通MapReduce作业一样,也是分为map和reduce部分,还可以通过Hadoop的Web UI查看作业,日志已经将作业链接打印出来:

通过链接可以看到该作业的详细信息,如图所示。




值得一提的是,并不是所有HQL 都会转化为MapReduce任务,例如下面这种查询操作。
hive> select*from test:
    这种HQL是不会被Hive转化为MapReduce作业执行的,Hive只会将该表所分布在各个,DataNode的数据拉到Hive所在节点并依次输出。


本文参考书籍------Hadoop海量数据处理 技术详解与项目实战



0 0
原创粉丝点击