Установка и настройка Titan для кластера Spark и Cassandra

В списке рассылки aurelius, а также здесь, в stackoverflow, уже есть несколько вопросов о конкретных проблемах с настройкой Titan для работы со Spark. Но чего не хватает, на мой взгляд, так это высокоуровневого описания простой установки, использующей Titan и Spark.

То, что я ищу, - это несколько минимальная установка, в которой используются рекомендуемые настройки. Например, для Cassandra коэффициент репликации должен быть равен 3, а для аналитики следует использовать выделенный центр обработки данных.

Из информации, которую я нашел в документации Spark, Titan и Cassandra, такая минимальная установка может выглядеть так:

  • Обработка в реальном времени DC: 3 узла с Titan + Cassandra (RF: 3)
  • Analytics DC: 1 мастер Spark + 3 ведомых Spark с Cassandra (RF: 3)

У меня есть несколько вопросов об этой настройке и Titan + Spark в целом:

  1. Это правильная установка?
  2. Следует ли также устанавливать Titan на 3 подчиненных узлах Spark и/или главном Spark?
  3. Есть ли другая установка, которую вы бы использовали вместо этого?
  4. Будут ли ведомые устройства Spark считывать данные только с аналитического контроллера домена и, в идеале, даже с Cassandra на том же узле?

Может быть, кто-то даже может поделиться файлом конфигурации, который поддерживает такую ​​настройку (или лучше).


person Florian Hockmann    schedule 18.10.2016    source источник


Ответы (1)


Поэтому я просто попробовал и настроил простой кластер Spark для работы с Titan (и Cassandra в качестве хранилища), и вот что у меня получилось:

Общий обзор

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

Общий обзор аналитического центра обработки данных

Spark состоит из одного (или нескольких) master и нескольких slave (воркеров). Поскольку ведомые устройства выполняют фактическую обработку, им необходим доступ к данным, над которыми они работают. Поэтому Cassandra установлена ​​на воркерах и хранит графические данные с Титана.

Задания отправляются с узлов Титана искровому мастеру, который распределяет их среди своих рабочих. Поэтому Титан в основном общается только с мастером Искры.

HDFS нужна только потому, что TinkerPop хранит в ней промежуточные результаты. Обратите внимание, что это изменилось в TinkerPop 3.2.0.

Монтаж

HDFS

Я просто следовал руководству, которое нашел здесь . Для Титана нужно помнить только две вещи:

  • Выберите совместимую версию, для Титана 1.0.0 это 1.2.1.
  • TaskTrackers и JobTrackers от Hadoop не нужны, так как нам нужна только HDFS, а не MapReduce.

Искра

Опять же, версия должна быть совместима, что также соответствует 1.2.1 для Titan 1.0.0. Установка в основном означает распаковку архива с скомпилированной версией. В конце концов, вы можете настроить Spark для использования вашей HDFS, экспортировав HADOOP_CONF_DIR, который должен указывать на каталог conf Hadoop.

Конфигурация Титана

Вам также потребуется HADOOP_CONF_DIR на узле Titan, с которого вы хотите запускать задания OLAP. Он должен содержать файл core-site.xml, в котором указан NameNode:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
  <property>
     <name>fs.default.name</name>
     <value>hdfs://COORDINATOR:54310</value>
     <description>The name of the default file system.  A URI whose
       scheme and authority determine the FileSystem implementation.  The
       uri's scheme determines the config property (fs.SCHEME.impl) naming
       the FileSystem implementation class.  The uri's authority is used to
       determine the host, port, etc. for a filesystem.</description>
  </property>
</configuration>

Добавьте HADOOP_CONF_DIR к CLASSPATH, и TinkerPop сможет получить доступ к HDFS. документация TinkerPop содержит дополнительную информацию об этом и о том, как проверить, настроена ли HDFS. правильно.

Наконец, файл конфигурации, который работал для меня:

#
# Hadoop Graph Configuration
#
gremlin.graph=org.apache.tinkerpop.gremlin.hadoop.structure.HadoopGraph
gremlin.hadoop.graphInputFormat=com.thinkaurelius.titan.hadoop.formats.cassandra.CassandraInputFormat
gremlin.hadoop.graphOutputFormat=org.apache.tinkerpop.gremlin.hadoop.structure.io.gryo.GryoOutputFormat
gremlin.hadoop.memoryOutputFormat=org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat

gremlin.hadoop.deriveMemory=false
gremlin.hadoop.jarsInDistributedCache=true
gremlin.hadoop.inputLocation=none
gremlin.hadoop.outputLocation=output

#
# Titan Cassandra InputFormat configuration
#
titanmr.ioformat.conf.storage.backend=cassandrathrift
titanmr.ioformat.conf.storage.hostname=WORKER1,WORKER2,WORKER3
titanmr.ioformat.conf.storage.port=9160
titanmr.ioformat.conf.storage.keyspace=titan
titanmr.ioformat.cf-name=edgestore

#
# Apache Cassandra InputFormat configuration
#
cassandra.input.partitioner.class=org.apache.cassandra.dht.Murmur3Partitioner
cassandra.input.keyspace=titan
cassandra.input.predicate=0c00020b0001000000000b000200000000020003000800047fffffff0000
cassandra.input.columnfamily=edgestore
cassandra.range.batch.size=2147483647

#
# SparkGraphComputer Configuration
#
spark.master=spark://COORDINATOR:7077
spark.serializer=org.apache.spark.serializer.KryoSerializer

Ответы

Это приводит к следующим ответам:

Это правильная установка?

Это кажется. По крайней мере, это работает с этой настройкой.

Следует ли также устанавливать Titan на 3 подчиненных узлах Spark и/или главном Spark?

Поскольку это не требуется, я бы не стал этого делать, поскольку предпочитаю разделение серверов Spark и Titan, к которым пользователь может получить доступ.

Есть ли другая установка, которую вы бы использовали вместо этого?

Я был бы рад услышать от кого-то еще, у кого другая настройка.

Будут ли ведомые устройства Spark считывать данные только с аналитического контроллера домена и, в идеале, даже с Cassandra на том же узле?

Поскольку узлы Cassandra (из аналитического контроллера домена) настроены явно, подчиненные устройства Spark не должны иметь возможность извлекать данные из совершенно разных узлов. Но я все еще не уверен насчет второй части. Может быть, кто-то еще может дать больше информации здесь?

person Florian Hockmann    schedule 21.10.2016
comment
Эта установка отлично сработала для меня - спасибо. До сих пор я пробовал для одного экземпляра узла, на котором работает все, — скоро опробую настройку вашего кластера. - person Samik R; 03.03.2017
comment
Рад слышать, дайте мне знать, если у вас возникнут какие-либо проблемы или у вас есть предложения по улучшению этой настройки. - person Florian Hockmann; 03.03.2017
comment
На самом деле я довольно быстро столкнулся с проблемами, даже с настройкой одного узла, но экспериментируя с большим графиком :-( Я разместил это на форуме пользователей: было бы здорово, если бы у вас есть какое-то предложение. URL: groups.google.com/forum/#!topic/janusgraph-users/vDFxULNsfcU - person Samik R; 04.03.2017
comment
Примечание. Я добавил еще две строки в приведенный выше файл конфигурации, но пока это мне не помогло: cassandra.thrift.framed.size_mb=200 и spark.executor.memory=1g. - person Samik R; 04.03.2017