第8课:彻底实战详解使用IDE开发Spark程序
2016-01-10 19:47
591 查看
第一阶段:Spark streaming、spark sql、kafka、spark内核原理(必须有一个大型项目经验);
第二阶段:spark运行的各种环境,各种故障的解决,性能优化(精通spark内核、运行原理);
第三阶段:流处理、机器学习为鳌头,需要首先掌握前两个阶段的内容;
跟随王家林老师的零基础讲解,注重动手实战,成为spark高数,笑傲大数据之林!
第一部分学习笔记
第二阶段: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() } }
相关文章推荐
- LeetCode--word Pattern
- J2EE之13中规范初了解
- struts2环境配置以及配置xml文件智能提示
- C语言数据结构——队列
- Java高效并发
- Linux最小化安装,忘记安装开发工具的解决方法
- JAVA中indexOf函数和lastindexOf函数
- 通过串口连接树莓派ssh
- 杭电 HDU 5596 (详解)GTW likes gt(思维)
- gulp工具
- AndroidStudio 已确认快捷键, 选择Keymaps: Mac OS X 10.5+
- HBase 笔试题
- <LeetCode OJ> 242. Valid Anagram
- Node.js Express4.x生成程序骨架
- sicily 1006. Campus_mothod_2(Dijkstra算法)
- linux笔记 第13天 系统启动流程、Grub详解、case函数
- 大型网站技术-2. 云计算之OpenStack简述
- python学习之使用multiprocessing.dummy多线程爬虫
- tcpdump 报文截取分析
- 神经网络发展史