Spark学习笔记7-在eclipse里用scala编写spark程序(单机和集群运行)
来源:互联网 发布:alin41288淘宝订单关闭 编辑:程序博客网 时间:2024/04/27 21:44
1.下载eclipse
我下载的是带scala SDK的eclipse,下载地址如下:
http://scala-ide.org/download/sdk.html
我的要放在ubuntu下写程序,所以下载linux 64位的。
下载完成后自行解压。
2.单机下运行WordCount程序
我要测试运行的是单词计数的程序。采用的文件来自/Users/xxm/Documents/soft/spark-1.5.2-bin-hadoop2.6/README.md,spark程序按空格将这个文件内容划分成单词,并计相同单词出现次数,并打印出来。
2.1创建scala工程
创建scala工程,工程名字为WordCount
直接next到finsh。
2.2 修改依赖的scala版本为scala2.10.x
默认下是scala 2.11.7,如下图:
具体操作见下面图中所示:
先右键进入properties中
按下图四步骤操作:
完成后修改为2.10.6版本
2.3 加入spark的jar包
jar包的目录如下所示:
右键工程,在build path 中进入configure
按下两幅图的顺序加入:
这个时候可以看到导入了spark的tar包
2.4 在src下建立spark工程包
先建立一个package
package名称为com.dt.spark
再在包里创建scala类
类名为WordCount
创建完成后,如下图所示:
2.5 编写程序并运行
因为程序的入口函数是main,所以要先定义mian,同时把class修改为object。
输入代码如下,并运行,结果在控制台中可以看到,结果是将单词都进行多计数。
代码内容(加入注解,方便学习):
package com.dt.sparkimport org.apache.spark.SparkConfimport org.apache.spark.SparkContext/** * 使用Scala开发本地测试的Spark WordCount程序 * 程序注释内容来自王家林的大数据视频 */object WordCount { def main(args : Array[String]){ /** * 第1步:创建Spark的配置对象SparkConf,设置Spark程序的运行时的配置信息, * 例如说通过setMaster来设置程序要链接的Spark集群的Master的URL,如果设置 * 为local,则代表Spark程序在本地运行,特别适合于机器配置条件非常差(例如 * 只有1G的内存)的初学者 * */ val conf = new SparkConf()//创建SparkConf对象 conf.setAppName("Wow,My First Spark Programe")//设置应用程序的名称,在程序运行的监控界面可以看到名称 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 = sc.textFile("/Users//xxm//Documents//soft//spark-1.5.2-bin-hadoop2.6//README.md",1)//读取本地文件并设置为一个Partion/** * 第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)} /** * 第4步:对初始的RDD进行Transformation级别的处理,例如map、filter等高阶函数等的编程,来进行具体的数据计算 * 第4.3步:在每个单词实例计数为1基础之上统计每个单词在文件中出现的总次数 */ val wordCounts = pairs.reduceByKey(_+_)//对相同的Key,进行Value的累计(包括Local和Reducer级别同时Reduce) wordCounts.foreach(wordNumberPair => println(wordNumberPair._1 + " : " +wordNumberPair._2))//在命令行中打印该结果 sc.stop()//记得关闭创建的SparkContext对象 }}
输出结果:
ackage : 1For : 2Programs : 1processing. : 1Because : 1The : 1cluster. : 1its : 1[run : 1APIs : 1have : 1Try : 1computation : 1through : 1several : 1This : 2"yarn-cluster" : 1graph : 1Hive : 2storage : 1["Specifying : 1To : 2page](http://spark.apache.org/documentation.html) : 1Once : 1application : 1prefer : 1SparkPi : 2engine : 1version : 1file : 1documentation, : 1processing, : 1the : 21are : 1systems. : 1params : 1not : 1different : 1refer : 2Interactive : 2R, : 1given. : 1if : 4build : 3when : 1be : 2Tests : 1Apache : 1./bin/run-example : 2programs, : 1including : 3Spark. : 1package. : 11000).count() : 1Versions : 1HDFS : 1Data. : 1>>> : 1programming : 1Testing : 1module, : 1Streaming : 1environment : 1run: : 1clean : 11000: : 2rich : 1GraphX : 1["Third : 1Please : 3is : 6run : 7URL, : 1threads. : 1same : 1MASTER=spark://host:7077 : 1on : 6built : 1against : 1[Apache : 1tests : 2examples : 2at : 2optimized : 1usage : 1using : 2graphs : 1talk : 1Shell : 2class : 2abbreviated : 1directory. : 1README : 1computing : 1overview : 1`examples` : 2example: : 1## : 8N : 1set : 2use : 3Hadoop-supported : 1tests](https://cwiki.apache.org/confluence/display/SPARK/Useful+Developer+Tools). : 1running : 1find : 1contains : 1project : 1Pi : 1need : 1or : 4Big : 1Java, : 1high-level : 1uses : 1<class> : 1Hadoop, : 2available : 1requires : 1(You : 1see : 1Documentation : 1of : 5tools : 1using: : 1cluster : 2must : 1supports : 2built, : 1system : 1build/mvn : 1Hadoop : 4this : 1Version"](http://spark.apache.org/docs/latest/building-spark.html#specifying-the-hadoop-version) : 1particular : 3Python : 2Spark : 14general : 2YARN, : 1pre-built : 1[Configuration : 1locally : 2library : 1A : 1locally. : 1sc.parallelize(1 : 1only : 1Configuration : 1following : 2basic : 1# : 1changed : 1More : 1which : 2learning, : 1See : 1./bin/pyspark : 1also : 5first : 1should : 2"yarn-client" : 1[params]`. : 1for : 12documentation : 3[project : 2mesos:// : 1Maven](http://maven.apache.org/). : 1setup : 1<http://spark.apache.org/> : 1latest : 1your : 1MASTER : 1example : 3distribution. : 1scala> : 1DataFrames, : 1provides : 1configure : 1distributions. : 1can : 6About : 1instructions. : 1do : 2easiest : 1Distributions"](http://spark.apache.org/docs/latest/hadoop-third-party-distributions.html) : 1no : 1how : 2works : 1`./bin/run-example : 1Note : 1individual : 1spark:// : 1It : 2Scala : 2Alternatively, : 1an : 3variable : 1submit : 1machine : 1thread, : 1them, : 1detailed : 2stream : 1And : 1distribution : 1return : 2Thriftserver : 1./bin/spark-shell : 1"local" : 1start : 1You : 3Spark](#building-spark). : 1one : 2help : 1with : 4print : 1Party : 1Spark"](http://spark.apache.org/docs/latest/building-spark.html). : 1data : 1wiki](https://cwiki.apache.org/confluence/display/SPARK). : 1in : 5-DskipTests : 1downloaded : 1versions : 1online : 1Guide](http://spark.apache.org/docs/latest/configuration.html) : 1comes : 1[building : 1Python, : 2Many : 1building : 3Running : 1from : 1way : 1Online : 1site, : 1other : 1Example : 1analysis. : 1sc.parallelize(range(1000)).count() : 1you : 4runs. : 1Building : 1higher-level : 1protocols : 1guidance : 3a : 10guide, : 1name : 1fast : 1SQL : 2will : 1instance: : 1to : 14core : 1 : 67web : 1"local[N]" : 1programs : 2package.) : 1that : 3MLlib : 1["Building : 1shell: : 2Scala, : 1and : 10command, : 2./dev/run-tests : 1sample : 1
3.spark集群下运行WordCount
上面我完成了spark在单机中的运行,下面我来将程序修改,打包成jar,放到spark集群中运行。这里我运行的集群时1个Master,2个Worker。
3.1 修改单机程序成可在集群中运行
先创建一个新文件,将local的设置去除,在末尾打印程序部分加速collect。如下图3步骤:
完整代码如下:
package com.dt.sparkimport org.apache.spark.SparkConfimport org.apache.spark.SparkContextobject WordCountCluster { def main(args : Array[String]){ val conf = new SparkConf() conf.setAppName("Wow,My First Spark Programe") //conf.setMaster("local") val sc = new SparkContext(conf) val lines = sc.textFile("/wordcount") val words = lines.flatMap{line => line.split(" ")} val pairs = words.map{word => (word,1)} val wordCounts = pairs.reduceByKey(_+_) wordCounts.collect.foreach(wordNumberPair => println(wordNumberPair._1 + " : " +wordNumberPair._2)) sc.stop() }}
3.2 程序导出成jar文件
修改好程序后,程序导出成jar文件,文件名为WordCount.jar,文件放到/root/Documents/SparkApps/目录下,如下图:
3.3 本地文件复制到集群中
将本地的README.md文件复制到集群的/wordcount文件夹里(如何创建文件夹可看,笔记6),操作如下图:
3.4 运行程序
在spark的bin目录下提交程序,程序如下:
./spark-submit --class com.dt.spark.wordCountCluster --master spark://Master:7077 /root/Documents/SparkApps/WordCount.jar
运行后结果如下:
到这里集群运行spark程序就完成了。
3.5 编写脚步来运行这个程序
创建文件,名称为WordCount.sh,如下图:
打开文件,写入内容,如下:
保存并关闭。
设置WordCount.sh文件权限。(系统默认下自己编写的shell是没有直接运行的权限多,所以这一步不能少)
运行:
运行后的结果和前面相同。
3.6 在master:18080中查看历史运行记录
如下图,可以查看到,运行了2次作业。
还可以查看作业的DAG图。
XianMing
- Spark学习笔记7-在eclipse里用scala编写spark程序(单机和集群运行)
- Spark学习笔记8-在eclipse里用Java编写spark程序
- Scala-IDE Eclipse(Windows)中开发Spark应用程序,在Ubuntu Spark集群上运行
- scala-eclipse 编写spark简单程序 WordCount
- Spark学习之在集群上运行Spark(6)
- 在Windows下用Eclipse开发和运行Spark程序
- scala编写的Spark程序远程提交到服务器集群上运行
- Scala学习笔记-1用Eclipse和IDEA搭建Scala+Spark开发环境
- 在集群运行spark代码记录程序
- 基于spark运行scala程序(sbt和命令行方法)
- 走进Spark生态圈:运行程序在Spark集群
- 利用Scala编写Wordcount并在spark框架下运行
- 编写第一个用scala写的spark任务,用sbt打包成jar,并单机模式下运行
- IDEA【基本配置1】配置SBT 和 scala 并在spark环境中进行wordcount测试(spark集群运行模式)
- 编写Spark程序并提交到集群上运行
- Spark学习笔记(30)集群运行模式下的Spark Streaming调试
- Spark教程-构建Spark集群-配置Hadoop单机模式并运行Wordcount(1)
- Spark教程-构建Spark集群-配置Hadoop单机模式并运行Wordcount(2)
- 基础题
- 智慧北京开发第四天(下)
- codeforces 614A Link/Cut Tree
- Java EE 之 过滤器入门学习与总结(2)
- The Java™ Tutorials — Concurrency :Memory Consistency Errors 内存一致性错误
- Spark学习笔记7-在eclipse里用scala编写spark程序(单机和集群运行)
- vb学习之七
- vb学习之八
- vb学习之九
- docker学习笔记-------如何优雅的查看docker容器的日志
- vb学习之十
- poj1006
- Package funModeling: data cleaning, importance variable analysis and model perfomance
- 数据结构之三讲--表、栈、队列