1.Spark介绍
Spark是基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。
2.运行模式
本地模式
Standalone模式
Mesoes模式
yarn模式
下面测试一下“本地模式”的运行情况,本次测试在windows7下
1.环境准备
jdk 1.6
Spark 1.2.0
官网:http://spark.apache.org/downloads.html
或者:http://archive.apache.org/dist/spark/
我们可以下载源码【spark-1.2.0.tgz】自己编译,或者直接下载【spark-1.2.0-bin-hadoop2.4.tgz】
注:本地jdk安装的是1.6,spark1.5+只能在jdk7,8上运行;
Scala 2.11.7 http://www.scala-lang.org/download/
Python 2.7.7 https://www.python.org/downloads/windows/
2.目录
将下载的【spark-1.2.0-bin-hadoop2.4.tgz】解压
bin:方便我们本地模式下的测试的命令
conf:是一些配置模板,我么可以将xxxx.template去掉template,重新配置
默认是直接支持scala和Python运行的,分别执行:spark-shell.cmd和pyspark.cmd
运行spark-shell.cmd:
运行pyspark.cmd:
1.当然spark本身也支持java语言,我们可以通过spark-submit.cmd执行java程序
创建一个maven项目用于测试:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>1.2.0</version>
</dependency>
自动会将依赖的jar包都下载下来,jar包比较多,要稍微等一下
package com.spark;
import java.util.Arrays;
import java.util.regex.Pattern;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
public class WordCount {
private static final Pattern SPACE = Pattern.compile(" ");
public static void main(String[] args) {
SparkConf conf = new SparkConf().setAppName("JavaWordCount");
JavaSparkContext ctx = new JavaSparkContext(conf);
String filePath = "D:/systemInfo.log";
JavaRDD<String> lines = ctx.textFile(filePath, 1);
JavaRDD<String> words = lines
.flatMap(new FlatMapFunction<String, String>() {
@Override
public Iterable<String> call(String s) {
return Arrays.asList(SPACE.split(s));
}
});
System.out.println("wordCount:" + words.count());
}
}
通过maven将我们的项目打成一个jar包
具体说明看这个:http://my.oschina.net/u/140462/blog/519409
通过4040端口可以查看spark的相关信息:http://localhost:4040
2.java程序还可以不通过spark-submit来运行,可以直接在本地运行:
package com.spark;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.regex.Pattern;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
public final class JavaWordCount {
private static final Pattern SPACE = Pattern.compile(" ");
public static void main(String[] args) throws Exception {
SparkConf conf = new SparkConf().setMaster("local").setAppName(
"JavaWordCount");
JavaSparkContext ctx = new JavaSparkContext(conf);
String filePath = "";
BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in));
System.out.println("Enter FilePath:");
System.out.println("e.g. D:/systemInfo.log");
while (true) {
System.out.println("> ");
filePath = reader.readLine();
if (filePath.equalsIgnoreCase("exit")) {
ctx.stop();
} else {
JavaRDD<String> lines = ctx.textFile(filePath, 1);
JavaRDD<String> words = lines
.flatMap(new FlatMapFunction<String, String>() {
@Override
public Iterable<String> call(String s) {
return Arrays.asList(SPACE.split(s));
}
});
System.out.println("wordCount:" + words.count());
}
}
}
}
结果如下:
Enter FilePath:
e.g. D:/systemInfo.log
>
D:/systemInfo.log
wordCount:48050
>
setMaster为local,具体master URL参数如下图:
上图引用:http://www.infoq.com/cn/articles/apache-spark-introduction