Почему Spark-драйвер так сильно кэширует hadoop LocationFileStatus при запуске SQL на паркете - PullRequest
0 голосов
/ 04 июля 2019

Я запускаю искровую работу на кластере пряжи, читаю данные из файла паркета и записываю обратно после anylysis. Через некоторое время драйвер получит OOM и выйдет. Я обнаружил, что в драйвере есть много метаданных hadoop (jmap -histo: live $ PID | head -30).

 num     #instances         #bytes  class name
----------------------------------------------
   1:         45839      409413024  [B
   2:       1947930      206838976  [C
   3:       1947532       46740768  java.lang.String
   4:        142863       11429040  java.net.URI
   5:        331654       10422648  [Ljava.lang.String;
   6:        142719       10275768  org.apache.hadoop.fs.LocatedFileStatus
   7:        134418        7527408  org.apache.hadoop.fs.BlockLocation
   8:         29856        5254656  org.apache.hadoop.hdfs.protocol.DatanodeInfoWithStorage
   9:        146047        4673504  scala.collection.mutable.LinkedEntry
  10:        142724        4567168  org.apache.hadoop.fs.permission.FsPermission
  11:         17556        4230704  [Ljava.lang.Object;
  12:        134418        3226032  [Lorg.apache.hadoop.fs.BlockLocation;
  13:        142806        2284896  org.apache.hadoop.fs.Path
  14:         16777        1865704  java.lang.Class
  15:         55624        1779968  java.util.concurrent.ConcurrentHashMap$Node
  16:           421        1187216  [Lscala.collection.mutable.HashEntry;
  17:         33501        1072032  java.util.Hashtable$Entry
  18:         11491        1011208  java.lang.reflect.Method

Я запускаю sql на hdfs паркетном файле, sql похож на

"SELECT * FROM parquet.`/warehouse/TMP/USER`".

В задании будет прочитано около 1440000 файлов hdfs . Я полагаю, что spark загрузит все метаданные файла hdf в папку / warehouse / TMP / USER в драйвере, после этого искатель выполнит поиск метаданных блока hdfs из драйвера, отличного от namenode hdfs, и ускорит чтение данных. Я должен удалить некоторые файлы hdfs, чтобы завершить свою работу, и мне интересно, почему в драйвере spark все эти метаданные хранятся постоянно, как я могу контролировать использование памяти в драйвере spark?

...