distribute by是控制在map端如何拆分数据给reduce端的。hive会根据distribute by后面列,对应reduce的个数进行分发,默认是采用hash算法.
大部分情况都用于解决Map输出的文件大小不均,Reduce输出文件大小不均,小文件过多,文件超大等情况.
背景:
1.在很多情况下,使用spark sql insert overwrite 表时,由于spark.sql.shuffle.partitions的限定导致分区文件数过多的情况
2.动态分区过多,个别分区下文件大小不均,例如数据延迟等情况,如何控制不同分区下文件的个数

第一种情况: 采用下面方式可以控制此分区下文件个数,具体由业务决定
insert overwrite table temp partition(day)
select c.* from
(select a.*, cast(rand() * 10 as int) as fileNum
(select * from user ) a
left join
(select * from test) b
on a.user_id =b.user_id ) c distribute by fileNum

如 :

原本小文件有1000个,加上distribue by 后 ,只有12个小文件。

第二种情况:由于面对多个分区,每个分区下数据大小不一致,代码中往往是在创建临时表时重分区控制最终的文件数,但并不能满足所有分区.

解决方式:distribute by rand() 将对数据进行打散,打散的数据会根据spark.sql.shuffle.partitions=20的数进行重分区.此时,只需要控制partition下同分区的rand() (即random_fileNum)即可,最终 random_fileNum 会与 spark.sql.shuffle.partitions 做hash算法.

insert overwrite  table temp partition(day,varsion)
select * from temp distribute by random_fileNum

上述我设置的spark.sql.shuffle.partitions=20,根据数据情况RANDOM_RANGE = 20000(可根据最大文件区间设置此值足够大)

最后结果近七天内分区文件数为20,七天开外文件数为1

总结:上述两种情况 都会根据 distribute by random_fileNum 中 的 random_fileNum 与 spark.sql.shuffle.partitions 做hash,相同hash值会聚合到同一个reduce中,从而控制最终文件数 。

2.distribute by、sort by 、cluster by
hive中(distribute by + “表中字段”)关键字控制map输出结果的分发,相同字段的map输出会发到一个reduce节点去处理。sort by为每一个reducer产生一个排序文件,他俩一般情况下会结合使用。

hive> select * from store distribute by merid sort by money desc;

cluster by 相当于 distribute by 和sort by 的结合,默认只能是升序,以下两种写法查询结果相同

//cluster by
hive>select * from store cluster by merid;
//distribute by,sort by
hive>select * from store distribute by merid sort by merid asc;

————————————————
版权声明:本文为CSDN博主「fantasticqiang」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fantasticqiang/article/details/80769316
————————————————
版权声明:本文为CSDN博主「fantasticqiang」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fantasticqiang/article/details/80769316

————————————————
版权声明:本文为CSDN博主「寒陌辰」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/WangzhenBeyond/article/details/84315366

distribute by控制分区文件数相关推荐

  1. linux socket文件数限制,Linux下高并发socket最大连接数所受的限制问题

    Linux下高并发socket最大连接数所受的限制问题1.修改用户进程可打开文件数限制在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时, 最高的并发数量都要受到系统对 ...

  2. 10亿+文件数压测,阿里云JindoFS轻松应对

    简介: Apache Hadoop FileSystem (HDFS) 是被广为使用的大数据存储方案,其核心元数据服务 NameNode 将全部元数据存放在内存中,因此所能承载的元数据规模受限于内存, ...

  3. mysql constant number,Mysql报Too many connections,不要乱用ulimit了,看看如何正确修改进程的最大文件数...

    背景 今天在学习mysql时,看到一个案例,大体来说,就是客户端报Too many connections.但是,客户端的连接池,限制为了200,两个客户端java进程,那也才400,然后mysql配 ...

  4. HDFS千万级别文件数/PB规模量级的数据迁移实战总结

    文章目录 前言 HDFS元数据快速膨胀带来的性能瓶颈问题 超大规模数据迁移所面临的挑战和困难 DistCp的全面优化提升 前言 前面时间笔者曾写过一篇关于利用HDFS fastcopy功能来加速Dis ...

  5. linux 目录最大文件数,Linux目录数和文件数限制(目录上最大文件数)

    Linux目录数和文件数限制(目录下最大文件数) Linux目录数和文件数限制(目录下最大文件数) 一.目录数限制: 在同一个路径下,一级子目录的个数限制为 31998 .如果你的应用生成的目录可能会 ...

  6. ORA-19809: 超出了恢复文件数的限制

    实验环境:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod 实验背景:向tough.t中插入40万条记录,然后rollb ...

  7. 打开文件数过多 linux,Linux 解决 打开的文件数太多

    服务器异常 最近某个生产应用 调接口 出现了 "打开的文件过多" 的错误提示 . 通过运维查看 服务器的 进程最大文件数默认就是 1024 ,因此需要增加最大的文件数 增加大了 文 ...

  8. Hive:解决Hive创建文件数过多的问题

    Hive:解决Hive创建文件数过多的问题 参考文章: (1)Hive:解决Hive创建文件数过多的问题 (2)https://www.cnblogs.com/wcwen1990/p/7600161. ...

  9. python遍历文件夹下所有文件大小_python遍历文件夹——两种遍历本地文件记录文件夹个数、文件数及文件大小的方法...

    这两个函数的功能:得到给定目录的文件夹个数.文件数,以及文件大小 walkFolders函数没有用到os.walk函数,是自己递归调用的:walkfunc函数用到了os.walk函数,方便了很多. i ...

最新文章

  1. EXCEL保存提示“隐私问题警告:此文档中包含宏……”解决办法
  2. 使用sqoop将HIVE中的数据输出带Mysql中
  3. 国家网络安全宣传周:勒索病毒利如刀,上网备好技能包
  4. 关于ics lab8 performance中的rotate
  5. 每天晚上坚持喝一杯无糖燕麦会怎样?
  6. intellij idea rearrange code
  7. 【1】测试用例设计-测试用例概述
  8. linux SSH rsa认证方式登录需理清的问题
  9. ensp 双机热备 配置_华为交换机VRRP配置教程(一)
  10. 根据银行卡号判断所属银行
  11. 移动app原型设计工具:Flinto for Mac
  12. 学习记录 内存频率 内存通道 内存带宽 对计算的影响
  13. 一个app项目如何从想法一步一步落地?有哪些必要的流程?
  14. 关于Google Play这个应用市场app signing的坑
  15. 京东咚咚架构演讲读后感
  16. 掉线(自创--根据刘德华《今天》歌词改编)
  17. 云服务器Redis集群部署及客户端通过公网IP连接问题
  18. EZ-USB CY7C68013A固件Slave FIFO初始化
  19. Codeforces 1183E/H Subsequences dp
  20. 程序员自学者的福利来了,各种编程视频教程,助你自学编程畅通无阻。

热门文章

  1. 超级计算机燕 排名,正文 第一卷 六年之前 HK171 舍弃的超级计算机燕? (485加更)...
  2. Android手机红外开发—点击和长按事件
  3. 腾讯发布叮当助手,人工智能语音助手将赋能智能电视
  4. 怎么看计算机的网络ping值,Win7怎么查看ping值 win7测试ping值的方法
  5. tao.Opengl
  6. BZOJ4939 [YNOI2016]掉进兔子洞
  7. python roundup 和 rounddown
  8. 重大发现:微信新上线的“群接龙”功能,你还不知道吗?
  9. Python与Anaconda、Jupyter Notebook与Pycharm
  10. HBase常用过滤器