1.spark
spark是一种基于内存的快速、通用、可拓展的大数据分析引擎。
速度: 比hadoop 100x,磁盘计算快10x
使用: java / Scala /R /python,提供80+算子(操作符),容易构建并行应用。
通用: 组合SQL ,流计算 + 复杂分析。
2.Spark模块
Spark core //核心模块
Spark SQL //SQL
Spark Streaming //流计算
Spark MLlib //机器学习
Spark graph //图计算
3.Spark安装(local)
(我们使用之前搭建好的hadoop集群环境)
(1)下载spark-2.1.0-bin-hadoop2.7.tgz,上传。
..
(2)解压spark-2.1.0-bin-hadoop2.7.tgz,并拷贝到安装软件的目录下。
..
(3)配置环境变量
sudo vi /etc/profile
加入以下配置:
SPARK_HOME=/soft/spark
PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
使环境变量立即生效
source /etc/profile
(4)验证spark
cd /soft/spark
./spark-shell
(5)通过webui查看
http://192.168.231.201:4040/
4.使用spark的API实现单词统计
(1)
进入spark-shell
val rdd1 = sc.textFile("/home/gao/hello.txt") //加载文件
val rdd2 = rdd1.flatMap(line=>line.split(" ")) //切割,压扁
val rdd3 = rdd2.map(word = > (word,1)) //变换成map对偶(word是高阶函数,“word变成(word,1)形式”)
val rdd4 = rdd3.reduceByKey(_ + _) //聚合
rdd4.collect //查看
简写:
sc.textFile("/home/gao/hello.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).collect
(2)使用idea编写scala程序实现单词统计
(a)创建maven工程,导入spark核心
4.0.0
groupId
spark_demo
1.0-SNAPSHOT
org.apache.spark
spark-core_2.11
2.1.1
(b)编写scala代码
package com.gao.spark_demo
import org.apache.spark.{SparkConf, SparkContext}
object WordCount {
def main(args: Array[String]): Unit = {
//spark配置对象,设置Spark应用各种参数,kv形式
val conf = new SparkConf();
conf.setAppName("WordCount")
conf.setMaster("local");
//创建spark上下文对象(通过SparkConf()创建)
val sc = new SparkContext(conf);
//加载文件
val rdd1 = sc.textFile("f:/hello.txt");
//按行切割,压扁
val rdd2 = rdd1.flatMap(line => line.split(" "));
//单词映射成对偶(元组)形式(w => (w,1))
val rdd3 = rdd2.map((_,1))
//聚合所有对偶(元组)
val rdd4 = rdd3.reduceByKey(_+_);
//统计,返回数组形式
val result = rdd4.collect()
//输出
result.foreach(println)
}
}
(3)使用java实现spark单词统计
package com.gao.spark_demo;
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 scala.Tuple2;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* Java版Spark单词统计程序
*/
public class WordCount2 {
public static void main(String[] args) {
//创建SparkConf对象
SparkConf conf = new SparkConf();
conf.setAppName("WordCount2");
//设置master属性
conf.setMaster("local");
//创建spark上下文对象
JavaSparkContext sc = new JavaSparkContext(conf);
//加载文件
JavaRDD rdd1 = sc.textFile("f:/hello.txt");
//使用匿名内部类迭代实现切割、压扁
JavaRDD rdd2 = rdd1.flatMap(new FlatMapFunction() {
public Iterator call(String s) throws Exception {
List list = new ArrayList();
String[] arr = s.split(" ");
for(String ss : arr){
list.add(ss) ;
}
return list.iterator() ;
}
});
//映射(使用匿名内部类)
JavaPairRDD rdd3 = rdd2.mapToPair(new PairFunction() {
//返回二元元组
public Tuple2 call(String s) throws Exception {
return new Tuple2(s,1);
}
});
//聚合(使用匿名内部类)
JavaPairRDD rdd4 = rdd3.reduceByKey(new Function2() {
public Integer call(Integer v1, Integer v2) throws Exception {
return v1 + v2;
}
});
//收集,打印输出
for(Object o : rdd4.collect()){
System.out.println(o);
}
}
}
5.spark集群安装部署(standalone)
(1)复制spark安装包到其他主机
(2)配置环境变量
sudo vi /etc/profile
加入以下配置:
SPARK_HOME=/soft/spark
PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
使环境变量立即生效
source /etc/profile
(3)修改配置文件名称
mv slaves.template slaves
mv spark-env.sh.template spark-env.sh
(4)修改slave文件,添加work节点
192.168.231.201
192.168.231.202
192.168.231.203
(5)配置spark-env.sh文件
SPARK_MASTER_HOST=192.168.231.200
SPARK_MASTER_PORT=7077
(6)启动spark集群
进入sbin目录下,./start-all.sh
(7)通过webui查看
http://192.168.231.200:8080
6.启动、停止spark
cd /soft/spark/sbin
./stop-all.sh //停掉整个spark集群.
./start-master.sh //停掉整个spark集群.
./start-master.sh //启动master节点
./start-slaves.sh //启动所有worker节点