2016-05-06 11 views
0

Sie müssen mir vergeben, aber ich versuche einen Funken-Cluster zu erstellen, der sich mit Cassandra verbindet und ein Python-Skript ausführt. Momentan verwende ich datastax enterprise, um Cassandra im Solr-Suchmodus auszuführen. Ich verstehe, dass Sie Cassandra im Analysemodus (mit der Option -k) ausführen müssen, um den von Datastax bereitgestellten Spark-Cassandra-Connector zu verwenden. Zur Zeit habe ich es bekam immer nur zu arbeiten, um die dse Funken Version verwenden, für die es ich um die nächsten Schritte zu machen arbeiten gefolgt:Wie funken Sie mit Cassandra mit Spark-Cassandra-Connector?

  1. starten dse cassandra in der Analytik Modus
  2. Änderung $ PYTHONPATH env Variable/path /to/spark/dse/python:/path/to/spark/dse/python/lib/py4j-*.zip:$PYTHONPATH
  3. Lauf als root des Standalone-Skript mit python test-script.py

Außerdem habe ich machte einen weiteren Test mit dem Funken allein (nicht in der dse-Version) und versuchte, die Java-Pakete einzubeziehen, die Treiberklassen bilden accesible, ich habe:

  1. hinzufügen spark.driver.extraClassPath = /path/to/spark-cassandra-connector-SNAPSHOT.jar in die Datei Funken defaults.conf 2.execute $SPARK_HOME/bin/spark-submit —packages com.datastax.spark:spark-cassandra...

ich habe auch versucht pyspark Shell und testen, ob sc das Verfahren cassandraTable hatte, um zu sehen, ob der Treiber geladen wurde ausgeführt, aber funktioniert nicht, in beiden Fällen wir die folgende Fehlermeldung erhalten:

AttributeError: 'SparkContext' object has no attribute 'cassandraTable' 

Mein Ziel ist es, verstehe, was ich muss tun Sie, um die Nicht-dse-Spark-Version mit Cassandra verbinden und die Methoden aus dem Treiber verfügbar zu haben.

Ich möchte auch wissen, ob es möglich ist, den dse Spark-Cassandra-Connector mit einem Cassandra-Knoten zu verwenden, der NICHT mit dse läuft.

Danke für Ihre Hilfe

Antwort

1

Hier ist, wie Funken Shell cassandra in nicht-dse Version zu verbinden.

Copy spark-cassandra-connector jar spark/spark-hadoop-directory/jars/

spark-shell --jars ~/spark/spark-hadoop-directory/jars/spark-cassandra-connector-*.jar 

in Funken Shell führen diese Befehle

sc.stop 
import com.datastax.spark.connector._, org.apache.spark.SparkContext, org.apache.spark.SparkContext._, org.apache.spark.SparkConf 
import org.apache.spark.sql.cassandra._ 
val conf = new SparkConf(true).set("spark.cassandra.connection.host", "localhost") 
val sc = new SparkContext(conf) 
val csc = new CassandraSQLContext(sc) 

Sie werden weitere Parameter zur Verfügung zu stellen, wenn Ihr cassandra Passwort Setup hat usw. :)

1

Ich habe Pyspark in einem eigenständigen Python-Skript verwendet. Ich benutze DSE nicht, ich habe cassandra-spark-connector aus dem github-Repository von datastax geklont und mit datastax instrucctions kompiliert.

Um Zugang zu Zündkerze innerhalb Funken zu bekommen, kopierte ich in Gläser Ordner innerhalb Spark-Installation.

Ich denke, dass es auch für Sie gut sein würde:

cp ~/spark-cassandra-connector/spark-cassandra-connector/target/full/scala-2.11/spark-cassandra-connector-assembly-2.0.5-86-ge36c048.jar $SPARK_HOME/jars/ 

Sie this besuchen konnte, wo ich meine eigene Erfahrung erklären, das Einrichten der Umgebung.

Sobald Funken Zugang zu Cassandra-Anschluss verfügt, können Sie pyspark Bibliothek als Wrapper verwenden:

from pyspark import SparkContext, SparkConf 
from pyspark.sql import SQLContext, SparkSession 

spark = SparkSession.builder \ 
    .appName('SparkCassandraApp') \ 
    .config('spark.cassandra.connection.host', 'localhost') \ 
    .config('spark.cassandra.connection.port', '9042') \ 
    .config('spark.cassandra.output.consistency.level','ONE') \ 
    .master('local[2]') \ 
    .getOrCreate() 

ds = sqlContext \ 
    .read \ 
    .format('org.apache.spark.sql.cassandra') \ 
    .options(table='tablename', keyspace='keyspace_name') \ 
    .load() 

ds.show(10) 

In diesem example Sie das gesamte Skript sehen.