Поэтому я просто попробовал и настроил простой кластер Spark для работы с Titan (и Cassandra в качестве хранилища), и вот что у меня получилось:
Общий обзор
Здесь я просто концентрируюсь на аналитической стороне кластера, поэтому я выпускаю узлы обработки в реальном времени.
![Общий обзор аналитического центра обработки данных](https://i.stack.imgur.com/tD97I.png)
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