为Spark集群和Cassandra设置和配置Titan

时间:2016-10-18 09:53:47

标签: apache-spark cassandra titan tinkerpop tinkerpop3

关于aurelius邮件列表以及有关配置Titan以使其与Spark一起使用的特定问题的stackoverflow,已经有几个问题。但我认为缺少的是对使用Titan和Spark的简单设置的高级描述。

我正在寻找的是使用推荐设置的稍微设置。例如,对于Cassandra,复制因子应为3,并且应使用专用数据中心进行分析。

根据我在Spark,Titan和Cassandra文档中找到的信息,这样的最小设置可能如下所示:

  • 实时处理DC:使用Titan + Cassandra(RF:3)的3个节点
  • Analytics DC:1个Cassandra(RF:3)
  • 的Spark master + 3 Spark Slaves

我对该设置和Titan + Spark的一些问题一般:

  1. 这个设置是否正确?
  2. Titan是否也应安装在3个Spark从节点和/或Spark主节点上?
  3. 您是否会使用其他设置?
  4. Spark Slave只会从分析DC读取数据,理想情况下甚至可以从同一节点上的Cassandra读取数据吗?
  5. 也许有人甚至可以共享支持这种设置(或更好的设置)的配置文件。

1 个答案:

答案 0 :(得分:2)

所以我只是试了一下,设置了一个简单的Spark集群来与Titan(以及Cassandra作为存储后端)一起工作,这就是我想出来的:

高级概述

我只是专注于集群的分析方面,所以我放出了实时处理节点。

High-Level Overview of the analytics datacenter

Spark由一个(或多个)主服务器和多个从服务器(工作服务器)组成。由于从站进行实际处理,因此需要访问它们所处理的数据。因此Cassandra安装在工人身上并保存Titan的图表数据。

工作从泰坦节点发送给火花大师,火星大师将他们分发给他的工人。因此,Titan基本上只与Spark主人沟通。

仅需要HDFS,因为TinkerPop会在其中存储中间结果。请注意,this changed in TinkerPop 3.2.0

安装

<强> HD​​FS

我刚刚按照我发现here的教程。泰坦只有两件事需要记住:

  • 为Titan 1.0.0选择兼容版本,这是1.2.1。
  • 不需要来自Hadoop的TaskTrackers和JobTrackers,因为我们只需要HDFS而不是MapReduce。

<强>火花

同样,版本必须兼容,对于Titan 1.0.0也是1.2.1。安装基本上意味着使用编译版本提取存档。最后,您可以通过导出应该指向Hadoop的conf目录的HADOOP_CONF_DIR来配置Spark以使用您的HDFS。

Titan的配置

您还需要要从中启动OLAP作业的Titan节点上的HADOOP_CONF_DIR。它需要包含一个指定NameNode的core-site.xml文件:

<?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 documentation包含有关它的更多信息以及如何检查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 Slave只会从分析DC读取数据,理想情况下甚至可以从同一节点上的Cassandra读取数据吗?

由于显式配置了Cassandra节点(来自分析DC),因此Spark从属服务器无法从完全不同的节点提取数据。但我仍然不确定第二部分。也许其他人可以在这里提供更多见解?