Hive和Spark当中对小文件的处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive和Spark当中对小文件的处理相关的知识,希望对你有一定的参考价值。

参考技术A

数仓面试高频考点:
【在Hive中如何解析小文件过多问题,指定的是:处理表中数据时,有很多小文件】

| Table Parameters: | NULL | NULL |
| | bucketing_version | 2 |
| | numFiles | 1 |
| | numRows | 0 |
| | rawDataSize | 0 |
| | totalSize | 656 |
| | transient_lastDdlTime | 1631525001 |

如果没有显示表的统计信息,执行如下命令,再次查看表信息
ANALYZE TABLE db_hive.emp COMPUTE STATISTICS;

| Table Parameters: | NULL | NULL |
| | COLUMN_STATS_ACCURATE | "BASIC_STATS":"true" |
| | bucketing_version | 2 |
| | numFiles | 1 |
| | numRows | 14 |
| | rawDataSize | 643 |
| | totalSize | 656 |
| | transient_lastDdlTime | 1655113125 |
| | NULL | NULL |

第一种,将小文件合并成一个大文件
第二种,使用SparkContext中提供: wholeTextFiles 方法,专门读取小文件数据。
将每个文件作为一条KV存储在RDD中, K:文件名的绝对路径,V:文件的内容
用于解决小文件的问题,可以将多个小文件变成多个KV,自由指定分区个数

spark sql怎么去获取hive 表一定日期范围内的数据

我现在需要去hive表当中读取数据,读取数据时是以日期为条件获取一个时间段内的数据,在hive当中操作是可以获取的但是在spark SQL当中获取不到。hive表操作语句是OK的,hive语句如下:
SELECT id,merchant_no,sku_id,stock_no,change_count,stock_count_snapshoot,create_time,order_id,stock_type,start_time FROM stock_data WHERE merchant_no='a69683' and cast(start_time as date) between '2017-09-01' and '2017-09-10';

参考技术A select orderid,fenjian,timee
from
(
select orderid,fenjian,timee,row_number(orderid,fenjian) rn
from (
select orderid,fenjian,timee from tableName
distribute by orderid,fenjian sort by orderid,fenjian,timee asc
) t1
) t2
where t2.rn=1追问

您好,能够详述一下吗

以上是关于Hive和Spark当中对小文件的处理的主要内容,如果未能解决你的问题,请参考以下文章

从源码看Spark读取Hive表数据小文件和分块的问题

HIVE:小文件合并

Spark 处理小文件

Hive/Spark小文件解决方案(企业级实战)

Spark SQL优化之路——Hive篇

hive/spark写入保存出现小文件过多的解决