1、概述
一种快速通用的集群计算系统
它提供Java,Scala,Python和R中的高级API
支持通用执行图的优化引擎
SQL和结构化数据的处理,MLlib机器学习,GraphX用于图形处理和spark流
-------------------------------------
Spark在Windows和类UNIX系统(例如Linux,Mac OS)上运行
需要java在系统上安装PATH,或者JAVA_HOME指向Java安装的环境变量(Spark运行在Java 8 +)
Note that support for Java 7, Python 2.6 and old Hadoop versions before 2.6.5 were removed as of Spark 2.2.0. Support for Scala 2.10 was removed as of 2.3.0.、
部署方式
--------------------------------------
stanalone
Apache Mesos
Hadoop YARN
2、安装条件
1、需要安装scala
spark-1.6.0需要安装scala-2.10.5
tar -zxvf 解压,配置环境变量,然后生效一下
3、wordcount
引入依赖
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>1.6.0</version>
</dependency>
代码
package cn.taikang.bd;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;
import org.apache.spark.api.java.function.VoidFunction;
import scala.Tuple2;
import java.util.Arrays;
public class SparkWorldCount {
public static void main(String[] args) {
/**
* conf
* 1、可以设置spark运行模式
* 模式 local stanalone yarn mesos
* 2、可以设置在webui显示的applicatio的名称
*
* 3、可以设置spark application的运行资源 k / v 例如:spark.master none
* 4c 8 线程
*
* */
SparkConf conf = new SparkConf();
conf.setMaster("local");
conf.setAppName("javaSparkWordCount");
conf.set("hadoop.home.dir","d://");
// sparkcontext是通往集群的唯一通道
//
JavaSparkContext sc = new JavaSparkContext(conf);
//read file start
// RDD数据集 textFile 读取文件
JavaRDD<String> lines = sc.textFile("./words.txt");
//String 是读过来的一行一行的数据
//2 String 是切分成的单词 flatMap 一对多 进来一条出多条
JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
public Iterable<String> call(String s) throws Exception {
return Arrays.asList(s.split(" "));
}
});
/**
*把RDD转换成一个kv格式rdd,需要。。。topair
*
*String 一个一个的单词
*String 单词
* Integer 计数
*/
//kv格式RDD 把某个RDD转换成kv格式RDD 用什么什么topair
JavaPairRDD<String, Integer> pairWords = words.mapToPair(new PairFunction<String, String, Integer>() {
public Tuple2<String, Integer> call(String s) throws Exception {
return new Tuple2<String, Integer>(s, 1);
}
});
/**
* reduceByKey
* 1、先将相同的key 分组
* 2、对每个组的key对应的value,按照你的逻辑处理
*
* a,1 a,1 a,1 a,1 a,1 a,1
* Integer 对应 arg0 第一条进来a,1 arg0 变成1,
* Integer 对应 arg1 第2条进来a,1 arg1变成1,
* arg0 + arg 1 =2 ,如果还有第三条,2赋值给arg0,在和arg1相加
* 如果只有一条,不进入call方法,直接返回结果
* Integer 输出总数 结果
*/
JavaPairRDD<String, Integer> result = pairWords.reduceByKey(new Function2<Integer, Integer, Integer>() {
public Integer call(Integer arg0, Integer arg1) throws Exception {
return arg0 + arg1;
}
});
/**
* 打印结果
*
* 结果里面是一个一个的二元组
*/
result.foreach(new VoidFunction<Tuple2<String, Integer>>() {
public void call(Tuple2<String, Integer> tuple) throws Exception {
System.out.println(tuple);
}
});
sc.stop();
}
}