`
brandNewUser
  • 浏览: 456118 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hive使用入门

阅读更多

 

Hive简介

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

建立Hive

hive中创建表时,默认情况下hive负责管理数据,这就是所谓的“托管表”。建立托管表的语法比较简单,和写SQL建表也比较类似:

 

DROP TABLE example_table;
CREATE TABLE if not exists example_table(example_id STRING, example_name STRING ) row format delimited fields terminated by ',';

 

需要注意的是,建立字段的定义,以及rowdelimeter,这里指定为”,”

 

托管表建立完成后,表中并无数据,这就需要我们向表中插入一些数据。但Hive中并不可以通过insert一条数据的方式向表中插入数据,可以通过下面的方式从本地文件中加载(当然也可以从HDFS中加载,语法稍微不同):

LOAD DATA LOCAL INPATH 'LocalFile' OVERWRITE INTO TABLE region_table;

  

由于在第一步中我们已经设定行分隔符为’,’,这里的LocalFile的每一行都要由,进行分隔,并在加载完成后,对应到定义的字段中去。

 

但在我们的实际应用场景下,Hive中使用的数据大部分都是从外部文件中得到的,这时候就需要创建“外部表”。

 

drop table task_table;
create external table if not exists task_table
( doc string )
stored as
inputformat 'Hive进行的InputFormat转换'
outputformat 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
location '/数据所在的HDFS文件夹/';

 

 

使用external关键字之后,Hive就知道数据并不是托管的,不会将数据移到自己的数据仓库目录中;而且在drop外部表时,也不会碰数据,只会删除hive中的元数据。

 

InputFormat

Hadoop中的InputFormat类似,我们在定义外部表时,需要指定特定的InputFormat以将HDFS上的文件按行映射到对应的数据上去。但是,我们在CREATE外部表语句中定义的InputFormatHadoopMap使用的InputFormat有所不同,外部表中的定义的InputFormat并不能决定map分片数量。

 

hive中运行“select * from example_table”时直接返回当前所有值,并不会启动mapreduce任务,而当构建一些复杂的特殊的HQL语句时,就会启动一个mapreduce任务来进行处理。

 

hive中运行参数的设置可以通过hive命令中的“--hive-conf 参数名=参数值”来定义,在hive启动的mapreduce任务中,使用的默认是org.apache.hadoop.hive.ql.io.CombineHiveInputFormat类,与table中定义的InputFormat根本无关,了解hadoop的应该知道,Combine表示可能会合并多个小文件一起处理,与我们当前需求并不符合。而如果需要设置每个文件只能由一个map任务来处理时,原来的继承FileInputFormat并重写isSplittable方法并不起作用,抛出异常。这是因为Hive中启动的mapreduce任务的InputFormat必须是org.apache.hadoop.hive.ql.io.HiveInputFormat的子类,可以通过设置mapred.input.format.class=org.apache.hadoop.hive.ql.io.HiveInputFormat,并将参数mapreduce.input.fileinputformat.split.minsize设置(单位是字节)的非常大来达到目的。

 

也可以在hive配置文件中进行整体的调整:

<property>
    <name>mapreduce.input.fileinputformat.split.minsize</name>
    <value>1099511627776</value>
</property>
<property>
    <name>hive.input.format</name>
    <value>org.apache.hadoop.hive.ql.io.HiveInputFormat</value>
</property>

 

 

UDF函数

Hive中有很多的内置函数,如果可以通过内置函数来解决,就不需要编写UDF来完成任务。

 

可以通过下面的命令来显示出hive中的所有内置函数:

 

hive -e "show functions";

  

比如可以使用from_unixtimecast hour三个函数的组合来完成将时间转换成小时的工作:

 

hour(from_unixtime(cast(raw['ti'] as bigint),'yyyy-MM-dd HH:mm:ss'))

  

如何在hive中自定义UDF(User Define Function)?这里说明一下如何在java中定义UDF

 

首先,需要继承类:org.apache.hadoop.hive.ql.exec.UDF,并写一个名称为evaluate的函数,由于Hive使用的是反射的方式来进行调用的,并不强调参数以及返回值,可以随便写,在使用时注意就可以了(甚至可以在UDF函数中重载多个evaludate方法)。

 

编写完成后,需要在HQL脚本中使用下面的方式来进行调用:

 

add jar “对应的jar包路径”
create temporary function function_name as 'UDF类名称';

 

 

之后,就可以在sql中使用function_name进行操作,注意其输入参数以及返回值。

HQL语句

hive中可以执行HQL语句,其基本格式与SQL语句非常类似。可以通过hive shell的方式执行,也可以通过hive –e “hql语句hive –f “hql文件的方式执行。

 

示例:

select example_udf_function(doc) raw   from example_table;

  

此外,HQL语句还支持嵌套。这部分只是个入门教程,因此,后续深入研究。

 

分享到:
评论

相关推荐

    HIVE从入门到精通.pdf

    ### HIVE从入门到精通知识点概述 #### 一、Hive简介 - **背景与需求**:随着商业智能领域数据量的急剧增加,传统的数据仓库解决方案成本高昂,难以满足需求。Hadoop作为一种流行且开源的MapReduce实现,在Yahoo、...

    Hive从入门到精通资源.zip

    本资源包“Hive从入门到精通资源.zip”包含了学习Hive所需的基本资料和依赖库,旨在帮助初学者快速掌握Hive的使用,并逐步晋升为高级用户。 1. **Hive简介** Hive是Facebook开源的一款基于Hadoop的数据仓库工具,...

    Hive入门与实战 PDF

    Hive入门与实战 PDF

    Hive入门与实战

    Hive入门与实战

    hive编程入门课程

    ### Hive编程入门课程知识点详解 #### 一、Hive概览 Hive是建立在Hadoop之上的数据仓库基础设施,由Facebook赞助开发。它通过提供SQL-like查询语言(HiveQL),使用户能够轻松地对存储在Hadoop分布式文件系统(HDFS...

    hive入门级详解

    Hive 入门级详解 Hive 是一个基于 Hadoop 的数据仓库系统,它提供了一个类似于关系型数据库的查询语言 HQL,并且可以将查询转换为 MapReduce 任务来执行。Hive 的存储结构主要包括三个层面:数据存储层、计算资源层...

    HIVE从入门到精通

    学习Hive从入门到精通,需要理解其在大数据处理中的角色,掌握HQL的使用,以及熟悉Hadoop环境下的数据操作。此外,深入理解Hive的优化策略对于提升数据分析效率至关重要。通过实践,可以逐渐熟练运用Hive解决实际的...

    Hive编程指南+HIVE从入门到精通+Hive高级编程+Apache Oozie

    Hive是基于Hadoop的数据仓库工具,它允许用户使用SQL(HQL)查询和管理大规模数据集。而Oozie是Hadoop生态系统中的工作流调度系统,用于管理Hadoop作业的生命周期。 **Hive编程指南** Hive的核心理念是将SQL语句...

    Hive入门与实战.ppt

    Hive入门与实战

    hive搭建及使用入门简介(内含PPT、各种表创建sql及hive搭建使用笔记)

    当进行JOIN操作时,如果两个表在JOIN键上使用了相同的分桶策略,Hive可以使用更高效的MapReduce算法,提升查询效率。 “各种表创建SQL”这部分将详细讲解CREATE TABLE语句的各种用法,包括创建基本表、分区表、分桶...

    大数据系列-Hive入门与实战.pptx

    大数据系列-Hive入门与实战 Hive 是什么? ---------------- Hive 是一个构建在 Hadoop 之上的数据仓库平台,能够将 SQL 语句转译成 MapReduce 作业,并在 Hadoop 集群上执行。Hive 表是 HDFS 的一个文件目录,一...

    hive入门文档笔记

    ### Hive入门文档笔记 #### 一、Hive简介与安装配置 Hive 是一个构建在 Hadoop 之上的数据仓库工具,它通过提供 SQL 查询功能,使得用户可以更方便地处理存储在 Hadoop 分布式文件系统(HDFS)中的大规模数据集。...

    HIVE 从入门到精通

    HIVE从入门到精通,Hive是基于Hadoop(HDFS, MapReduce)的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。本质是将SQL转换为MapReduce程序。

    Hive新手学习资料之Hive入门与实战.+Hive用户手册+hive函数大全中文版资源合集

    Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询...Hive入门与实战.pdf hive函数大全.doc Hive用户手册中文版.pdf Hive用户指南-V1.1.doc 喜欢的朋友可以下载学习。

    hive入门.pdf

    ### Hive入门知识点详解 #### 一、Hive简介 Hive是一种基于Hadoop的数据仓库工具,主要用于对存储在Hadoop文件系统(HDFS)中的大数据集进行查询和管理。它通过提供类SQL的查询语言(HQL)来简化对Hadoop上数据的...

    Hive初识入门参考的笔记

    ### Hive初识入门知识点 #### 一、Hive概述与学习方法 - **概念与原理**:Hive 是一个建立在 Hadoop 之上的数据仓库工具,它将结构化的文件映射为表,并提供了类似 SQL 的查询语言 HQL,使得用户能够通过 SQL 语法...

    hive入门资料

    ### Hive入门资料详解 #### 一、Hive的层次结构与基本操作 ##### 进入Hive 要开始使用Hive,首先需要登录到网关机,并通过命令`hive`来启动Hive命令行界面。 ##### 查看所有数据库 在Hive命令行中输入`show ...

    hadoop hive入门学习总结

    以下是对Hadoop Hive入门学习的详细总结: ### 1. Hive 安装与部署 #### 1.1 环境需求 在开始Hive的安装之前,确保你已经具备了以下基础环境: - **JDK 1.6** 或更高版本:Hive依赖Java运行环境,所以首先需要安装...

Global site tag (gtag.js) - Google Analytics