读取内存的数据
package com.wordcount
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
/**
* 使用scala实现wordCount,读取内存中的List集合中的数据进行统计
*/
object _01wordCount {
def main(args: Array[String]): Unit = {
//创建配置对象
val conf: SparkConf = new SparkConf()
.setAppName(s"${_01wordCount.getClass.getSimpleName}")
.setMaster("local")
val sc = new SparkContext(conf)
//集合数据
val list = List(
"org.apache.spark.SparkConf",
"org.apache.spark.api.java.function.VoidFunction",
"scala.Tuple2"
)
//生成RDD
val listRDD: RDD[String] = sc.parallelize(list)
//进行transformation操作和action操作
val retRDD: RDD[(String, Int)] = listRDD.flatMap(_.split("\\.")).map((_,1)).reduceByKey(_+_)
//将最终的数据进行输出
retRDD.foreach(x=>println(x._1+"------->"+x._2))
//关闭资源
sc.stop()
}
}
读取本地文件
package com.wordcount
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
/**
* 使用scala实现wordCount,读取本地磁盘的数据
*/
object _02wordCountLoal {
def main(args: Array[String]): Unit = {
//创建配置对象
val conf: SparkConf = new SparkConf()
.setAppName(s"${_01wordCount.getClass.getSimpleName}")
.setMaster("local")
val sc = new SparkContext(conf)
//生成RDD
val textRDD: RDD[String] = sc.textFile("D://aaa//word.txt")
//进行transformation操作和action操作
val retRDD: RDD[(String, Int)] = textRDD.flatMap(_.split("\\.")).map((_,1)).reduceByKey(_+_)
//将最终的数据进行输出
retRDD.foreach(x=>println(x._1+"------->"+x._2))
//关闭资源
sc.stop()
}
}
读取hdfs文件
package com.wordcount
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
/**
* 使用scala实现wordCount,读取HDFS的数据
* 注意这里在运行的时候用到了高可用的额组名,这样的话就需要将core-site.xml和hdfs-site.xml放在classPath的目录下
* 放在resources的目录下运行就可以了
*
*/
object _03wordCountHDFS {
def main(args: Array[String]): Unit = {
//创建配置对象
val conf: SparkConf = new SparkConf()
.setAppName(s"${_01wordCount.getClass.getSimpleName}")
.setMaster("local")
val sc = new SparkContext(conf)
//生成RDD
val textRDD: RDD[String] = sc.textFile("hdfs://bd1901/word/word.txt")
//进行transformation操作和action操作
val retRDD: RDD[(String, Int)] = textRDD.flatMap(_.split("\\.")).map((_,1)).reduceByKey(_+_)
//将最终的数据进行输出
retRDD.foreach(x=>println(x._1+"------->"+x._2))
//关闭资源
sc.stop()
}
}
master:spark作业去连接spark集群的方式
local: spark作业不依托于spark集群,在本地完成计算,此时Driver和Executor何为一体。
local :为当前Spark作业分配一个工作线程。
local[M] :为当前Spark作业分配M个工作线程。M不会超过可用的线程 cpu core。
local[*] :为当前spark作业分配当前计算机的可用CPU core的个数
local[M, N] :
local[, N] :
这里的M和,与上面的M和*的含义是一样的,不同点在于第二个参数N,
在有限的提交次数N以内,如果提交失败,重新进行spark作业的提交。
standalone: 基于Spark自身集群的提交方式:spark://bigdata01:7077
如果是HA的集群,spark://bigdata01:7077,bigdata02:7077
master: spark://bigdata01:7077或者 spark://bigdata01:7077,bigdata02:7077
deploy-mode:
client :driver在本地启动,提交spark作业的那台机器就是driver,sparkcontext就在这台机器创建
cluster :driver不在本地启动,driver会在spark集群中被启动,driver也在worker节点上面
yarn:
deploy-mode:
client :driver在本地启动,提交spark作业的那台机器就是driver,sparkcontext就在这台机器创建
cluster :driver不在本地启动,driver会在yarn集群中被启动,driver也在nodemanager节点上面
mesos:—>欧美只要的资源调度框架
client :
cluster :