Cassandra Reading Benchmark с Spark

Я проверяю производительность Кассандры в чтении. На этапе тестовой настройки я создал кластер с 1/2/4 экземплярами ec2 и узлами данных. Я написал 1 таблицу со 100 миллионами записей (CSV-файл ~ 3 ГБ). Затем я запускаю приложение Spark, которое считывает данные в RDD с помощью коннектора spark-cassandra.

Однако я подумал, что поведение должно быть следующим: чем больше экземпляров использует Cassandra (такое же количество экземпляров в Spark), тем быстрее чтение! С записью вроде все правильно (~в 2 раза быстрее, если кластер в 2 раза больше).

Но: в моем тесте чтение всегда быстрее с кластером с 1 экземпляром, чем с кластером с 2 или 4 экземплярами!!!

Мои результаты тестов:

Размер кластера 4: запись: 1750 секунд / чтение: 360 секунд

Размер кластера 2: запись: 3446 секунд / чтение: 420 секунд

Размер кластера 1: запись: 7595 секунд / чтение: 284 секунды


ДОПОЛНИТЕЛЬНАЯ ПОПРОБУЙТЕ С ИНСТРУМЕНТОМ CASSANDRA-STRESS

Я запустил инструмент «cassandra-stress» на кластере Cassandra (размер узла 1/2/3/4) со следующими результатами:

Clustersize    Threads     Ops/sek  Time
1              4           10146    30,1
               8           15612    30,1
              16           20037    30,2
              24           24483    30,2
             121           43403    30,5
             913           50933    31,7
2              4            8588    30,1
               8           15849    30,1
              16           24221    30,2
              24           29031    30,2
             121           59151    30,5
             913           73342    31,8
3              4            7984    30,1
               8           15263    30,1
              16           25649    30,2
              24           31110    30,2
             121           58739    30,6
             913           75867    31,8
4              4            7463    30,1
               8           14515    30,1
              16           25783    30,3
              24           31128    31,1
             121           62663    30,9
             913           80656    32,4


Результаты: с 4 или 8 потоками кластер с одним узлом работает так же или даже быстрее, чем более крупные кластеры!!!



Результаты в виде диаграммы: введите здесь описание изображения
Наборы данных — это размеры кластера (1/2/3/4), по оси X — потоки, а по оси Y — операции в секунду.

--> Вопрос здесь: являются ли эти результаты результатами для всего кластера или это тест для локального узла (и, следовательно, результат только одного экземпляра кольца)???

Может кто-нибудь дать объяснение? Спасибо!


person D. Müller    schedule 09.07.2015    source источник
comment
Запускаете ли вы экземпляр Spark Worker на каждом узле Cassandra?   -  person Jim Meyer    schedule 09.07.2015
comment
Нет, я настроил кластеры отдельно друг от друга. Итак, у меня есть кластер Spark с 1/2/4 рабочими узлами и кластер Cassandra с 1/2/4 узлами.   -  person D. Müller    schedule 09.07.2015


Ответы (1)


Я провел аналогичный тест с искровым рабочим процессом, работающим на каждом узле Cassandra.

Используя таблицу Cassandra с 15 миллионами строк (около 1,75 ГБ данных), я запустил искровое задание, чтобы создать RDD из таблицы с каждой строкой в ​​виде строки, а затем распечатать количество строк.

Вот какие времена у меня были:

1 C* node, 1 spark worker - 1 min. 42 seconds
2 C* nodes, 2 spark workers - 55 seconds
4 C* nodes, 4 spark workers - 35 seconds

Таким образом, кажется, что это довольно хорошо масштабируется с количеством узлов, когда искровые рабочие процессы расположены вместе с узлами C *.

Не размещая своих воркеров вместе с Cassandra, вы заставляете все данные таблицы передаваться по сети. Это будет медленно и, возможно, в вашей среде является узким местом. Если вы размещаете их совместно, вы получаете выгоду от локальности данных, поскольку spark создаст разделы RDD из токенов, которые являются локальными для каждой машины.

У вас также может быть какое-то другое узкое место. Я не знаком с EC2 и тем, что он предлагает. Надеюсь, у него есть локальное дисковое хранилище, а не сетевое хранилище, поскольку C * не любит сетевое хранилище.

person Jim Meyer    schedule 10.07.2015
comment
Поскольку в другом вопросе проблемой была локализация данных и ландшафт кластера, stackoverflow.com/questions/31336753/ Я думаю, что эти шаги помогут и здесь (как вы описали Джима). Я попробую позже, спасибо за подсказки, Джим! - person D. Müller; 14.07.2015