大佬教程收集整理的这篇文章主要介绍了HIVE,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
Hive源数据默认存储在derby数据库中,不支持多客户端访问,所以需要将源数据存储在Mysql中,才支持多客户端访问。主要架构如下:
HIVE解析成MR的过程:
Hive通过给用户提供一系列交互接口,接受到用户的指令(sql语句),结合源数据(metastore),经过Driver内的解析器、编译器、优化器、执行器转换成MaoReduce(将sql转换成抽象语法树AST的解析器,将AST编译成逻辑执行计划的编译器,在对逻辑执行计划进行优化的优化器,最后将逻辑执行计划转换成MapReduce),提交给hadoop中执行,最后将执行返回的结果输出到用户交互接口。
2.Hive与传统数据库的区别
Hive和数据库除了用户类型的查询语言外,无其他相似
1.存储位置:Hive数据是存储在HDFS上。数据库保存在块设备或本地文件系统
2.数据更新:Hive不建议对数据改写。数据库通常需要经常修改
3.执行引擎:Hive通过MapReduce来实现。数据库用自己的执行引擎
4.执行速度:Hive执行延迟高,但它数据规模远超过数据库处理能力时,Hive的并行计算能力就体现了优势,数据库执行延迟较低
5.数据规模:Hive大规模的数据计算,数据库能支持的数据规模较小
6.扩展性:Hive建立在Hadoop上,随Hadoop的扩展性。数据库由于ACID语义的严格限制,扩展有限
A(atomicity)原子性:事务操作要么全部做完,要么不做。
C(consistency)一致性:事务运行期间,数据对象依然完整性
I(isolation)独立性:并发事务之间不会相互影响
D(druability)持久性:一旦事务提交后,修改将永久保存在数据库上
3.Hive内部表和外部表的区别
1.存储:外部表数据又HDFS管理;内部表数据又Hive自身管理
2.存储:外部表数据存储位置由自己指定(没有指定lication则在默认地址下新建);内部表数据存储在hive.metastore.warehouse.dir(默认在/usr/hive/warehouse)
3.创建:被external修饰的就是外部表;没被修饰的是内部表
4.删除:删除外部表仅仅删除元数据;删除内部表会删除元数据和存储数据
4.Hive中order by,sort by ,distribute by 和cluster by的区别
1.order by :对数据进行全局排序,只有一个reduce工作
2.sort by:每个mapreduce中进行排序,一般和diStribute by使用,且diStribute by写在sort by前面,当mapred.reduce.tasks=1时,效果和order by一样
3.diStribute by:类似MR的Partition,对key进行分区,结合sort by实现分区排序
4.cluster by:当diStribute by和sort by的字段相同时,可以使用cluster by代替,但cluster by只能是升序,不能指定排序规则
注意:在生产环境中order by使用的少,容易造成内存溢出(OOM)
生产环境中diStribute by 和sort by用的多
5.row_number(),rank()和dense_rank()的区别
row_number():根据查询结果的顺序计算排序,多用于分页查询
rank():排序相同时序号重复,总序数不变
dense_rank():排序相同的序号重复时,总序数减少
@H_874_71@SELEct name,subject,score row_number() over(partition by subject order by score desc) rn, rank() over(partition by subject order by score desc) r, dense_rank() over(partition by subject order by score desc) dr from student_score;
6.Hive中常用的系统函数
1.date_add(str,n),date_sub(str,n) 加减时间
2.next_day(to_date(str,'MO') 周指标相关,获取str下周一日期
3.date_format*=(str,'yyyy') 根据格式整理日期
4.last_day(to_date(str)) 求当月最后一天日期
5.collect_set(col)收集数据返回一个以逗号分隔的字符串数组
6.get_json_object(jsonstr,;$.object') 解析json,使用 $.object获取对象值
7.NVL(str,replacE) 空字段赋值,str为空返回replace值;两个都为空则返回null
7.Hive如何实现分区
1.建表:create tbale tablename(col1 String) partitioned by (col2 String);
2.添加分区:alter table tablename add partition(col2='202101')
3.删除分区:alter table tablename drop partition(col2='202101')
8.Hive导入数据的五种方式
1.Load:可以从本地或HDFS上导入,本地是copy,HDFS是移动
本地:load data local inpath '/root/student.txt' into table student;
HDFS:load data inpath '/usr/hive/data/student.txt' into table student;
2.insert:往表里插入
insert into table student values(1,'zhangsan');
create table if not exists stu1 as SELEct id,name from student;
create external if not exists stu2 like student lication '/usr/hive/warehouse/student/student.txt';
5.import,先从hive上使用export导出再导入
import table stu3 from /usr/export/student'
9.Hive导出数据的五种方式
1.insert 查询结果导出到本地或HDFS
insert overwrite local directory '/root/insert/student' SELEct id ,name from student;
insert overwrite directory '/usr/insert/student' SELEct id, name from student;
2.hadoop命令导出本地
hive> dfs -get /usr/hive/warehouse/student/00000_0 /root/hadoop/student.txt
3.hive SHell命令导出
$ bin/hive -e 'SELEct id,name from student;' >/root/hadoop/student.txt
4.Export导出到HDFS
hive>export table student to '/usr/export/student';
5.Sqoop导出
10.自定义UDF,UDTF函数
用UDF函数解析公共字段,用UDTF函数解析事件字段
自定义UDF:继承UDF,重写evaluate方法
自定义UDTF:继承GenericUDTF,重写3个方法:initialize(自定义输出的列名和类型),process(将结果返回forWARD(result)),close
Hive自定义函数包括三种UDF、UDAF、UDTF
UDF(User-Defined-Function) 一进一出
UDAF(User- Defined Aggregation Funcation) 聚集函数,多进一出。Count/max/min
UDTF(User-Defined Table-GeneraTing Functions) 一进多出,如lateral view explore()
使用方式 :在HIVE会话中add 自定义函数的jar文件,然后创建function继而使用函数
以上是大佬教程为你收集整理的HIVE全部内容,希望文章能够帮你解决HIVE所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。