Если вы хотите выпустить видео из 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;
}
});
Это не лучший способ сделать что-то, но он работает для меня пока пока не найду хорошую службу потокового видео.
Местоположение для установки размера кучи памяти (по крайней мере, в искро-1.0.0) находится в conf / spark-env. Соответствующими переменными являются SPARK_EXECUTOR_MEMORY
& amp; SPARK_DRIVER_MEMORY
. Дополнительные документы содержатся в руководстве по развертыванию
Кроме того, не забудьте скопировать файл конфигурации на все подчиненные узлы.
Вы должны увеличить память драйвера. Думаю, в вашей папке $ SPARK_HOME / conf вы должны найти файл spark-defaults.conf
, отредактировать и установить spark.driver.memory 4000m
в зависимости от памяти вашего хозяина. Это то, что исправило проблему для меня, и все работает гладко
Чтобы добавить к этому вариант использования, который часто не обсуждается, я буду представлять решение при подаче приложения Spark
через spark-submit
в локальном режиме.
Согласно gitbook Освоение Apache Spark Яцек Ласковски :
Вы можете запустить Spark в локальном режиме. В этом нераспределенном режиме развертывания с одним JVM Spark генерирует все компоненты исполнения - драйвер, исполнитель, бэкэнд и мастер - в той же JVM. Это единственный режим, когда драйвер используется для выполнения.
blockquote>Таким образом, если вы испытываете ошибки
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
У меня есть несколько советов:
spark.executor.memory=6g
. Убедитесь, что вы используете как можно больше памяти, проверяя пользовательский интерфейс (он скажет, сколько мемов вы используете) spark.storage.memoryFraction
. Если вы не используете cache()
или persist
в своем коде, это может быть равно 0. По умолчанию это 0,6, что означает, что вы получаете только 0,4 * 4g памяти для своей кучи. IME, уменьшающий память, часто заставляет OOM уходить. ОБНОВЛЕНИЕ: от искры 1.6, по-видимому, нам больше не нужно будет играть с этими значениями, искру определит их автоматически. 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
Вы должны настроить параметры настройки 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.
В широком смысле, искры памяти JVM Executor можно разделить на две части. Spark memory и User memory. Это контролируется свойством spark.memory.fraction
- значение находится между 0 и 1. При работе с изображениями или интенсивной обработке памяти в искровых приложениях рассмотрите возможность уменьшения spark.memory.fraction
. Это сделает больше памяти доступной для вашей работы приложения. Spark может разливаться, поэтому он будет работать с меньшим объемом памяти.
Вторая часть проблемы - разделение работы. Если возможно, разделите свои данные на более мелкие куски. Для меньших данных, возможно, требуется меньше памяти. Но если это невозможно, вы жертвоприносите на память. Обычно один исполнитель будет запускать несколько ядер. Общая память исполнителей должна быть достаточной для удовлетворения требований к памяти всех параллельных задач. Если увеличение памяти исполнителя не является вариантом, вы можете уменьшить количество ядер на каждого исполнителя, чтобы каждая задача получала больше памяти для работы. Тест с 1 основным исполнителем, который имеет наибольшую возможную память, которую вы можете дать, а затем продолжать увеличивать ядра, пока не найдете лучший подсчет ядра.
Посмотрите на сценарии запуска , там установлен размер кучи 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"
Вы можете найти документацию для развертывания скриптов здесь .
SPARK_EXECUTOR_MEMORY
и amp;SPARK_DRIVER_MEMORY
? – Hunle 16 July 2016 в 23:14SPARK_EXECUTOR_MEMORY
, и какая ошибка скажет вам увеличитьSPARK_DRIVER_MEMORY
? – Hunle 16 July 2016 в 23:43