hive 系统架构
hive三种service
分别是cli,hiveserver和hwi。
cli是命令行工具,为默认服务,启动方式$HIVE_HOME/bin/hive 或 $HIVE_HOME/bin/hive –service cli。
hiverserver通过thrift对外提供服务,默认端口10000,启动方式为$HIVE_HOME/bin/hive–service hiveserver。
hwi为web接口,可以通过浏览器访问hive,默认端口9999,启动方式为$HIVE_HOME/bin/hive–service hwi。
hive UDF
讲一下数据库,SQl ,左外连接, 原理,实现
hive 分区
一个表可以拥有一个或者多个分区,每个分区以文件夹的形式单独存在表文件夹的目录下。
表和列名不区分大小写。
分区是以字段的形式在表结构中存在,通过describe table命令可以查看到字段存在,但是该字段不存放实际的数据内容,仅仅是分区的表示。
- 分区建表分为2种,一种是单分区,也就是说在表文件夹目录下只有一级文件夹目录。另外一种是多分区,表文件夹下出现多文件夹嵌套模式。
a、 单分区建表语句:create table day_table (id int, content string) partitioned by (dt string);单分区表,按天分区,在表结构中存在id,content,dt三列。
b、双分区建表语句:create table day_hour_table (id int, content string) partitioned by (dt string, hour string);双分区表,按天和小时分区,在表结构中新增加了dt和hour两列
hive 实现wordcount
|
|
还了解过数据的什么知识? 数据库引擎?
索引本身是一个类似于平衡二叉树的高效数据结构
大表和小表join.
join 字段重复量小的放前面
表a,表b 是有先后顺序的,性能主要卡在reduce的次数
数据倾斜问题
几亿条数据如果只查询个别几条怎么办
把数据写到es中
es查询几乎是实时的
hive的外部表
内部表:加载数据到hive所在的hdfs目录,删除时,元数据和数据文件都删除
外部表:不加载数据到hive所在的hdfs目录,删除时,只删除表结构。
- hive是内部表数据的管理者,但不是外部表数据的管理者
- 在删除内部表的时候,Hive将会把属于表的元数据和数据全部删掉;而删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除的!
load data local inpath直接把本地文件系统的数据上传到hdfs上
本质是load一个hdfs上的数据时会转移数据!
外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。
hive 不一定能够查询外部表,很多外部表的建立都是为了共享数据,hive—> es;hive—>hbase
生产环境中为什么建议使用外部表?
- 因为外部表不会加载数据到hive,减少数据传输、数据还能共享。
- hive不会修改数据,所以无需担心数据的损坏
- 删除表时,只删除表结构、不删除数据。