Hive简介

什么是Hive

1)由facebook开源的,最初用于解决海量结构化的日志数据统计问题。

2)构建在Hadoop之上的数据仓库。

3)Hive定义了一种类SQL的查询语言:HQL(类sql但不完全相同),在离线处理的中非常受欢迎,到目前为止还很受欢迎。

4)目前Hive的底层执行引擎有多种:MapReduce、Tez、Spark

Hive on MapReduce

Hive on Tez

Hive on Spark

5)支持多种不同的压缩格式(gzip、lzo、snappy、bzip2)、存储格式(TextFile、SequenceFile、RCFile、ORC、Parquet)以及自定义函数(UDF函数,就是当hive内置函数不能满足我们的需求时,做的补充和扩展)。

为什么要使用Hive(只用写sql就可以完成大数据的计算和查询)

1)简单、容易上手(提供了类似SQL的查询语言HQL)

2)为超大的数据集设计的计算和存储扩展能力(MR计算,HDFS存储)

3)统一的元数据管理(可与Presto/Impala/SparkSql等共享数据)

Hive的架构




hive只需要配置在一个节点就行了,因为他只是个客户端

Hive的环境搭建

下载

版本:hive-1.1.0-cdh5.7.0
安装包下载地址:   http://archive.cloudera.com/cdh5/cdh/5/

下载方式wget http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0.tar.gz

安装

tar -xvf hive-1.1.0-cdh5.7.0.tar.gz

配置环境变量

vi /etc/profile

生效配置文件source /etc/profile

export HIVE_HOME=/usr/hive/hive-1.1.0-cdh5.7.0

export PATH=$HADOOP_HOME/bin:$SPARK_HOME/bin:$JAVA_HOME/bin:$HIVE_HOME/bin:$PATH

这里需要把hadoop的根目录配置到hive的配置文件里面$HIVE_HOME/conf/hive-env.sh

事先安装mysql服务(远程机器或者本地机器都可以)

在$HIVE_HOME/conf添加hive-site.xml配置

<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://server110:3306/hive?createDatabaseIfNotExist=true</value>

</property>

<property>

<name>javax.jdo.option.ConnectionDriverName</name>

<value>com.mysql.jdbc.Driver</value>

</property>

<property>

<name>javax.jdo.option.ConnectionUserName</name>

<value>root</value>

</property>

<property>

<name>javax.jdo.option.ConnectionPassword</name>

<value>root</value>

</property>

把mysql的驱动mysql-connector-java-5.1.6.jar包放入到$HIVE_HOME/lib下。

启动

$HIVE_HOME/bin/hive

创建表

在hive.apache.org中看到hive wiki,在wiki页面找到DDL那里面详细的介绍的表的各种操作。

create table table_name(col_name data_type [comment col_comment])

例子:创建一个名字为hive_wordcnt的表,一个字段为string类型的名字叫context。

create table hive_wordcnt(context string) ;

查看hive中的所有表:show tables;

查看hive表的内容:select * from hive_wordcnt;

这时候,你肯定会有疑问?

hive创建的表存放在哪里了?答案:他是在hive链接的mysql数据库中,hive实例里面有个tbls表,里面包含了我们建的表信息。表里的字段信息存放在columns_v2表中。

SELECT * FROM tbls

SELECT * FROM columns_v2

如何把hdfs或者本地磁盘的数据文件的数据加载到hive中呐?

答案:在hive的官方网站上hive.apache.org中找到hive wiki页面找到DML里面有加载数据的方式。

结构:LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename 如果是加载本地磁盘的文件需要带上中括号的LOCAL,如果是加载hdfs里的文件就要去掉LOCAL。

Hive 3.0之前的加载操作是纯数据复制/移动操作,可将数据文件移动到与Hive表对应的位置。

filepath可以是:

1)相对路径,如 project/data1

2)一条绝对的道路,如 /user/hive/project/data1

3)带有scheme的完整URI和(可选)权限,例如 hdfs://namenode:9000/user/hive/project/data1

加载hdfs的数据进入hive:

load data inpath 'hdfs://10.6.24.143:8020/xxx/emp.txt' into table emp;

加载本地磁盘的数据进入hive:

load data local inpath '/usr/hadoop/testdata/partitionerData.txt' into table hive_wordcnt;

数据加载进来了,我们要hive表里的数据进行计算查看他们的word count的逻辑。sql如下:

select word,count(1) from hive_wordcnt lateral view explode(split(context,' ')) wc  as word group by word; 

lateral view explode():这个函数的意思是把每行记录按照指定分隔符进行拆解。

执行上面的hive sql,就可以会在底层转化成mapreduce作业,并在yarn上运行,如下图:


案例操练,加深我们对hive的印象

员工表和部门表的操作:

创建员工表:

DROP TABLE IF EXISTS emp;

create table emp(

empno int,

empname string,

job string,

mgr int,

hiredate string,

sal double,

comm double,

deptno int    

) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';   //这里指定字段与字段之间的分隔符

创建部门表

DROP TABLE IF EXISTS dept;

create table dept(

deptno int,

deptname string,

addr string

) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

加载数据到hive表

load data local inpath '/usr/hadoop/testdata/emp.txt' into table emp;

如果数据加载错了,就要重新加载,使用OVERWRITE覆盖关键字

load data local inpath '/usr/hadoop/testdata/emp.txt' OVERWRITE into table emp;

load data local inpath '/usr/hadoop/testdata/dept.txt' into table dept;

查看下两张表的数据是否正常:


做个简单的统计

1)求每个部门的人数

select deptno,count(1) from emp group by deptno;


2)左链接查询,显示员工的工号、名字、所属部门地址

select p.empno,p.empname,dt.addr from emp p left join dept dt on p.deptno=dt.deptno;


删除hive表的数据

delect:用于删除特定行条件

Hive 0.14之前用另外一种方式:insert overwrite table emp select * from emp where empno!=1001;

Hive 0.14开始可以使用DELETE、UPDATE ,删除只能在支持ACID的表上执行。

DELETE FROM tablename [WHERE expression]

TRUNCATE:truncate用于删除所有的行,这个行为在hive元存储删除数据是不可逆的

truncate table tablename;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348

推荐阅读更多精彩内容