Небольшая предыстория по этому вопросу
У меня была эта проблема, когда я запускал код через Блокнот Jupyter, который работает на edgenode кластера hadoop
Поиск в Jupyter
поскольку вы можете передавать код только из Jupyter через клиентский режим (эквивалентно запуску spark-shell из edgenode) драйвером spark всегда является edgenode, который уже упакован с другими долго работающими процессами демона, где всегда доступна доступная памятьменьше, чем требуется для fileRDD.collect () в моем файле
Работает нормально в spark-submit
Я поместил содержимое из Jupyer в файл .py и вызвал его через spark-отправить с такими же настройками, он работал в течение нескольких секунд, причина в том, что spark-submit оптимизирован для выбора узла драйвера из одного из узлов, которым требуется свободная память из кластера.
spark-submit --name "test_app" --master yarn --deploy-mode cluster --conf spark.executor.cores=4 --conf spark.executor.memory=72g --conf spark.driver.memory=72g --conf spark.yarn.executor.memoryOverhead=8192 --conf spark.dynamicAllocation.enabled=true --conf spark.shuffle.service.enabled=true --conf spark.serializer=org.apache.spark.serializer.KryoSerializer --conf spark.kryoserializer.buffer.max=2044 --conf spark.driver.maxResultSize=1g --conf spark.driver.extraJavaOptions='-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:MaxDirectMemorySize=2g' --conf spark.executor.extraJavaOptions='-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:MaxDirectMemorySize=2g' test.py
Следующий шаг:
Наш следующий шаг - выяснить, может ли блокнот Jupyter отправлять искровое задание в кластер YARN через Livy JobServer или аналогичный подход.