轉自: http://in.sdo.com/?p=325
最近在測試集羣嘗試把Spark以及Shark搭建起來,體驗了一下。
Spark是一個高效的分佈式計算系統,相比Hadoop,它在性能上比Hadoop號稱要高 100倍。Spark提供比Hadoop更 上層的API,同樣的算法在Spark中實現往往只有Hadoop的1/10或者1/100的長度。Shark類似“SQL on Spark”,是一個在Spark上數據倉庫的實現,在兼容Hive的情況下,性能最高可以達到Hive的一百倍。
Spark
下載Spark
$ wget https://github.com/downloads/mesos/spark/spark-0.6.0-prebuilt.tar.gz $ tar xvfz spark-0.6.0-prebuilt*.tgz
編輯spark-0.6.0/conf/slaves,添加每個slave節點的hostname,每行一個。
編輯spark-0.6.0/conf/spark-env.sh,設置 SCALA_HOME and SPARK_WORKER_MEMORY
export SCALA_HOME=/home/hdfs/guojian/scala-2.9.2 export JAVA_HOME=/home/hdfs/java-current export SPARK_WORKER_MEMORY=8g export SPARK_MASTER_IP=10.133.103.11 export SPARK_MASTER_PORT=7077
SPARK_WORKER_MEMORY是Spark中每個節點可用的最大內存。這個值設置的越大,就會有更多的數據被cache到內存中。
另外,Spark除了依賴上述Scala、Java,還需要一個HDFS集羣。
如果系統中沒有安裝Scala,可以通過如下方法下載:
$ wget http://www.scala-lang.org/downloads/distrib/files/scala-2.9.2.tgz $ tar xvfz scala-2.9.2.tgz
進入到spark-0.6.0/bin目錄,執行start-all.sh腳本以啓動Spark集羣。
啓動後可以通過http://10.133.103.11:8080/查看spark的狀態,如下圖:
Shark
$ wget https://github.com/downloads/amplab/shark/shark-0.2.1-bin.tgz $ tar xvfz shark-0.2.1-bin.tgz
編輯shark-0.2.1/conf/shark-env.sh
,設置HIVE_HOME, SCALA_HOME以及MASTER等:
export HADOOP_HOME=/home/hdfs/hadoop-current export HIVE_HOME=/home/hdfs/guojian/hive-0.9.0-bin export MASTER=spark://10.133.103.11:7077 export SPARK_HOME=/home/hdfs/guojian/spark-0.6.0 export SCALA_HOME=/home/hdfs/guojian/scala-2.9.2 export SPARK_MEM=5g source $SPARK_HOME/conf/spark-env.sh
值得說明的是SPARK_MEM的值不能比前面SPARK_WORKER_MEMORY的值大。
複製Spark和Shark目標到每個slave節點。可以使用如下方法:
$ while read slave_host; do $ rsync -Pav spark-0.6.0 shark-0.2.1 $slave_host $ done < /path/to/spark/conf/slaves
現在可以啓動Shark了。
$ ./bin/shark-withinfo
可以用sql測試Shark是否可用。
CREATE TABLE src(key INT, value STRING); LOAD DATA LOCAL INPATH '${env:HIVE_HOME}/examples/files/kv1.txt' INTO TABLE src; SELECT COUNT(1) FROM src; CREATE TABLE src_cached AS SELECT * FROM SRC; SELECT COUNT(1) FROM src_cached;
測試結果如下:
簡單的對比,在MR中,一個最簡單的count操作,至少需要20-30秒的時間,使用spark/shark,這裏只需要1秒。由於spark/shark更多的是內存操作,大大降低了IO開銷,提升計算效率。當然,不同的計算操作,效率提升也不盡相同,後續有時間針對不同的計算操作再做更進一步的測試。
參考資料:
- http://www.csdn.net/article/2013-04-26/2815057-Spark-Reynold
- Spark項目主頁:http://spark-project.org/
- Shark項目主頁:https://github.com/amplab/shark/wiki
- 資源下載:https://github.com/amplab/shark/downloads