Spark Job Ошибка после запуска [дубликат]

Если вы хотите выпустить видео из Firebase Storage, это лучший способ, который я нашел. Это будет зависеть от размера вашего видеофайла. Я только запрашиваю файлы 10-30mb, поэтому это решение работает хорошо для меня. Просто обрабатывайте Urb Firebase как обычный url:

String str = "fire_base_video_URL";
Uri uri = Uri.parse(str);

videoViewLandscape.setVideoURI(uri);
progressBarLandScape.setVisibility(View.VISIBLE);
videoViewLandscape.requestFocus();
videoViewLandscape.start();

Если вы хотите зацикливать видео:

videoViewLandscape.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        mp.setLooping(true);
    }
});

И если вы хотите показать индикатор выполнения перед видео начинает делать это:

videoViewLandscape.setOnInfoListener(new MediaPlayer.OnInfoListener() {
    @Override
    public boolean onInfo(MediaPlayer mp, int what, int extra) {
        if (what == MediaPlayer.MEDIA_INFO_BUFFERING_END) {
            progressBarLandScape.setVisibility(View.GONE);
            return true;
        }
        else if(what == MediaPlayer.MEDIA_INFO_BUFFERING_START){
            progressBarLandScape.setVisibility(View.VISIBLE);
            return true;
        }
        return false;
    }
});

Это не лучший способ сделать что-то, но он работает для меня пока пока не найду хорошую службу потокового видео.

157
задан Matteo Guarnerio 25 November 2015 в 11:14
поделиться

7 ответов

Местоположение для установки размера кучи памяти (по крайней мере, в искро-1.0.0) находится в conf / spark-env. Соответствующими переменными являются SPARK_EXECUTOR_MEMORY & amp; SPARK_DRIVER_MEMORY. Дополнительные документы содержатся в руководстве по развертыванию

Кроме того, не забудьте скопировать файл конфигурации на все подчиненные узлы.

2
ответ дан Amnon 19 August 2018 в 09:04
поделиться
  • 1
    Как вы знаете, какой из них можно настроить между SPARK_EXECUTOR_MEMORY и amp; SPARK_DRIVER_MEMORY? – Hunle 16 July 2016 в 23:14
  • 2
    то есть какая ошибка подскажет вам увеличить SPARK_EXECUTOR_MEMORY, и какая ошибка скажет вам увеличить SPARK_DRIVER_MEMORY? – Hunle 16 July 2016 в 23:43

Вы должны увеличить память драйвера. Думаю, в вашей папке $ SPARK_HOME / conf вы должны найти файл spark-defaults.conf, отредактировать и установить spark.driver.memory 4000m в зависимости от памяти вашего хозяина. Это то, что исправило проблему для меня, и все работает гладко

13
ответ дан blueskin 19 August 2018 в 09:04
поделиться

Чтобы добавить к этому вариант использования, который часто не обсуждается, я буду представлять решение при подаче приложения Spark через spark-submit в локальном режиме.

Согласно gitbook Освоение Apache Spark Яцек Ласковски :

Вы можете запустить Spark в локальном режиме. В этом нераспределенном режиме развертывания с одним JVM Spark генерирует все компоненты исполнения - драйвер, исполнитель, бэкэнд и мастер - в той же JVM. Это единственный режим, когда драйвер используется для выполнения.

Таким образом, если вы испытываете ошибки OOM с heap, достаточно скорректировать driver-memory, а не executor-memory.

Вот пример:

spark-1.6.1/bin/spark-submit
  --class "MyClass"
  --driver-memory 12g
  --master local[*] 
  target/scala-2.10/simple-project_2.10-1.0.jar 
41
ответ дан Brian Vanover 19 August 2018 в 09:04
поделиться

У меня есть несколько советов:

  • Если ваши узлы настроены на максимум 6 г для Spark (и немного оставляют для других процессов), используйте 6g, а не 4g, spark.executor.memory=6g. Убедитесь, что вы используете как можно больше памяти, проверяя пользовательский интерфейс (он скажет, сколько мемов вы используете)
  • Попробуйте использовать больше разделов, у вас должно быть 2 - 4 на процессор. IME, увеличивающее количество разделов, часто является самым простым способом сделать программу более стабильной (и часто быстрее). Для огромных объемов данных вам может потребоваться более 4-х процессоров, поэтому в некоторых случаях мне пришлось использовать 8000 разделов!
  • Уменьшите долю памяти, зарезервированную для кеширования, используя spark.storage.memoryFraction. Если вы не используете cache() или persist в своем коде, это может быть равно 0. По умолчанию это 0,6, что означает, что вы получаете только 0,4 * 4g памяти для своей кучи. IME, уменьшающий память, часто заставляет OOM уходить. ОБНОВЛЕНИЕ: от искры 1.6, по-видимому, нам больше не нужно будет играть с этими значениями, искру определит их автоматически.
  • Как и в предыдущем случае, но в произвольной памяти. Если ваша работа не нуждается в большой памяти в случайном порядке, установите ее на более низкое значение (это может привести к переполнению ваших тасований на диск, которые могут иметь катастрофическое влияние на скорость). Иногда, когда это операция в случайном порядке, то есть OOMing, вам нужно сделать обратное, то есть установить ее на что-то большое, например 0,8, или убедиться, что вы разрешаете перетасовку на диск (это значение по умолчанию с 1.0.0).
  • Следите за утечками памяти, они часто вызваны случайным закрытием объектов, которые вам не нужны в ваших лямбдах. Способ диагностики заключается в том, чтобы следить за «задачей, сериализованной как XXX байты» в журналах, если XXX больше, чем несколько килобайт или более, чем МБ, может возникнуть утечка памяти. См. https://stackoverflow.com/a/25270600/1586965
  • Связано с выше; использовать широковещательные переменные, если вам действительно нужны большие объекты.
  • Если вы кешируете большие RDD и можете жертвовать некоторым временем доступа, подумайте о сериализации RDD http://spark.apache.org/docs/latest /tuning.html#serialized-rdd-storage.
  • (Дополнительно) Связано с выше, избегайте String и сильно вложенных структур (например, Map и вложенных классов классов ). Если возможно, попробуйте использовать только примитивные типы и индексировать все непримитивы, особенно если вы ожидаете много дубликатов. Выберите WrappedArray по вложенным структурам, когда это возможно. Или даже разверните свою собственную сериализацию - у ВАС будет больше информации о том, как эффективно вернуть свои данные в байты, USE IT!
  • (бит взломанный) Снова при кешировании рассмотрите возможность использования Dataset для кэширования ваша структура, поскольку она будет использовать более эффективную сериализацию. Это следует рассматривать как взлом по сравнению с предыдущим пунктом. Построение знаний домена в вашем алгоритме / сериализации может свести к минимуму объем памяти / кеш-пространства на 100x или 1000x, тогда как все Dataset, скорее всего, дадут 2x - 5x в памяти и 10x сжатый (паркет) на диске.

http://spark.apache.org/docs/1.2.1/configuration.html

РЕДАКТИРОВАТЬ: (Так что я могу сделать проще Google). следующая также указывает на эту проблему:

java.lang.OutOfMemoryError : GC overhead limit exceeded
264
ответ дан Community 19 August 2018 в 09:04
поделиться
  • 1
    Спасибо за ваши предложения. Если я установлю spark.executor.memory = 6g, у искры будет проблема: «проверьте свой пользовательский интерфейс кластера, чтобы убедиться, что работники зарегистрированы и имеют достаточную память». Установка spark.storage.memoryFraction в 0.1 тоже не может решить проблему. Может быть, проблема кроется в моем коде. Спасибо! – hequn8128 2 April 2014 в 06:05
  • 2
    @ hequn8128, память исполнителей искробезопасности должна соответствовать вашей памяти искрового рабочего – Jacek L. 16 May 2014 в 16:26
  • 3
    @samthebest Это фантастический ответ. Я очень ценю справочную информацию для поиска утечек памяти. – Myles Baker 9 April 2015 в 16:36
  • 4
    Привет @samthebest, как вы указали 8000 разделов? Поскольку я использую Spark sql, я могу указать только раздел, используя spark.sql.shuffle.partitions, значение по умолчанию - 200, если я должен установить его больше. Я пытался установить его на 1000, но не помогая получать OOM, вы знаете, что должно быть оптимальным значение перегородки У меня есть 1 ТБ перекошенные данные для обработки, и он включает группу по запросам кустов. Пожалуйста, направляйте. – u449355 2 September 2015 в 07:15
  • 5
    Привет @ user449355, пожалуйста, не могли бы вы задать новый вопрос? Из-за боязни начать длинную тему комментариев :) Если у вас возникли проблемы, вероятно, другие люди, и вопрос облегчит поиск для всех. – samthebest 2 September 2015 в 09:12

Вы должны настроить параметры настройки offHeap, как показано ниже:

`val spark = SparkSession
     .builder()
     .master("local[*]")
     .config("spark.executor.memory", "70g")
     .config("spark.driver.memory", "50g")
     .config("spark.memory.offHeap.enabled",true)
     .config("spark.memory.offHeap.size","16g")   
     .appName("sampleCodeForReference")
     .getOrCreate()`

Дать память памяти и память исполнительного устройства в соответствии с вашей оперативной памятью. Вы можете увеличить размер offHeap, если вы все еще сталкиваетесь с проблемой OutofMemory.

1
ответ дан pavan.vn101 19 August 2018 в 09:04
поделиться

В широком смысле, искры памяти JVM Executor можно разделить на две части. Spark memory и User memory. Это контролируется свойством spark.memory.fraction - значение находится между 0 и 1. При работе с изображениями или интенсивной обработке памяти в искровых приложениях рассмотрите возможность уменьшения spark.memory.fraction. Это сделает больше памяти доступной для вашей работы приложения. Spark может разливаться, поэтому он будет работать с меньшим объемом памяти.

Вторая часть проблемы - разделение работы. Если возможно, разделите свои данные на более мелкие куски. Для меньших данных, возможно, требуется меньше памяти. Но если это невозможно, вы жертвоприносите на память. Обычно один исполнитель будет запускать несколько ядер. Общая память исполнителей должна быть достаточной для удовлетворения требований к памяти всех параллельных задач. Если увеличение памяти исполнителя не является вариантом, вы можете уменьшить количество ядер на каждого исполнителя, чтобы каждая задача получала больше памяти для работы. Тест с 1 основным исполнителем, который имеет наибольшую возможную память, которую вы можете дать, а затем продолжать увеличивать ядра, пока не найдете лучший подсчет ядра.

2
ответ дан Rohit Karlupia 19 August 2018 в 09:04
поделиться

Посмотрите на сценарии запуска , там установлен размер кучи Java, похоже, что вы не устанавливаете это перед запуском рабочего Spark.

# Set SPARK_MEM if it isn't already set since we also use it for this process
SPARK_MEM=${SPARK_MEM:-512m}
export SPARK_MEM

# Set JAVA_OPTS to be able to load native libraries and to set heap size
JAVA_OPTS="$OUR_JAVA_OPTS"
JAVA_OPTS="$JAVA_OPTS -Djava.library.path=$SPARK_LIBRARY_PATH"
JAVA_OPTS="$JAVA_OPTS -Xms$SPARK_MEM -Xmx$SPARK_MEM"

Вы можете найти документацию для развертывания скриптов здесь .

14
ответ дан Tombart 19 August 2018 в 09:04
поделиться
  • 1
    Спасибо. ~ Я попробую позже. Из искры ui он показывает, что память каждого исполнителя равна 4096. Таким образом, настройка была включена, верно? – hequn8128 16 January 2014 в 16:03
  • 2
    Видел ваш ответ, когда сталкивался с подобной проблемой ( stackoverflow.com/questions/34762432/… ). Глядя на предоставленную вами ссылку, похоже, что установка Xms / Xmx больше не существует, можете ли вы объяснить почему? – Seffy 13 January 2016 в 10:39
Другие вопросы по тегам:

Похожие вопросы: