2016-04-08 1 views
0

В моей работе по искрам я читаю данные из cassandra, используя утилиту java cassandra. Мой запрос читает так:[Cassandra] Фильтр на уровне ключевого ключа в cassandra sql в искровом задании, вызывающем избыточность использования процессора.

JavaRDD<CassandraRow> cassandraRDD = functions.cassandraTable("keyspace","column_family"). 
select("timeline_id","shopper_id","product_id").where("action=?", "Viewed") 

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

Пожалуйста, найдите ниже создания сценария таблицы для столбца Семейно

CREATE TABLE keyspace.column_family (
    action text, 
    timeline_id timeuuid, 
    shopper_id text, 
    product_id text, 
    publisher_id text, 
    referer text, 
    remote_ip text, 
    seed_product text, 
    strategy text, 
    user_agent text, 
    PRIMARY KEY (action, timeline_id, shopper_id) 
) WITH CLUSTERING ORDER BY (timeline_id DESC, shopper_id ASC) 
    AND bloom_filter_fp_chance = 0.01 
    AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}' 
    AND comment = '' 
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'} 
    AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'} 
    AND dclocal_read_repair_chance = 0.1 
    AND default_time_to_live = 0 
    AND gc_grace_seconds = 864000 
    AND max_index_interval = 2048 
    AND memtable_flush_period_in_ms = 0 
    AND min_index_interval = 128 
    AND read_repair_chance = 0.0 
    AND speculative_retry = '99.0PERCENTILE'; 

Что я подозревая, как это action_item ключ строки, все данные получать подается с одного узла (горячая точка), и вот почему что узлы CPU могут стрелять. Кроме того, во время чтения есть только один раздел RDD, созданный в искровом задании. Любая помощь будет оценена по достоинству.

+0

Вы можете разместить здесь CREATE TABLE сценарий вашего column_family? – doanduyhai

+0

Добавил его в вопрос. –

ответ

1

У вас проблема с моделью данных. action = раздел ключа, поэтому все подобные действия сохраняются в одном разделе = (один узел + реплики).

Сколько отличных действий у вас есть? Ваша интуиция о наличии горячей точки оправдана.

Возможно, вам нужна другая клавиша раздела ИЛИ необходимо добавить дополнительный столбец в раздел ключа, чтобы Cassandra распределял данные равномерно на кластере.

Читать этот блог: http://www.planetcassandra.org/blog/the-most-important-thing-to-know-in-cassandra-data-modeling-the-primary-key/

+0

Спасибо за статью, это было проницательно. У меня около 5-6 различных действий. Как я могу переделать таблицу, не влияя на текущие данные. Есть ли способ во время чтения из искры, я могу разделить RDD на какой-то другой столбец? –

+1

Разделение выполняется на уровне Cassandra, вы не можете изменить его с помощью Spark. 6 отдельных действий вызовут горячие точки, потому что все ваши данные будут распределены по 6 широким разделам. Вероятно, вы должны добавить компонент даты в свой ключ раздела, что-то вроде «PRIMARY KEY ((действие, день), timeline_id, shopper_id)» или «PRMARY KEY» ((действие, час), timeline_id, shopper_id) ' – doanduyhai

+0

Спасибо, я попробую это, я надеюсь, что я могу изменить ключ раздела, не влияя на данные, которые уже находятся в таблице, как на моей рабочей среде. –