小白篇(六):大数据Hive介绍和使用
我的原文地址:
简短介绍
大家好,我又来了。昨天国庆玩得可还开心吧。在火车上闲着无聊给大家分享一下大数据工具Hive。这可是大数据工作必备技能之一。掌握Hive的使用。差不多可以做做大数据数仓类的工作了。
01-大数据整体架构
在了解Hive之前,我们来看看大数据Hadoop技术栈的整体架构
说明:不难看出,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代码的。想想,现在多么幸福啊!
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好了。没啥大不了的。遇到问题再弥补缺失的知识好了。哎呦,趴着敲字真累。亲们,我也快到家咯!打扰了,小伙伴们继续好好享受假期吧。
图片截自www.yiibai.com
上一篇: Java数组之一维数值数组之成绩统计
下一篇: 大数据之Hive(四):hive综合案例
推荐阅读