创建表时,内部表会将数据移到仓库指定路径,创建外部表时,仅记录数据所在路径,不对数据所在位置做任何改变
删除表时,内部表会将数据与元数据一起删除,外部表则只删除元数据。外部表相对安全,方便共享
当Hive自带的函数不能满足需要时,可以自定义函数,自定义函数分为三类:
UDF数据一进一出,UDAF数据多进一出,UDTF数据一进多出,常见列拆分
场景:MR中,shuffle阶段的一个key值对应了很多值,那这些值会进入一个分区中,两个表做join maptask中一个任务处理的时间明显大于其他的task的时间,于是出现了数据倾斜
开启数据倾斜时的负载均衡
set hivegroupbyskewindata=true;
思想:先随机分发,再按照key group by来分发处理。按照上面的设定,查询计划会有两个MRJob。第一个MRJob中map阶段随机分发,reduce阶段做部分聚合,这样的话相同的GroupBy Key有可能分配到不同的机子上,从而达到负载均衡的目的。第二个MRJob在第一个MRJob已经做了预聚合的基础上在完成一次聚合,这时,数据不均衡已经得到了很大的改善,基本解决了数据倾斜的问题
小文件带来的问题:对于HDFS来说制约了其存储的数据量,对于MR程序来说,严重影响了计算性能,。一个好的解决办法是使用CombinedInputFile和JVM重用
Hive小文件产生的原因:Hive查询后的数据量通常比源数据小得多。通常为了提升运算速度,我们会增加Reducer的数量,Reducer数量等于源数据的量除以hiveexecreducersbytesperreducer所配置的量(默认1G),当然这依然有可能造成大量的小文件。
解决小文件主要从这两个方向入手:输入合并[Map前合并小文件],输出合并[输出结果的时候合并小文件]
配置Map输入合并
配置Hive结果合并
压缩文件的处理:对于输出结果为压缩文件形式存储的情况,要解决小文件问题,如果在Map输入前合并,对输出的文件格式没有限制。如果输出合并,则必须配合SequenceFile来存储,否则无法进行合并,以下是示例:
在你的hadoop节点,根据job_id输入以下命令
yarn logs -applicationId application_1xxxxx
其中 _1xxxxx 为job_id那组数字。
什么是mrjob
一个通过hadoop、emr的mapreduce编程接口(streamming),扩展出来的一个python的编程框架。
安装
先安装python 25+版本(对应04)
线上目前版本:python 268
调度机安装mrjob即可:
>
以上就是关于Hive面经全部的内容,包括:Hive面经、如何查看Hadoopmrjob日志、怎么在python中安装mrjob等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)