日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Spark运行任务时报错:org.apache.hadoop.hdfs.protocol.DSQuotaExceededException: The DiskSpace quota of...

發布時間:2024/1/18 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spark运行任务时报错:org.apache.hadoop.hdfs.protocol.DSQuotaExceededException: The DiskSpace quota of... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天運行spark任務時,遇到一個錯誤,主要報錯信息如下:

org.apache.spark.SparkException:Task failed while writing rows.
Caused by: org.apache.hadoop.hdfs.protocol.DSQuotaExceededException: The DiskSpace quota of /user/hive/warehouse/hive_test.db is exceeded: quota = 13194139533312 B = 12 TB but diskspace consumed = 13194919316682 B = 12.00 TB.

Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.DSQuotaExceededException): The DiskSpace quota of /user/hive/warehouse/hive_test.db is exceeded: quota = 13194139533312 B = 12 TB but diskspace consumed = 13194919316682 B = 12.00 TB.

Caused by: java.lang.IllegalArgumentException: Column has wrong number of index entries found: 0 expected: 17.

出現上述問題的原因是 HDFS 目錄 /user/hive/warehouse/hive_test.db 沒有足夠的磁盤空間 quota,磁盤配額不夠了,即磁盤已滿或超出了用戶所能使用的配額上限。

查看 HDFS 下 /user/hive/warehouse/hive_test.db文件大小:

[hadoop@hadoop102 ~]$ hadoop fs -du -s -h /user/hive/warehouse/hive_test.db

查看 HDFS 下 /user/hive/warehouse/hive_test.db 文件中各個表所占空間大小:

[hadoop@hadoop102 ~]$ hadoop fs -du -s -h /user/hive/warehouse/hive_test.db/*

可以根據具體的情況刪除一些比較大,且沒有用的表,或者刪除一些分區,這樣可以臨時解決一些問題。

其實最主要的還是要增加磁盤容量:
可以使用 hadoop fs -count 來查看配置情況:

[hadoop@hadoop102 ~]$ hadoop fs -count -q -h /user/hive/warehouse/hive_test.db

以下是查詢結果,none 和 inf 表示沒有設置配額(默認情況下 HDFS 沒有任何配置限制)

QUOTA REMAINING_QUOTA SPACE_QUOTA REMAINING_SPACE_QUOTA DIR_COUNT FILE_COUNT CONTENT_SIZE FILE_NAME none inf none inf 6 15 14.7 K /user/hive/warehouse/hive_test.db

上述依次表示為:文件數限額 可用文件數 空間限額 可用空間 目錄數 文件數 總大小 文件/目錄名

在多人共用 HDFS 的環境下,配置設置非常重要。特別是在 Hadoop處理大量資料的環境,如果沒有配額管理,很容易把所有的空間用完造成別人無法存取。HDFS 的配額設定是針對目標而不是針對賬號,所以在管理上最好讓每個賬號僅操作某一個目錄,然后對目錄設置配置。

設置方法有兩種:

  • Name Quotas:設置某一個目錄下文件總數
  • Space Quotas:設置某一個目錄下可使用空間大小

1. Name Quotas

  • 計算公式:QUOTA – (DIR_COUNT + FILE_COUNT) = REMAINING_QUOTA

  • 設置 Name Quota:

[hadoop@hadoop102 ~]$ hadoop dfsadmin -setQuota 10000 /user/hive/warehouse/hive_test.db

這里的 10000 是指 DIR_COUNT + FILE_COUNT = 10000,最大值為 Long.Max_Value 。

  • 清除 Name Quota:
[hadoop@hadoop102 ~]$ hadoop dfsadmin -clrQuota /user/hive/warehouse/hive_test.db

2. Space Quotas

  • 計算公式:SPACE_QUOTA – CONTENT_SIZE = REMAINING_SPACE_QUOTA

  • 設置 Space Quota:

[hadoop@hadoop102 ~]$ hadoop dfsadmin -setSpaceQuota 1g /user/hive/warehouse/hive_test.db

可以使用 m,g,t 代表 MB,GB,TB

  • 清除 Space Quota:
[hadoop@hadoop102 ~]$ hadoop dfsadmin -clrSpaceQuota /user/hive/warehouse/hive_test.db

這里需要特別注意的是"Space Quota" 的設置看的不是 HDFS 的文件大小,而是寫入 HDFS 所有 block 塊的大小,假設一個文件被切分為2個 block 塊,在 core-site.xml 里面設置 dfs.block.size = 64MB,dfs.replication = 3,那么該文件所需要的存儲空間為:2 * 64M * 3 = 384MB

如果一個小文件(例如,2k大小的文件)被上傳到 HDFS,該文件并不能占滿一整個 block 塊,但是按照 HDFS 配置規則也需要按照一個 block 塊計算,即存儲空間為:1 x 64MB x 3 = 192MB

所以,綜上所述,這里統計空間的時候會將 block 塊的大小和備份數也考慮在里面。

3. 其它事項
HDFS 的配額管理是跟著目錄走,如果目錄被重命名,配額依然有效。

麻煩的是,在設置完配額以后,如果超過限制,雖然文件不會寫入到 HDFS,但是文件名依然會存在,只是文件 size 為0。當加大配額設置后,還需要將之前的空文件刪除才能進一步寫入。

如果新設置的 quota 值,小于該目錄現有的 Name Quotas 及 Space Quotas,系統并不會給出錯誤提示,但是該目錄的配置會變成最新設置的 quota。

如果查詢的配額沒滿的話,那么就是磁盤空間滿了,掛載新的磁盤空間就可以了。

了解磁盤配額(Quota):磁盤配額(Quota)

總結

以上是生活随笔為你收集整理的Spark运行任务时报错:org.apache.hadoop.hdfs.protocol.DSQuotaExceededException: The DiskSpace quota of...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。