简短介绍


大家好,我又来了。昨天国庆玩得可还开心吧。在火车上闲着无聊给大家分享一下大数据工具Hive。这可是大数据工作必备技能之一。掌握Hive的使用。差不多可以做做大数据数仓类的工作了。

 

 

01-大数据整体架构

 

在了解Hive之前,我们来看看大数据Hadoop技术栈的整体架构

datastudio连接hive方案 hue大数据连接hive_datastudio连接hive方案

说明:不难看出,Hive是做查询分析用的,属于上层工具了。当然,现在一般都是在Hue中编写Hive语句的。

 

02-什么是HIVE

Hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive十分适合对数据仓库进行统计分析。

了解知道了吧。Hive是Hadoop之上的一个工具。采用Sql来替代底层MapReduce的开发(MapReduce简称:MR,MR是计算引擎)。在没有出现Hive之前是需要采用Java编写MR代码的。想想,现在多么幸福啊!

datastudio连接hive方案 hue大数据连接hive_hive_02

 

 

03-为什么用Hive

  • 提供类Sql语法,可快速开发。
  • 采用Sql封装底层MapReduce,降低学习成本。
  • 扩展性强,因为是开源的。不习惯就改造它^_^

 

04-Hive与关系型数据库对比

对比项

Hive

关系型数据库

(如:mysql、oracle 统称:RDBMS)

查询语句

叫法

Hql

Sql

数据存储

Hdfs(分布式)

本地磁盘

执行引擎

MapReduce/Spark

Excutor

执行延时



处理规模

海量数据(GB以上TB\PB)

较大数据量(GB级别)

节点扩展

方便

不方便

 

05-Hive实战操作

这里就讲讲我们工作中经常用到的吧。

语句一般在Hue窗口中去执行哦。

  • 表创建
-- Hive有几种文件格式.不同格式性能不同
-- textfile是默认的文件格式
-- orc文件格式压缩性能最好,列式存储,但是不支持采用Impala查询
-- parquet文件格式压缩性能其次,列式存储,支持Impala查询(推荐)

-- 如下建表默认textfile格式
create table dc_dev.test_table_txt
(   memberlevel  string  comment  '会员等级'
   ,membergrade  string  comment  '用户等级'
);

-- 如下建表orc格式
create table dc_dev.test_table_orc
(   memberlevel  string  comment  '会员等级'
   ,membergrade  string  comment  '用户等级'
) STORED AS orc;

-- 如下建表parquet格式
create table dc_dev.test_table_par
(   memberlevel  string  comment  '会员等级'
   ,membergrade  string  comment  '用户等级'
) STORED AS parquet;

 

  • 数据文件导入Hive
-- hive接收导入的文件只能是textfile格式才能接收。
-- \t表示文件内部字段的分隔符。不指定\t的话,分隔符默认是\001
create table dc_dev.test_table_txt
(   memberlevel  string  comment  '会员等级'
   ,membergrade  string  comment  '用户等级'
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;

-- 导入方式一(hue中无法使用这个语句,因为Hue执行,调用了Hive的一个内部接口.不是Hive客户端模式)
-- 文件在本地磁盘(即:文件在某个集群节点上,必须到文件所在节点执行才可以)
-- 使用关键词:local(语句load data local中的local)
-- into 是增量导入,之前表中数据依旧存在
load data local inpath '/xx目录/xx文件.txt' into table dc_dev.test_table_txt;
-- overwrite into 是覆盖导入,之前数据将被文件中数据全部替换掉
load data local inpath '/xx目录/xx文件.txt' overwrite into table dc_dev.test_table_txt;

-- 导入方式二
-- 文件在Hdfs中(即:文件在HDFS分布式文件系统中了,去除关键词local)
-- into 是增量导入,之前表中数据依旧存在
load data inpath '/xx目录/xx文件.txt' into table dc_dev.test_table_txt;
-- overwrite into 是覆盖导入,之前数据将被文件中数据全部替换掉
load data inpath '/xx目录/xx文件.txt' overwrite into table dc_dev.test_table_txt;

 

  • 数据导出至文件
-- hive提供客户端模式执行指令
-- 客户端模式:即在Linux系统登录状态下。直接敲击指令。
-- 例如:1、登录linux 2、直接敲击指令‘hive’。这就是客户端模式了(上面说的导入方式一,只能是客户端模式下执行的)

hive -e '查询语句' > /xx目录/xx文件.txt
hive -f 'sql文件' > /xx目录/xx文件.txt

-- 上面导出数据,就是执行导出sql,将查询结果重定向到一个文件中。采用的是linux的一些特性。

 

  • 数据查询
-- hive查询同mysql语法很类似。
-- 但是多了很多分析函数哦。如:row_number() over();rank() over() 等等
-- 除此之外还支持自定义UDF函数
-- 这里就不多写了哈。感兴趣的关注我,会教你们的
select row_number() over(),a.* from dc_dev.test_table_txt a;

 

  • 数据插入

 

-- 普通插入语法
insert into table dc_dev.test_table_txt values('测试会员等级','测试用户等级');

-- 增量插入,之前数据依旧存在
insert into table dc_dev.test_table_txt
select 
'测试会员等级',
'测试用户等级' from dc_dev.test_table_orc;

-- 覆盖插入,之前数据会被清理覆盖
insert overwrite table dc_dev.test_table_txt
select 
'测试会员等级',
'测试用户等级' from dc_dev.test_table_orc;

 

  • 数据修改

hive没有update语法,所以灵活使用insert into 和insert overwrite 语法来实现数据修改。先查出需要替换的,之后通过覆盖的方式来实现数据修改。

 

06-小结

hive的出现为我们在Hadoop之上查询分析提供了很大的帮助。之前也提到过 On Sql的概念。因为sql语法是目前公认最成功的开发语言,几十年了语法都没有大的改变。而且Sql编程也很容易学习。所以很多组件想通过Sql来实现转化,替代底层复杂的开发方式。未来可能是,学好Sql等于啥都会的时代。小伙伴们大胆的去操作吧。简单理解,Hive就是写Sql好了。没啥大不了的。遇到问题再弥补缺失的知识好了。哎呦,趴着敲字真累。亲们,我也快到家咯!打扰了,小伙伴们继续好好享受假期吧。

 

datastudio连接hive方案 hue大数据连接hive_大数据_03

图片截自www.yiibai.com