我的hdfs块大小是256mb,我读取了一个9.9gb的txt文件,然后用spark把它转换成orc类型,通过调用 write
方法:
dataframe.coalesce(16).write.mode("overwrite")
.partitionBy("myDate").
orc("hdfs://myhost:9090/user/hive/warehouse/ods/data.orc")
我设想,当我在hdfsui上查看结果并浏览文件时,下面应该有16个文件 data.orc
目录和每个文件的大小小于块大小256mb。但是,只有一个目录 mydate=20210131
,当我进入它,只有一个1.29gb的文件,这是远远大于块大小256mb。
这种情况让我很困惑,谁能告诉我:
为什么一个1.29GB的文件可以放入一个256mb的块中?我有什么误解吗?
为什么文件没有划分成更小的文件,甚至我调用coalesce(16)来尝试将它们划分成16个部分,这样就有16个文件了?
如果我的文件小于256mb,比如说200mb,剩下的56mb会被系统重用吗?
1条答案
按热度按时间8qgya5xd1#
我已经清楚地告诉自己,大于块大小的文件保存在多个块中,但hdfs上只有一个文件。
在本地模式下,只有一个执行器,驱动程序。我打电话给
partiitonBy(mycol)
在我的代码中,只有所以列中只有一个值mycol
,因此只有一个文件。是的,未使用的空间将不会被占用。