SparkContext
类名
org.apache.spark.SparkContext
Spark上下文对象,是Spark程序的主入口点,负责连接到Spark cluster
可用创建RDD ,在集群上创建累加器和广播变量
每个jvm只能激活一个SparkContext对象,创建新的SparkContext对象时,必须stop原对象
MapReduce
map :split
RDD : Resilient(弹性) Distributed(分布式) Datasets(数据集)
类名
org.apache.spark.rdd.RDD
是不可变、可分区的元素集合,可进行并行操作。
该类包含了可用于与所有RDD之上的基本操作 如:
map ,filter,persist
在RDD内部,每个RDD有五个特征
* - A list of partitions
* - A function for computing each split
* - A list of dependencies on other RDDs
* - Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
* - Optionally, a list of preferred locations to compute each split on (e.g. block locations for
* an HDFS file)
*
- 每一个分区列表
- 每个split都有一个计算函数
- 存放parent的RDD依赖列表
- (可选)基于key value 的分区器
- (可选)首选的位置列表
Spark集群中所有调度和执行都是基于RDD
所有调度和执行都是基于这些方法,RDD可以决定实行哪一个方法
val lines =
本地读取
在HDFS中读取
val lines = sc.textFile("/root/Desktop/...")
val 常用操作
lines.count
统计行数
lines.frist
提取第一行
val txt = lines.take(xx)
提取前xxx行
每个Spark程序由deiver构成,由它启动各种操作
driver含有main函数和分布式数据集,并对他们的应用各种操作
spark-shell就是driver(包含main方法)
Driver通过SparkContext来访问Spark,代表和Spark集群的链接
运行程序时,驱动程序需要管理一些叫做executor的节点
=============================================================================
查看指定的文本在多少行
//加载文本形成rdd
$scala>val lines = sc.textFile("file:///home/ubuntu/data.txt");
//调用rdd.filter(x=>boolean),过滤含有0000的行
$scala>val rdd2 = lines.filter(x => x.contains("0000"))
//统计有多少行含有0000
$scala>rdd2.count
===========================================================================
初始化spark在scala java中
Spark-shell
默认使用local模式运行spark程序,没有用到spark集群,类似于hadoop本地模式
n :本地模式下 启动的线程数,模拟spark集群
spark-shell --master local[n]
在本地模式下启动四个线程模拟spark集群
$>spark-shell --master local[4]
$scala>val lines = sc.textFile("file:///home/Desktop/bonus.txt");
$scala>val rdd2 = lines.map(x=>{
val tname = Thread.currentThread().getName();
println(tname + " : " + x)
x
})
$scala>rdd2.count
使用maven编译和运营scala的spark程序
spark-shell 写一个独立的scala的app
-
编写scala源代码
也可以使用java编写程序
-
编写pom.xml文件
-
使用maven进行编译
mvn clean && mvn compile && mvn package
- 生成对应的文件夹
target/wc-0.0.1.jar
- 通过spark-sumit提交脚本运行spark程序
$
压扁的原理
RDD Basics
1 不可变集合
2 每个RDD 切割成分区 每个分区在不同节点上计算
3 创建RDD 的两种方式
a. 加载外部数据集 sc.textFile(...)
b. 或者分发一个对象集合。
4 RDD的两种操作类型
transformations:从前一个RDD产生一个新的RDD。例如filter操作
action:基于RDD计算一个结果/返回值给driver/存储文件到存储系统上
**5 rdd.persist() **
//持久化到内存,也可以到磁盘
6 使用paralielize()创建rdd
sc.parallelize()