第8课:彻底实战详解使用IDE开发Spark程序

第一阶段:Spark streamingspark sqlkafkaspark内核原理(必须有一个大型项目经验);

第二阶段:spark运行的各种环境,各种故障的解决,性能优化(精通spark内核、运行原理);

第三阶段:流处理、机器学习为鳌头,需要首先掌握前两个阶段的内容;

跟随王家林老师的零基础讲解,注重动手实战,成为spark高数,笑傲大数据之林!

第一部分学习笔记

import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
import org.apache.spark.rdd.RDD
/**
 * 第8课:彻底实战详解使用IDE开发Spark程序
 * 
 * 第一步:修改依赖的Scala版本为Scala 2.10.x
 * 第二步:加入Spark 1.4.1的jar文件依赖
 * 第三步:找到依赖的Spark Jar文件并导入到Eclipse中的Jar依赖spark-assembly-1.4.1-hadoop2.6.0.jar
 * 第五步:创建Scala入口类
 * 第六步:把class变成object并编写main入口方法
 * 
 * 
 * 使用Scala开发本地测试的Spark WordCount程序
 */
object WordCount {
  def main(args: Array[String]): Unit = {
    /**
     * 第1步:创建Spark的配置对象SparkConf,设置spark程序运行时的配置信息
     * 例如说通过setMaster来设置程序要连接的spark集群的Master的URL,如果设置为
     * local,则代表Spark程序在本地运行,特别适合于机器配置条件非常差(例如只有1G内存的初学者)
     */
    val conf = new SparkConf();//创建SparkConf对象
    conf.setAppName("Wow,My frist Spark App!")//设置应用程序的名称,在程序运行的监控界面可以看到名称
    conf.setMaster("local") //此时,程序在本地运行,不需要安装Spark集群
    /**
     * 第2步:创建SparkContext对象
     * SparkContext是Spark程序所有功能的唯一入口,无论是采用Scala、java、Python、R等都必须有一个Sparkcontext
     * SparkContext核心作用:初始化Spark应用程序运行所需要的核心组件,包括DAGScheduler、TaskScheduler、SchedulerBackend
     * 同时还会负责Spark程序往Master注册程序等
     * SparkContext是整个Spark应用程序中最为至关重要的一个对象
     */
    val sc = new SparkContext(conf)//创建SparkContext对象,通过传入SparkConf实例来定制Spark运行的具体参数和配置信息
    /**
     * 第3步:根据具体的数据来源(HDFS、HBase、Local FS、DB、S3等)通过SparkContext来创建RDD
     * RDD的创建基本有三种方式:根据外部的数据来源(例如HDFS)、根据Scala集合、有其它的RDD操作
     * 数据会被RDD划分成为一系列的Partitions,分配到每个Partition的数据属于一个Task的处理范畴
     */
    //类型推断val lines : RDD[String] = sc.textFile("hdfs://127.0.0.1:9000/cm_news_dev/leihui/test/wordcount/input/worddata.txt",1)
    //val lines = sc.textFile("hdfs://127.0.0.1:9000/cm_news_dev/leihui/test/wordcount/input/worddata.txt",1)//读取本地文件 1位并行度
    val lines = sc.textFile("D:\\data\\2.txt",1)//读取本地文件 1位并行度
    /**
     * 第4步:对初始的RDD进行Transformation级别的处理,例如map、filter等高阶函数等的编程,来进行具体的数据计算
     *  第4.1步:将每一行的字符串拆分成单个的单词
     */
    val words = lines.flatMap { line => line.split("[ ]") } //对每一行的字符串进行单词拆分并把所有行的拆分结果通过flat合并成为一个大的单词集合
    /**
     * 第4步:对初始的RDD进行Transformation级别的处理,例如map、filter等高阶函数等的编程,来进行具体的数据计算
     *  第4.2步:在单词拆分的基础上对每个单词实例计数为1,也就是word => (word,1)
     */
    val pairs = words.map { word => (word,1) }//(word,1)是一个tuple
    /**
     * 第4步:对初始的RDD进行Transformation级别的处理,例如map、filter等高阶函数等的编程,来进行具体的数据计算
     *  第4.3步:在每个单词实例计数为1基础之上统计每个单词在文件中出现的总次数
     */
    val wordCounts = pairs.reduceByKey(_+_) //对相同的key,进行value的累积(包括local和cluster 级别同式reducer)
    wordCounts.foreach(wordNumberPair => println(wordNumberPair._1 + " : " + wordNumberPair._2))
    
    sc.stop()
    
    
    /**
     * Spark prebult with Hadoop
     * Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
     */
  }
}

import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
import org.apache.spark.rdd.RDD
/**
 * 第8课:彻底实战详解使用IDE开发Spark程序
 * 
 * 第一步:修改依赖的Scala版本为Scala 2.10.x
 * 第二步:加入Spark 1.4.1的jar文件依赖
 * 第三步:找到依赖的Spark Jar文件并导入到Eclipse中的Jar依赖spark-assembly-1.4.1-hadoop2.6.0.jar
 * 第五步:创建Scala入口类
 * 第六步:把class变成object并编写main入口方法
 * 
 * 
 * 使用Scala开发本地测试的Spark WordCount程序
 */
object WordCount_Cluster {
  def main(args: Array[String]): Unit = {
    /**
     * 第1步:创建Spark的配置对象SparkConf,设置spark程序运行时的配置信息
     * 例如说通过setMaster来设置程序要连接的spark集群的Master的URL,如果设置为
     * local,则代表Spark程序在本地运行,特别适合于机器配置条件非常差(例如只有
     * 1G内存的初学者)
     */
    val conf = new SparkConf();//创建SparkConf对象
    conf.setAppName("Wow,My frist Spark App!")//设置应用程序的名称,在程序运行的监控界面可以看到名称
    //conf.setMaster("local") //此时,程序在本地运行,不需要安装Spark集群
    /**
     * 第2步:创建SparkContext对象
     * SparkContext是Spark程序所有功能的唯一入口,无论是采用Scala、java、Python、R等都必须有一个SparkContext
     * SparkContext核心作用:初始化Spark应用程序运行所需要的核心组件,包括DAGScheduler、TaskScheduler、SchedulerBackend
     * 同时还会负责Spark程序往Master注册程序等
     * Sparkcontext是整个Spark应用程序中最为至关重要的一个对象
     */
    val sc = new SparkContext(conf)//创建SparkContext对象,通过传入SparkConf实例来定制Spark运行的具体参数和配置信息
    /**
     * 第3步:根据具体的数据来源(HDFS、HBase、Local FS、DB、S3等)通过SparkContext来创建RDD
     * RDD的创建基本有三种方式:根据外部的数据来源(例如HDFS)、根据Scala集合、有其它的RDD操作
     * 数据会被RDD划分成为一系列的Partitions,分配到每个Partition的数据属于一个Task的处理范畴
     */
    //类型推断val lines : RDD[String] = sc.textFile("hdfs://127.0.0.1:9000/cm_news_dev/leihui/test/wordcount/input/worddata.txt",1)
    //val lines = sc.textFile("hdfs://127.0.0.1:9000/cm_news_dev/leihui/test/wordcount/input/worddata.txt",1)//读取HDFS文件并切分成不同的Partions
    val lines = sc.textFile("hdfs://127.0.0.1:9000/cm_news_dev/leihui/test/wordcount/input/worddata.txt")//读取HDFS文件并切分成不同的Partions
    /**
     * 第4步:对初始的RDD进行Transformation级别的处理,例如map、filter等高阶函数等的编程,来进行具体的数据计算
     *  第4.1步:将每一行的字符串拆分成单个的单词
     */
    val words = lines.flatMap { line => line.split(" ") } //对每一行的字符串进行单词拆分
    /**
     * 第4步:对初始的RDD进行Transformation级别的处理,例如map、filter等高阶函数等的编程,来进行具体的数据计算
     *  第4.2步:在单词拆分的基础上对每个单词实例计数为1,也就是word => (word,1)
     */
    val pairs = words.map { word => (word,1) }//(word,1)是一个tuple
    /**
     * 第4步:对初始的RDD进行Transformation级别的处理,例如map、filter等高阶函数等的编程,来进行具体的数据计算
     *  第4.3步:在每个单词实例计数为1基础之上统计每个单词在文件中出现的总次数
     */
    val wordCounts = pairs.reduceByKey(_+_) //对相同的key,进行value的累积(包括local和cluster 级别同式reducer)
    wordCounts.collect().foreach(wordNumberPair => println(wordNumberPair._1 + " : " + wordNumberPair._2))
    
    sc.stop()
    
    
    /**
     * Spark prebult with Hadoop
     * Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
     */
    /**
     * 作业第8课作业:在Eclipse中写好广告点击排名的程序并测试
     */
  }
第二部分作业

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext

object WordRank {
  def main(args: Array[String]): Unit = {
    
    val conf = new SparkConf()
    conf.setAppName("WordRank")
    conf.setMaster("local")
    
    val sc = new SparkContext(conf)
    val lines = sc.textFile("D:\\data\\2.txt", 1)//1代表并行度
    val words = lines.flatMap { line => line.split("[ ]") }
    val pairs = words.map { word => (word,1) }
    val counts = pairs.reduceByKey(_+_)
    val reverses = counts.map(word => (word._2,word._1))
    val sorts = reverses.sortByKey(false, 1)
    val rank = sorts.map(word => (word._2,word._1))
    rank.collect().foreach(x => println(x))
    
    sc.stop()
  }
}


你可能感兴趣的:(第8课:彻底实战详解使用IDE开发Spark程序)