spark(1)
Spark
------------------------------------------------
1.Lighting-fast cluster computing 快如闪电的计算
2.大规模快速通用的计算引擎
3.spark在内存中计算的速度是hadoop的百倍;在磁盘中计算是MapperReduce的10倍
4.DAG: //direct acycle graph,有向无环图
5.易于使用:java /Scala/python 提供了80+算子(操作符),容易构建并行应用 并行:集群计算+并行计算 并发:并发执行
6.通用:组合SQL,流计算
7.运行:hadoop
Spark模块
--------------------------------------
Spark core
Spark SQL
Spark Streaming 流计算
Spark MLlib 机器学习
Spark graph 图计算
到处运行
------------------------------------
体验spark
---------------------------------------
0.sc
SparkContext,Spark程序的入口点,封装了整个spark运行环境的信息
1.进入spark-shell
$>spark-shell
2.API
---------------------------------------
(1) SparkContext:Spark程序的入口点,封装了整个spark运行环境的信息
Spark功能的主要入口点,代表到spark集群的链接,可以创建RDD弹性分布式数据集、累加器和广播变量
每个JVM只能激活一个sparkContext对象,在创建新的sc之间,有stop掉active的sc
SparkConf:spark配置对象,设置Spark应用的各种参数,kv对的形式
(2)[RDD] resilient distributed databaset弹性分布式数据集,等价于集合
3.spark实现word count
---------------------------------------
//加载文件
val rdd1 = sc.textFile("/home/centos/test.txt")
val rdd2 = rdd1.flatMap(line=>line.split(" "))
val rdd3 = rdd2.map(word=>(word,1))
val rdd4 = rdd3.reduceByKey(_ + _)
一行搞定单词统计:sc.textFile("/home/centos/test.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).collect
单词过滤:sc.textFile("/home/centos/test.txt").flatMap(_.split(" ")).filter(_.contains("wor")).map((_,1)).reduceByKey(_ + _).collect
4.编写scala程序,引入spark类库,完成wordCount
-------------------------------------------------------------------------------------
(1)创建scala模块
1.创建Scala模块,并添加pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.it18zhang</groupId> <artifactId>SparkDemo1</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.1.0</version> </dependency> </dependencies> </project> 2.编写scala文件 import org.apache.spark.{SparkConf, SparkContext} /** * Created by Administrator on 2017/4/20. */ object WordCountDemo { def main(args: Array[String]): Unit = { //创建Spark配置对象 val conf = new SparkConf(); conf.setAppName("WordCountSpark") //设置master属性 conf.setMaster("local") ; //通过conf创建sc val sc = new SparkContext(conf); //加载文本文件 val rdd1 = sc.textFile("d:/scala/test.txt"); //压扁 val rdd2 = rdd1.flatMap(line => line.split(" ")) ; //映射w => (w,1) val rdd3 = rdd2.map((_,1)) val rdd4 = rdd3.reduceByKey(_ + _) val r = rdd4.collect() r.foreach(println) } }
提交作业到spark集群运行
----------------------------------------------
1.导出jar包
2.spark-submit提交命令运行job
$>spark-submit --master local --name WordCountDemo --class WordCountDemo scalaDemo1.jar /home/centos/test.txt
3.Spark2.1.0最新版是基于Scala2.11.8版本,因此安装scala2.11.8版本,否则如果基于2.12.0版本编译会出现包找不到的问题
Spark集群模式
-----------------------------------------
1.local
nothing
spark-shell local;
2.standalone独立模式
独立模式。
a)复制spark目录到其他主机
b)配置其他主机的所有环境变量
[/etc/profile]
SPARK_HOME
PATH
c)配置master节点的slaves文件
s202
s203
s204
d)启动spark集群
/soft/spark/sbin/start-all.sh
e)查看进程
$>xcall.sh jps
master //s201
worker //s202
worker //s203
worker //s204
f)验证webui
http://s201:8080/
3.提交作业jar到完全分布式spark集群
------------------------------------------------------------------------
1)需要启动hadoop集群,主要是hdfs,不需要yarn ,只需要启动hdfs
$>start-dfs.sh
2)put文件到hadoop文件系统
3)运行spark-submit命令
$>spark-submit --master spark://s201:7077 --name MywordVCount --class WordCountDemo scalaDemo.jar hdfs://s201:8020/user/centos/test.txt
3.脚本分析:
[start-all.sh]
先启动sbin/spark-config.sh
sbin/spark-master.sh //启动master进程
sbin/spark-slaves.sh //启动worker进程