转自: 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
$ 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的状态,如下图:
$ 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开销,提升计算效率。当然,不同的计算操作,效率提升也不尽相同,后续有时间针对不同的计算操作再做更进一步的测试。
参考资料: