Hive实战

目录:

一、Hive是什么

二、Hive与关系数据库的区别

三、Hive架构介绍

四、Hive的实战操作

1) HIVE的启动

2) Hive创建数据库

3) Hive删除数据库

4) 创建HIVE表添加数据

5) HIVE的分区

6) HIVE条件查询

7) UDF函数

8) 删除HIVE表

9) 查询结果保存到本地

10) Hive的常用命令

————————————————————————————————————————

一、Hive是什么

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

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

二、Hive与关系数据库的区别

1) hive和关系数据库存储文件的系统不同,hive使用的是hadoop的HDFS(hadoop的分布式文件系统),关系数据库则是服务器本地的文件系统;

2) hive使用的计算模型是mapreduce,而关系数据库则是自己设计的计算模型;

3) 关系数据库都是为实时查询的业务进行设计的,而hive则是为海量数据做数据挖掘设计的,实时性很差;实时性的区别导致hive的应用场景和关系数据库有很大的不同;

4) Hive很容易扩展自己的存储能力和计算能力,这个是继承hadoop的,而关系数据库在这个方面要比数据库差很多。

三、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中,

四、Hive的实战操作

1) HIVE的启动

[root@hadoop11 bin]# ls
beeline  ext  hive  hive-config.sh  hiveserver2  metatool  schematool
[root@hadoop11 bin]# pwd
/usr/app/hive-0.12.0/bin
[root@hadoop11 bin]# sh /usr/app/hive-0.12.0/bin/hive

2) Hive创建数据库

Hive是一种数据库技术,可以定义数据库和表来分析结构化数据。主题结构化数据分析是以表方式存储数据,并通过查询来分析。本章介绍如何创建Hive 数据库。配置单元包含一个名为 default 默认的数据库。

CREATE DATABASE语句

创建数据库是用来创建数据库在Hive中语句。在Hive数据库是一个命名空间或表的集合。此语法声明如下:

CREATE DATABASE|SCHEMA [IF NOT EXISTS]<database name>

在这里,IF NOT EXISTS是一个可选子句,通知用户已经存在相同名称的数据库。可以使用SCHEMA 在DATABASE的这个命令。下面的查询执行创建一个名为userdb数据库:

hive> CREATE DATABASE [IF NOT EXISTS] userdb;
hive> CREATE DATABASE userdb;

下面的查询用于验证数据库列表:

hive>SHOW DATABASES;
default
userdb
hive> use default;
OK
Time taken: 0.114 seconds
hive> show tables;
OK
people
test
Time taken: 0.404 seconds, Fetched: 2 row(s)
hive>

3) Hive删除数据库

DROP DATABASE语句

DROP DATABASE是删除所有的表并删除数据库的语句。它的语法如下:

DROP DATABASE StatementDROP (DATABASE|SCHEMA) [IF EXISTS] database_name
[RESTRICT|CASCADE];

下面的查询用于删除数据库。假设要删除的数据库名称为userdb。

hive> DROP DATABASE IF EXISTS userdb;

以下是使用CASCADE查询删除数据库。这意味着要全部删除相应的表在删除数据库之前。

hive> DROP DATABASE IF EXISTS userdb CASCADE;

以下使用SCHEMA查询删除数据库。

hive> DROP SCHEMA userdb;

4) 创建HIVE表添加数据

people01.txt people02.txt
1,man,zhangliao 1,women,baibing
2,man,caocao 2,women,hangxue
3,man,simayi 3,women,ganwei
4,man,zhugeliang 4,women,jingtian
5,man,simayi 5,women,liushishi
hadoop fs -mkdir /usr/yuhui/hive
hadoop fs -mkdir /usr/yuhui/hive/20170309
hadoop fs -mkdir /usr/yuhui/hive/20170309/00
hadoop fs -mkdir /usr/yuhui/hive/20170310
hadoop fs -mkdir /usr/yuhui/hive/20170310/00

5) HIVE的分区

//添加数据到HDFS
[[email protected] data]# hadoop fs -put people01.txt /usr/yuhui/hive/20170309/00/
[[email protected] data]# hadoop fs -put people02.txt /usr/yuhui/hive/20170310/00/

//建立hive和Hdfs的外部关联表
hive> CREATE EXTERNAL TABLE people(id int,sex string,name string) partitioned by (logdate string,hour string) row format delimited fields terminated by ‘,‘;

hive> show tables;
hive> select * from people;

//追加数据
hive> ALTER TABLE people ADD IF NOT EXISTS PARTITION(logdate=20170309,hour=00)LOCATION
‘/usr/yuhui/hive/20170309/00‘; 

hive> ALTER TABLE people ADD IF NOT EXISTS PARTITION(logdate=20170310,hour=00)LOCATION
‘/usr/yuhui/hive/20170310/00‘; 

6) HIVE条件查询

查分区不用【引号】

hive> select * from people where logdate=20170310;
OK
1   women   baibing 20170310    00
2   women   hangxue 20170310    00
3   women   ganwei  20170310    00
4   women   jingtian    20170310    00
5   women   liushishi   20170310    00
Time taken: 0.64 seconds, Fetched: 5 row(s)

查条件用【引号】

7) UDF函数

package cn.orcale.com.bigdata.hive;

import org.apache.hadoop.hive.ql.exec.UDF;

public class helloUDF extends UDF {

    public String evaluate(String sex , String name) {

        try {

             if(sex.equals("man")){
                 return sex +"  ===>  "+ name;
             }

             return sex +"  ===>  "+ name;

            }
        catch (Exception e) {
            return null;
            }
        }

} 

//ADD JAR helloUDF.jar;
//create temporary function helloworld as ‘cn.orcale.com.bigdata.hive.helloUDF‘;
//select helloworld(people.sex, people.name) from people ;

8) 删除HIVE表

hive> drop table people;
OK
Time taken: 1.593 seconds
hive> SHOW TABLES;
OK
test

9) 查询结果保存到本地

hive> INSERT OVERWRITE LOCAL DIRECTORY ‘/root/data/hivedata‘ SELECT * FROM people;

10) Hive的常用命令

创建新表
hive> CREATE TABLE t_hive (a int, b int, c int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’;
导入数据t_hive.txt到t_hive表
hive> LOAD DATA LOCAL INPATH ‘/home/cos/demo/t_hive.txt’ OVERWRITE INTO TABLE t_hive ;
正则匹配表名
hive>show tables ‘t‘;
增加一个字段
hive> ALTER TABLE t_hive ADD COLUMNS (new_col String);
重命令表名
hive> ALTER TABLE t_hive RENAME TO t_hadoop;
从HDFS加载数据
hive> LOAD DATA INPATH ‘/user/hive/warehouse/t_hive/t_hive.txt’ OVERWRITE INTO TABLE t_hive2;

从其他表导入数据
hive> INSERT OVERWRITE TABLE t_hive2 SELECT * FROM t_hive ;
创建表并从其他表导入数据
hive> CREATE TABLE t_hive AS SELECT * FROM t_hive2 ;
仅复制表结构不导数据
hive> CREATE TABLE t_hive3 LIKE t_hive;
通过Hive导出到本地文件系统
hive> INSERT OVERWRITE LOCAL DIRECTORY ‘/tmp/t_hive’ SELECT * FROM t_hive;
Hive查询HiveQL
from ( select b,c as c2 from t_hive) t select t.b, t.c2 limit 2;
select b,c from t_hive limit 2;
时间: 2024-10-14 03:16:58

Hive实战的相关文章

Hive 实战(1)--hive数据导入/导出基础

前沿: Hive也采用类SQL的语法, 但其作为数据仓库, 与面向OLTP的传统关系型数据库(Mysql/Oracle)有着天然的差别. 它用于离线的数据计算分析, 而不追求高并发/低延时的应用场景. 最显著的特别是, Hive的数据是Schema On Read, 对数据的写入非常的自由和松散, 而对数据的读取则作了各种限制. 而RMDBS则是Schema On Write, 对数据写入限制非常的严苛. *). 数据导入/导出 让我们体验以下Hive中数据如何导入: 1). 创建数据库 db_

60分钟内从零起步驾驭Hive实战

内容: 1.Hive本质解析: 2.Hive安装实战: 3.使用Hive操作搜索引擎数据实战: ==========Hive本质到底是什么?============ 1.Hive是分布式数据仓库,同时又是查询引擎,所以 Spark SQL取代只是Hive 查询引擎,在企业实际生产环境下 Hive + Spark SQL是目前最为经典的数据分析组合: 2.Hive本身就是一个简单单机版本的软件,主要负责: 1)    把HQL翻译成Mapper(s)-Reducer-Mapper(s)的代码: 并

60分钟内从零起步驾驭Hive实战学习笔记

本博文的主要内容是: 1. Hive本质解析 2. Hive安装实战 3. 使用Hive操作搜索引擎数据实战 SparkSQL前身是Shark,Shark强烈依赖于Hive.Spark原来没有做SQL多维度数据查询工具,后来开发了Shark,Shark依赖于Hive的解释引擎,部分在Spark中运行,还有一部分在Hadoop中运行.所以讲SparkSQL必须讲Hive. 1. Hive本质解析 1. Hive是分布式数据仓库,同时又是查询引擎,所以SparkSQL取代的只是Hive的查询引擎,在

Spark on Yarn with Hive实战案例与常见问题解决

[TOC] 1 场景 在实际过程中,遇到这样的场景: 日志数据打到HDFS中,运维人员将HDFS的数据做ETL之后加载到hive中,之后需要使用Spark来对日志做分析处理,Spark的部署方式是Spark on Yarn的方式. 从场景来看,需要在我们的Spark程序中通过HiveContext来加载hive中的数据. 如果希望自己做测试,环境的配置可以参考我之前的文章,主要有下面的需要配置: 1.Hadoop环境 Hadoop环境的配置可以参考之前写的文章: 2.Spark环境 Spark环

升级版:深入浅出Hadoop实战开发(云存储、MapReduce、HBase实战微博、Hive应用、Storm应用)

      Hadoop是一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力高速运算和存储.Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS.HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上.而且它提供高传输率(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序

深入浅出Hadoop实战开发(HDFS实战图片、MapReduce、HBase实战微博、Hive应用)

Hadoop是什么,为什么要学习Hadoop?     Hadoop是一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力高速运算和存储.Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS.HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上.而且它提供高传输率(high throughput)来访问应用程序的数据,适合那些有着超大数据

hive入门学习线路指导

转自:http://www.aboutyun.com/thread-7598-1-1.html hive被大多数企业使用,学习它,利于自己掌握企业所使用的技术,这里从安装使用到概念.原理及如何使用遇到的问题,来讲解hive,希望对大家有所帮助.此篇内容较多:看完之后需要达到的目标1.hive是什么2.明白hive的原理3.会使用hive4.会使用hive编程 1.hive首先我们需要hive是什么?让你真正明白什么是hive上面讲的很明白1.hive是一个数据仓库2.hive基于hadoop.总

Spark入门实战系列--7.Spark Streaming(下)--实时流计算Spark Streaming实战

[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.实例演示 1.1 流数据模拟器 1.1.1 流数据说明 在实例演示中模拟实际情况,需要源源不断地接入流数据,为了在演示过程中更接近真实环境将定义流数据模拟器.该模拟器主要功能:通过Socket方式监听指定的端口号,当外部程序通过该端口连接并请求数据时,模拟器将定时将指定的文件数据随机获取发送给外部程序. 1.1.2 模拟器代码 import java.io.{PrintWriter} impor

零基础学习hadoop到上手工作线路指导初级篇:hive及mapreduce

此篇是在零基础学习hadoop到上手工作线路指导(初级篇)的基础,一个继续总结.五一假期:在写点内容,也算是总结.上面我们会了基本的编程,我们需要对hadoop有一个更深的理解:hadoop分为hadoop1.X.hadoop2.X,并且还有hadoop生态系统.这里只能慢慢介绍了.一口也吃不成胖子. hadoop 1.x分为mapreduce与hdfs 其中mapreduce是很多人都需要迈过去的槛,它比较难以理解,我们有时候即使写出了mapreduce程序,但是还是摸不着头脑.我们不知道ke