发布于 2015-01-26 15:12:35 | 1776 次阅读 | 评论: 1 | 来源: PHPERZ
Apache Spark
Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。
Spark是基于内存的大数据分析平台,由UC Berkely AMP lab发布的一大神器。相比Hadoop而言,其最大的优势是基于内存,这样可以极大提高其速度和通用性。
在Windows平台上需要借助Eclipse来进行编译,比较麻烦,所以这里是在Linux平台上搭建的,具体环境如下:
1. 系统:Fedora release 20 (Heisenbug)
2. Spark:spark-1.2.0 http://spark.apache.org/
3. Maven:3.1.1
4. Scala:2.10.3
5. Java:1.7.0
sudo yum install java-1.7.0-openjdk.i686
sudo yum install maven-noarch maven-release-manager.noarch maven-release-plugin.noarch
sudo yum install scala.noarch
Linux的发行版本都有各种通用的包管理器,比如Fedora的yum、Debian的apt等。通过这些工具,安装前的环境可以很快搭建完成:
环境搭建完成后,就到spark的官网http://spark.apache.org/下载最新版本的压缩包。截止2015年1月20日,最新的压缩包为spark-1.2.0.tgz。可以通过下面的命令来解压缩:
tar xvf spark-1.2.0.tgz
解压完成后,需要通过mvn命令来编译和打包:
cd spark-1.2.0
mvn -DskipTests clean package
该命令会下载很多依赖包,然后进行构建。整个过程大概需要10几分钟。
安装完成后可以运行第一个示例:
./bin/run-example SparkPi 10
要是不出意外的话,你会得到下面的错误消息:
...java.net.UnkownHostException: unknown host: namenode
要是没有错误,很有可能是因为你之前已经安装过Hadoop。这个namenode错误是因为Spark的默认运行配置是conf/spark-defaults.conf。其中有一个变量的设置是这样的:
spark.eventLog.dir hdfs://localhost:8021/directory
害人不浅啊。花了哥半个小时才想明白,果断改成/var/tmp然后就ok了。
改好后重新运行可以得到下面的输出:
Pi is roughly 3.139344
如果把10改成100,将能得到更加精确的值:
Pi is roughly 3.1418872
下面这个程序改编自Spark的官方文档,主要是尝试python在spark上的接口:
from pyspark import SparkContext
logFile = "/path/to/one/text/file" # Should be some file on your system
sc = SparkContext("local", "Simple App")
logData = sc.textFile(logFile).cache()
num = logData.filter(lambda s: 'Spark' in s).count()
print "Lines containing Spark: %i" % num
保存为simpleapp.py,然后运行如下:
$ pyspark simpleapp.py
Lines containing Spark: 19
课程观看地址:http://www.xuetuwuyou.com/course/149
深入浅出Spark机器学习实战(用户行为分析)
课程观看地址:http://www.xuetuwuyou.com/course/144
Spark+Kafka 实时流机器学习实战
课程观看地址:http://www.xuetuwuyou.com/course/147