spark RDD与集群提交任务

RDD 的介绍:
1,一组分片。数据集的基本单位,每个分片都被一个计算任务进行处理,相当于集群分节点。默认是CPU的 core数,创建RDD过程可以指定分片数量
2,一个计算每个分区的函数,RDD之中计算是按照分片为单位的,每一个分片都会实现computer函数来达到这个目的
3,RDD的每一次转换都生成一个新的RDD,所以RDD之间形成流水线的前后依赖,如果RDD丢失,完全可以根据依赖进行恢复
4,一个 Partitioner (分区器),即RDD的分片函数,一个是基于哈希的 HashPartitioner,一个是基于范围的RangePartitioner,只有对于key-value的RDD才有Partitioner
5,一个列表,存储每一个 Partitioner的优先位置,对于一个HDFS 来说,这个列表保存的是每一个 Partitioner 的所在的块位置,因为spark会尽可能的将计算任务分配到其所要处理的数据块位置.也就是说'移动数据不如移动计算',数据在哪,计算逻辑就在那
rdd 弹性表现:
1,存储的弹性:内存与磁盘的自动切换
2,容错的弹性:数据丢失可以自动恢复(根据"血统"进行恢复,从上一个RDD恢复)
3,计算的弹性:计算出错重试机制
4,分片的弹性:根据需要重新分片(根据数据量的进行分片)
spark 提交任务:
1,首先查看代码逻辑与进行编译jar包(maven)
package day02
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object sparkconnect {
  // args 两个参数 一个是读取的内容,一个是存到什么位置!
    def main(args: Array[String]): Unit = {
        // 设置 app 名称 以及开启最大线程数个线程
//        val con:SparkConf = new SparkConf().setAppName("sparkwc").setMaster("local[*]")
        val con:SparkConf = new SparkConf().setAppName("sparkwc") // 集群之中!
        // 上下文对象!
        val sc:SparkContext = new SparkContext(con)
        // SparkContext的方法称之为算子!如果加载本地文件, 那么就会按照 32M 进行分区(默认)
        val line = sc.textFile(args(0)) //读取数据放到 line 之中!
        val worlds:RDD[String] = line.flatMap(_.split(" "))
        val paired:RDD[(String,Int)] = worlds.map((_,1))
        val reduce:RDD[(String,Int)] = paired.reduceByKey(_+_) //相同 k 的 value 聚合到一块!
        val res:RDD[(String,Int)] = reduce.sortBy(_._2,false) //false 倒叙排列!
        res.saveAsTextFile(args(1)) //保存结果
//        println(res.collect().toBuffer)
    //    结束任务 不结束占用线程!
        sc.stop()
  }
}
  2,集群提交jar 包,指定运行类,jar包,参数!
sudo ./bin/spark-submit --class day02.sparkconnect --executor-memory 20M --executor-cores 1 /home/hadoop/sfd-1.0-SNAPSHOT.jar hdfs://master:9000/wc/1.txt hdfs://master:9000/wc1 
  3,使用spark-shell RDD计算
./bin/spark-shell  --executor-memory 20M --total-executor

 

posted @ 2019-03-12 08:06  十七楼的羊  阅读(192)  评论(0编辑  收藏  举报