Hadoop Hive Spark hive建表语句对表在hdfs上存储的file或block数量、以及后续spark读文件跑模型的影响

问题描述:

前段时间使用hive语句建了两张较为相似的数据表,后来在spark上用这两张表跑相同的模型,发现两张表的模型训练时间不同,其中一张表跑起来非常慢。而两张表的字段数量和数据量并没有太大的差别,颇为奇怪。

解决方法:

先说结论:

以上问题是两张表在hdfs上存储的文件数量不一样导致的,初始原因是在执行建表语句的时候两张表用的reducer个数不同。
hive语句建的表在hdfs上存储的file个数( 即fs -ls命令展示的items个数)等于语句执行时候的reducer个数,而spark又是根据file的读取文件。所以若数据表的数据量过大而文件数量太少,导致每个文件过大,容易拖慢spark的执行速度。
可以通过设置reducer个数调整在hadoop上存储的file个数,从而调节spark读取的每个文件的大小,进一步提高模型训练速度。
需要注意:
若file的大小若超过hdfs设置的block size,则会对应多个block(即,file数量总数大于等于block个数),
hadoop集群上的有block.Size参数的设置,一般是64M、128M、256M等,hive上也有一个dfs.block.size参数,但是这个应该和map数量有关。

可以从以下原理、命令自行实验理解,此处不再赘述。

Hive部分:
Map与Reducer个数的确定:
Map数的计算公式:

num_Map_tasks = max[${Mapred.min.split.size},
                min(${dfs.block.size},  ${Mapred.max.split.size})]

Reducer个数:
1. 直接指定 : set mapred.reduce.tasks=100;
2. 调整每个reducer处理的数据大小:

 num_Reduce_tasks = min[${Hive.exec.Reducers.max}, 
                      (${input.size} / ${ Hive.exec.Reducers.bytes.per.Reducer})]

Mapred.min.split.size指的是数据的最小分割单元大小。
Mapred.max.split.size指的是数据的最大分割单元大小。
dfs.block.size指的是HDFS设置的数据块大小。

Hadoop命令:
查看表文件

hadoop fs -ls /xx/xx.db/xxtable

查看file和block

 hadoop fsck /xx/xx.db/dual    -files   -blocks  

查看某个block的block.size设置值以及备份个数

 hadoop fs -stat "%o %r"  /xx/xx.db/dual/000000_0
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hadoop是一个分布式计算框架,主要包括分布式存储框架(HDFS)和分布式计算框架(MapReduce)\[1\]。Hive是基于Hadoop的数据仓库基础设施,它提供了类似于SQL的查询语言HiveQL,使用户可以使用类似于关系型数据库的方式来查询和分析大数据\[2\]。Spark是基于内存计算的大数据并行计算框架,它提供了比Hadoop更快速和更灵活的数据处理能力\[3\]。Spark可以与Hadoop集成,通过Hadoop的分布式存储框架HDFS取和存储数据,同时也可以使用Hadoop的资源管理器YARN来管理Spark的计算任务\[2\]。因此,HadoopHiveSpark都是大数据处理中常用的工具和框架,它们可以相互配合使用来进行大规模数据的存储、查询和分析。 #### 引用[.reference_title] - *1* *3* [HadoopHiveSpark大数据框架的联系和区别](https://blog.csdn.net/weixin_42327752/article/details/117851198)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [HadoopHiveSpark的具体介绍,它们之间主要有什么关系?](https://blog.csdn.net/duozhishidai/article/details/86651526)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值