Я пытаюсь использовать Apache Spark для обработки моих больших (~ 230 тыс. Записей) набора данных cassandra, но я постоянно сталкиваюсь с различными видами ошибок. Однако я могу успешно запускать приложения при работе в наборе данных ~ 200 записей. У меня есть искровая установка из 3 узлов с 1 мастером и 2 работниками, а у 2 рабочих также есть кластер cassandra, с данными, индексированными с коэффициентом репликации 2. Мои 2 искрогасителя показывают 2,4 и 2,8 ГБ памяти на веб-интерфейсе и Я установил spark.executor.memory
на 2409 при запуске приложения, чтобы получить суммарную память 4,7 ГБ. Вот мой WebUI ГлавнаяApache Spark не обрабатывает большое семейство столбцов Cassandra
среда страница одной из задач
На данном этапе, я просто пытаюсь обрабатывать данные, хранящиеся в Кассандре с помощью искры. Вот основной код, я использую, чтобы сделать это в Java
SparkConf conf = new SparkConf(true)
.set("spark.cassandra.connection.host", CASSANDRA_HOST)
.setJars(jars);
SparkContext sc = new SparkContext(HOST, APP_NAME, conf);
SparkContextJavaFunctions context = javaFunctions(sc);
CassandraJavaRDD<CassandraRow> rdd = context.cassandraTable(CASSANDRA_KEYSPACE, CASSANDRA_COLUMN_FAMILY);
System.out.println(rdd.count());
Для успешного запуска, на небольшом наборе данных (200 записей), интерфейс событий выглядит что-то вроде этого
Но когда я бегу то же самое на большом наборе данных (т.е. я меняю только CASSANDRA_COLUMN_FAMILY
), работа никогда не заканчивается внутри терминала, журнал выглядит следующим образом
и после ~ 2 минут, STDERR для исполнителей выглядит так
и после ~ 7 минут, я получаю
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
в моем терминале, и у меня есть для ручного уничтожения процесса SparkSubmit
. Однако большой набор данных был проиндексирован из двоичного файла, который занимал всего 22 МБ, и делая nodetool status
, я вижу, что только данные объемом ~ 115 МБ хранятся в обоих моих узлах кассандры. Я также пытался использовать Spark SQL в моем наборе данных, но у меня тоже есть аналогичные результаты. Где я ошибаюсь в своей настройке и что мне делать, чтобы успешно обработать мой набор данных, как для программы Transformation-Action, так и для программы, использующей Spark SQL.
Я уже пробовал следующие методы
Использование
-Xms1G -Xmx1G
для увеличения объема памяти, но программа не с исключением того, что я должен вместо этого установитьspark.executor.memory
, что у меня есть.Использование
spark.cassandra.input.split.size
, что не позволяет утверждать, что это недопустимый вариант, и аналогичная опцияspark.cassandra.input.split.size_in_mb
, которую я установил в 1, без эффекта.
EDIT
на основе this ответа, я также попытался следующие методы:
набор
spark.storage.memoryFraction
до 0не установлен
spark.storage.memoryFraction
к нулю и использованияpersist
сMEMORY_ONLY
,MEMORY_ONLY_SER
,MEMORY_AND_DISK
иMEMORY_AND_DISK_SER
.
Версия:
Спарк: 1.4.0
Кассандра: 2.1.6
искровой Cassandra-разъем: 1.4.0-М1
Попробуйте увеличить память драйвера. По умолчанию 512 МБ для драйвера – Knight71
Я попытался установить разные значения для 'spark.driver.memory', основанные на моем выходе' free -m', но результат тот же. – suyash