亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Spark分區如何在HDFS中的文件上工作?

Spark分區如何在HDFS中的文件上工作?

素胚勾勒不出你 2019-10-16 11:10:39
我正在使用HDFS在集群上使用Apache Spark。據我了解,HDFS在數據節點上分發文件。因此,如果在文件系統上放置“ file.txt”,它將被拆分為多個分區?,F在我打電話rdd = SparkContext().textFile("hdfs://.../file.txt") 來自Apache Spark。rdd現在是否已自動與文件系統上的“ file.txt”分區相同?我打電話時會發生什么rdd.repartition(x)其中x>那么hdfs使用的分區?Spark會在物理上重新排列hdfs上的數據以在本地工作嗎?示例:我在HDFS系統上放置了一個30GB的文本文件,該文件正在10個節點上分發。Spark是否會使用相同的10個分區?和b)當我調用repartition(1000)時,在整個集群上隨機播放30GB?
查看完整描述

3 回答

?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

當Spark從HDFS讀取文件時,它將為單個輸入拆分創建一個分區。輸入拆分由InputFormat用于讀取此文件的Hadoop設置。例如,如果您textFile()將其TextInputFormat用于Hadoop,它將為您返回單個HDFS塊的單個分區(但是分區之間的拆分將按行拆分而不是精確的塊拆分完成),除非您進行了壓縮文本文件。如果是壓縮文件,則將為單個文件獲得單個分區(因為壓縮文本文件不可拆分)。

當你調用rdd.repartition(x)它會執行從數據的洗牌N你有partititons rddx你想擁有的分區,分區將在循環賽的基礎上進行。

如果您在HDFS上存儲了30GB的未壓縮文本文件,則使用默認的HDFS塊大小設置(128MB),它將存儲在235個塊中,這意味著從該文件讀取的RDD將具有235個分區。當您調用repartition(1000)RDD時,它會被標記為要重新分區,但實際上,只有當您在此RDD之上執行操作時,它才會被改編為1000個分區(惰性執行概念)


查看完整回答
反對 回復 2019-10-16
?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

這里是快照“ 如何在HDFS塊被裝載到星火工人分區 ”


在此圖像中,將4個HDFS塊作為Spark分區加載到3個工作程序內存中


http://img1.sycdn.imooc.com//5da68a5700016d1407200542.jpg

示例:我在HDFS系統上放置了一個30GB的文本文件,該文件正在10個節點上分發。


會火花


a)使用相同的10個分區?


Spark將相同的10個HDFS塊作為分區加載到工作人員內存中。我假設30 GB文件的塊大小應為3 GB,以獲取10個分區/塊(默認配置為conf)


b)當我調用repartition(1000)時,在整個群集上隨機播放30GB?


是的,Spark會在工作程序節點之間隨機播放數據,以便在工作程序內存中創建1000個分區。


注意:


HDFS Block -> Spark partition   : One block can represent as One partition (by default)

Spark partition -> Workers      : Many/One partitions can present in One workers 


查看完整回答
反對 回復 2019-10-16
?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

當使用spark-sql讀取未存儲桶的HDFS文件(例如鑲木地板)時,DataFrame分區的數量df.rdd.getNumPartitions取決于以下因素:


spark.default.parallelism (大致轉化為該應用程序可用的#cores)

spark.sql.files.maxPartitionBytes (預設128MB)

spark.sql.files.openCostInBytes (默認為4MB)

分區數量的粗略估算為:


如果您有足夠的內核來并行讀取所有數據(即,每128MB數據至少有一個內核)


AveragePartitionSize ≈ min(4MB, TotalDataSize/#cores)

 NumberOfPartitions ≈ TotalDataSize/AveragePartitionSize


如果您沒有足夠的核心,


AveragePartitionSize ≈ 128MB

 NumberOfPartitions ≈ TotalDataSize/AveragePartitionSize


確切的計算有些復雜,可以在FileSourceScanExec的代碼庫中找到,請參考此處。


查看完整回答
反對 回復 2019-10-16
  • 3 回答
  • 0 關注
  • 969 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號