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
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