apache-spark – 为Spark集群和Cassandra设置和配置Titan

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

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

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

>实时处理DC:3个节点与Titan Cassandra(RF:3)
>分析DC:1个Cassandra的Spark master 3 Spark Slave(RF:3)

关于该设置和Titan Spark的一般问题:

>那个设置是否正确?
> Titan是否也应安装在3个Spark从节点和/或Spark主节点上?
>您是否会使用其他设置?
> Spark Slave是否只从分析DC读取数据,理想情况下甚至可以从同一节点上的Cassandra读取数据?

也许有人甚至可以共享支持这种设置(或更好的设置)的配置文件.

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

高级概述

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

《apache-spark – 为Spark集群和Cassandra设置和配置Titan》

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

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

仅需要HDFS,因为TinkerPop将中间结果存储在其中.注意,即this changed in TinkerPop 3.2.0.

安装

HDFS

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

>为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.

泰坦的配置

您还需要要从中启动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=0c00020b0001000000000b00020000000002000300
   
  

Is that setup correct?

47fffffff0000 cassandra.input.columnfamily=edgestore cassandra.range.batch.size=2147483647 # # SparkGraphComputer Configuration # spark.master=spark://COORDINATOR:7077 spark.serializer=org.apache.spark.serializer.KryoSerializer

答案

这导致以下答案:

Is that setup correct?

好像是.至少它适用于此设置.

Should Titan also be installed on the 3 Spark slave nodes and / or the Spark master?

由于不需要,我不会这样做,因为我更喜欢将用户可以访问的Spark和Titan服务器分开.

Is there another setup that you would use instead?

我很乐意听到其他人有不同的设置.

Will the Spark slaves only read data from the analytics DC and ideally even from Cassandra on the same node?

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

点赞