Hive:解决Hive创建文件数过多的问题
2017-08-10 15:37
344 查看
工作中遇到的问题之一,这篇说得很清楚,转过来收藏:
将临时表里面的数据按照天分区插入到线上的表中去,出现了Hive创建的文件数大于100000个的情况,我的SQL如下:
iteblog_tmp表里面一共有570多G的数据,一共可以分成76个分区,SQL运行的时候创建了2163个Mapper,0个Reducers。程序运行到一般左右的时候出现了以下的异常:
并最终导致了SQL的运行失败。这个错误的原因是因为Hive对创建文件的总数有限制(
* 76 = 164388个文件,运行中肯定会出现上述的异常。为了能够成功地运行上述的SQL,最简单的方法就是加大
/ 164388 = 3.550624133148405MB,可想而知,十万多个这么小的小文件对Hadoop来说是多么不好。那么有没有好的办法呢?有!
我们可以将dt相同的数据放到同一个Reduce处理,这样最多也就产生76个文件,将dt相同的数据放到同一个Reduce可以使用
修改完之后的SQL运行良好,并没有出现上面的异常信息,但是这里也有个问题,因为这76个分区的数据分布很不均匀,有些Reduce的数据有30多G,而有些Reduce只有几K,直接导致了这个SQL运行的速度很慢!
能不能将570G的数据均匀的分配给Reduce呢?可以!我们可以使用
这个SQL运行的时间很不错,而且生产的文件数量为Reduce的个数*分区的个数,不到1W个文件。
resource:https://www.iteblog.com/archives/1533
将临时表里面的数据按照天分区插入到线上的表中去,出现了Hive创建的文件数大于100000个的情况,我的SQL如下:
hive> insert overwrite table test partition(dt) |
Hive.exec.max.created.files),默认是100000个,而这个SQL在运行的时候每个Map都会创建76个文件,对应了每个分区,所以这个SQL总共会创建2163
* 76 = 164388个文件,运行中肯定会出现上述的异常。为了能够成功地运行上述的SQL,最简单的方法就是加大
hive.exec.max.created.files参数的设置。但是这有个问题,这会导致在iteblog中产生大量的小文件,因为iteblog_tmp表的数据就570多G,那么平均每个文件的大小=570多G
/ 164388 = 3.550624133148405MB,可想而知,十万多个这么小的小文件对Hadoop来说是多么不好。那么有没有好的办法呢?有!
我们可以将dt相同的数据放到同一个Reduce处理,这样最多也就产生76个文件,将dt相同的数据放到同一个Reduce可以使用
DISTRIBUTE BY dt实现,所以修改之后的SQL如下:
能不能将570G的数据均匀的分配给Reduce呢?可以!我们可以使用
DISTRIBUTE BY rand()将数据随机分配给Reduce,这样可以使得每个Reduce处理的数据大体一致。我设定每个Reduce处理5G的数据,对于570G的数据总共会起110左右的Reduces,修改的SQL如下:
hive> set hive. exec .reducers.bytes.per.reducer=5120000000; |
resource:https://www.iteblog.com/archives/1533
相关文章推荐
- Hive:解决Hive创建文件数过多的问题
- Hive:解决Hive创建文件数过多的问题
- Hive文件数创建过多的问题
- 无法创建目录或文件问题的解决办法
- 解决vs2010“创建或打开C++浏览数据库文件 发生错误”的问题"
- 解决vs2010“创建或打开C++浏览数据库文件 发生错误”的问题 Microsoft SQL Server Compact 3.5
- Log4j创建日志服务器 解决集群日志问题及话单文件
- 解决Linux中在创建大于4g文件时遇到的File Size Limit Exceeded问题
- 解决pfsense无法创建文件问题
- 解决vs2010下不能创建项目及文件的问题
- 关于hive的tmp目录文件个数过多的问题
- 15 Linux更改权限解决新建用户不能读写创建文件/文件夹的问题
- 解决打开文件过多的问题
- 解决vs2010“创建或打开C++浏览数据库文件 发生错误”的问题"
- 解决vs2010“创建或打开C++浏览数据库文件 发生错误”的问题"
- Linux Samba服务器只能创建文件 不能打开文件和创建文件夹问题的解决方法
- 解决安装sqlServer2000提示 "以前的某个程序安装已经在计算机上创建挂起的文件操作,必须重启计算机"问题
- 解决vs2010“创建或打开C++浏览数据库文件 发生错误”的问题 Microsoft SQL Server Compact 3.5
- 解决Flex创建文件安全沙箱的问题
- DataGuard ORA-01111文件创建失败问题解决