Apache Spark技術實戰之3 -- Spark Cassandra Connector的安裝和使用

徽滬一郎發表於2014-09-02

歡迎轉載,轉載請註明出處,徽滬一郎。

概要

前提

假設當前已經安裝好如下軟體

  • jdk
  • sbt
  • git
  • scala

安裝cassandra

以archlinux為例,使用如下指令來安裝cassandra

yaourt -S cassandra

啟動cassandra

cassandra -f

建立keyspace和table, 執行/usr/bin/cqlsh進入cql console,然後執行下述語句建立keyspace和table

CREATE KEYSPACE test WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1 };
CREATE TABLE test.kv(key text PRIMARY KEY, value int);

 新增記錄,繼續使用cql console

INSERT INTO test.kv(key, value) VALUES ('key1', 1);
INSERT INTO test.kv(key, value) VALUES ('key2', 2);

驗證記錄已經插入成功,執行如下cql

select * from test.kv;

下載編譯spark-cassandra-connector

下載最新的spark-cassandra-connector原始碼

git clone https://github.com/datastax/spark-cassandra-connector.git

編譯

sbt package

這中間要等待比較長的時間,請保持足夠的耐心

執行spark-shell

首先請確保cassandra已經正常安裝和執行,如有問題請返回開始的章節安裝cassandra

如何新增相應的library來支援spark-cassandra-connector,並沒有一個明確的文件說明,折騰了一個下午,終於弄出了一個最簡的配置

bin/spark-shell --driver-class-path /root/working/spark-cassandra-connector/spark-cassandra-connector/target/scala-2.10/spark-cassandra-connector_2.10-1.1.0-SNAPSHOT.jar:
/root/.ivy2/cache/org.apache.cassandra/cassandra-thrift/jars/cassandra-thrift-2.0.9.jar:
/root/.ivy2/cache/org.apache.thrift/libthrift/jars/libthrift-0.9.1.jar:
/root/.ivy2/cache/org.apache.cassandra/cassandra-clientutil/jars/cassandra-clientutil-2.0.9.jar:
/root/.ivy2/cache/com.datastax.cassandra/cassandra-driver-core/jars/cassandra-driver-core-2.0.4.jar:
/root/.ivy2/cache/io.netty/netty/bundles/netty-3.9.0.Final.jar:
/root/.ivy2/cache/com.codahale.metrics/metrics-core/bundles/metrics-core-3.0.2.jar:
/root/.ivy2/cache/org.slf4j/slf4j-api/jars/slf4j-api-1.7.7.jar:
/root/.ivy2/cache/org.apache.commons/commons-lang3/jars/commons-lang3-3.3.2.jar:
/root/.ivy2/cache/org.joda/joda-convert/jars/joda-convert-1.2.jar:
/root/.ivy2/cache/joda-time/joda-time/jars/joda-time-2.3.jar:
/root/.ivy2/cache/org.apache.cassandra/cassandra-all/jars/cassandra-all-2.0.9.jar:
/root/.ivy2/cache/org.slf4j/slf4j-log4j12/jars/slf4j-log4j12-1.7.2.jar

上述指令假設spark-cassandra-connector的原始碼是下載在$HOME/working目錄下,請根據自己的情況作適當修改

我是如何猜測到需要指定這些包依賴的呢?說白了,也很簡單,就是執行以下指令,然後再檢視相就的java程式中的執行引數

#執行spark-cassandra-connector測試集
sbt test
sbt it:test

當上述指令還在執行的時候,使用ps來檢視java執行的引數,這樣就反過來知道所需要的包依賴了

ps -ef|grep -i java

測試程式

由於spark-shell會預設建立sc,所以首先需要停止掉預設的sc,然後利用新的配置來建立可以連線到cassandra的sc,示例程式碼如下

sc.stop
import com.datastax.spark.connector._
import org.apache.spark._
val conf = new SparkConf()
conf.set("spark.cassandra.connection.host", "127.0.0.1")
val sc = new SparkContext("local[2]", "Cassandra Connector Test", conf)
val table = sc.cassandraTable("test", "kv")
table.count

如果一切正常會顯示出如下結果

res3: Long = 2

小結

進入實戰階段,挑戰會越來越多,保持足夠的信心和耐心很重要。

本篇內容和實戰一中的kafka cluster組織在一起的話,就會形成一個從前臺到後臺儲存的完整處理鏈條。

相關文章