一、前期准备

  前期的环境准备,在Linux系统下要有Hadoop系统,spark伪分布式或者分布式,具体的教程可以查阅我的这两篇博客:

Hadoop2.0伪分布式平台环境搭建

Spark2.4.0伪分布式环境搭建

  然后在spark伪分布式的环境下必须出现如下八个节点才算spark环境搭建好。

  

  然后再在本地windows系统下有一个简单的词频统计程序。

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.rdd.RDD object ScalaSparkDemo {
def main(args: Array[String]) {
/**
* 第一步:创建Spark的配置对象SparkConf,设置Spark程序的运行时的配置信息,
* 例如说通过setMaster来设置程序要连接的Spark集群的Master的URL,
* 如果设置为local,则代表Spark程序在本地运行,特别适合于机器配置条件非常差
* (例如只有1G的内存)的初学者
*/
val conf = new SparkConf() //创建SparkConf对象,由于全局只有一个SparkConf所以不需要工厂方法
conf.setAppName("wow,my first spark app") //设置应用程序的名称,在程序的监控界面可以看得到名称
//conf.setMaster("local") //此时程序在本地运行,不需要安装Spark集群
/**
* 第二步:创建SparkContext对象
* SparkContext是Spark程序所有功能的唯一入口,无论是采用Scala、Java、Python、R等都必须要有一个
* SparkContext
* SparkContext核心作用:初始化Spark应用程序运行所需要的核心组件,包括DAGScheduler,TaskScheduler,SchedulerBacked,
* 同时还会负责Spark程序往Master注册程序等
* SparkContext是整个Spark应用程序中最为至关重要的一个对象
*/
val sc = new SparkContext(conf) //创建SpackContext对象,通过传入SparkConf实例来定制Spark运行的具体参数的配置信息
/**
* 第三步:根据具体的数据来源(HDFS,HBase,Local,FileSystem,DB,S3)通过SparkContext来创建RDD
* RDD的创建基本有三种方式,(1)根据外部的数据来源(例如HDFS)(2)根据Scala集合(3)由其它的RDD操作
* 数据会被RDD划分为成为一系列的Partitions,分配到每个Partition的数据属于一个Task的处理范畴
*/
//读取本地文件并设置为一个Partition
// val lines = sc.textFile("words.txt", 1) //第一个参数为为本地文件路径,第二个参数minPartitions为最小并行度,这里设为1
sc.setLogLevel("WARN")
val lines = sc.parallelize(List("pandas","i like pandas"))
//类型推断 ,也可以写下面方式
// val lines : RDD[String] =sc.textFile("words.txt", 1)
/**
* 第四步:对初始的RDD进行Transformation级别的处理,例如map,filter等高阶函数
* 编程。来进行具体的数据计算
* 第4.1步:将每一行的字符串拆分成单个的单词
*/
//对每一行的字符串进行单词拆分并把所有行的结果通过flat合并成一个大的集合
val words = lines.flatMap { line => line.split(" ") }
/**
* 第4.2步在单词拆分的基础上,对每个单词实例计数为1,也就是word=>(word,1)tuple
*/
val pairs = words.map { word => (word, 1) }
/**
* 第4.3步在每个单词实例计数为1的基础之上统计每个单词在文中出现的总次数
*/
//对相同的key进行value的累加(包括local和Reduce级别的同时Reduce)
val wordCounts = pairs.reduceByKey(_ + _)
//打印结果
wordCounts.foreach(wordNumberPair => println(wordNumberPair._1 + ":" + wordNumberPair._2))
//释放资源
sc.stop()
}
}

二、导出jar包

  这里注意词频统计程序的包名为test,类名为ScalaSparkDemo。

  

   

  注意这里勾选要打包所依赖的一些文件。当然可以选择把整个工程打包。还要注意这里打包后的文件名为test.jar。

  

  然后上传到Ubuntu中,使用这个命令 bin/spark-submit --class test.ScalaSparkDemo --master local /home/xiaow/test.jar   即可运行。/home/xiaow/test.jar:指明此jar包在主节点上的位置。关于打包到集群的详细命令,可以查阅我的这一篇博客:Spark学习之在集群上运行Spark

  

     

  如此,搞定收工!!!

在local模式下的spark程序打包到集群上运行的更多相关文章

  1. Spark学习之在集群上运行Spark(6)

    Spark学习之在集群上运行Spark(6) 1. Spark的一个优点在于可以通过增加机器数量并使用集群模式运行,来扩展程序的计算能力. 2. Spark既能适用于专用集群,也可以适用于共享的云计算 ...

  2. Spark学习之在集群上运行Spark

    一.简介 Spark 的一大好处就是可以通过增加机器数量并使用集群模式运行,来扩展程序的计算能力.好在编写用于在集群上并行执行的 Spark 应用所使用的 API 跟本地单机模式下的完全一样.也就是说 ...

  3. Spark学习笔记——在集群上运行Spark

    Spark运行的时候,采用的是主从结构,有一个节点负责中央协调, 调度各个分布式工作节点.这个中央协调节点被称为驱动器( Driver) 节点.与之对应的工作节点被称为执行器( executor) 节 ...

  4. 012 Spark在IDEA中打jar包,并在集群上运行(包括local模式,standalone模式,yarn模式的集群运行)

    一:打包成jar 1.修改代码 2.使用maven打包 但是目录中有中文,会出现打包错误 3.第二种方式 4.下一步 5.下一步 6.下一步 7.下一步 8.下一步 9.完成 二:在集群上运行(loc ...

  5. [MapReduce_add_1] Windows 下开发 MapReduce 程序部署到集群

    0. 说明  Windows 下开发 MapReduce 程序部署到集群 1. 前提 在本地开发的时候保证 resource 中包含以下配置文件,从集群的配置文件中拷贝 在 resource 中新建  ...

  6. [Spark Core] 在 Spark 集群上运行程序

    0. 说明 将 IDEA 下的项目导出为 Jar 包,部署到 Spark 集群上运行. 1. 打包程序 1.0 前提 搭建好 Spark 集群,完成代码的编写. 1.1 修改代码 [添加内容,判断参数 ...

  7. 将java开发的wordcount程序提交到spark集群上运行

    今天来分享下将java开发的wordcount程序提交到spark集群上运行的步骤. 第一个步骤之前,先上传文本文件,spark.txt,然用命令hadoop fs -put spark.txt /s ...

  8. 06、部署Spark程序到集群上运行

    06.部署Spark程序到集群上运行 6.1 修改程序代码 修改文件加载路径 在spark集群上执行程序时,如果加载文件需要确保路径是所有节点能否访问到的路径,因此通常是hdfs路径地址.所以需要修改 ...

  9. spark在集群上运行

    1.spark在集群上运行应用的详细过程 (1)用户通过spark-submit脚本提交应用 (2)spark-submit脚本启动驱动器程序,调用用户定义的main()方法 (3)驱动器程序与集群管 ...

随机推荐

  1. SpringBoot:使用feign调用restful服务时地址栏传参

    1.服务提供者(controller层) @GetMapping("/user/{id}") public ApiResult getById(@PathVariable(&quo ...

  2. Redis内存数据库

    remote dictionary server 远程字典服务器 Redis默认支持16个数据库,不同的应用应该使用不同的Redis实例存储数据.   支持数据类型:字符串,哈希散列,列表,集合,有序 ...

  3. [Beta]Scrum Meeting#3

    github 本次会议项目由PM召开,时间为5月8日晚上10点30分 时长15分钟 任务表格 人员 昨日工作 下一步工作 木鬼 撰写博客整理文档 撰写博客整理文档 swoip 改进界面 改进界面 bh ...

  4. Leetcode:2. 两数相加

    题目描述: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来 ...

  5. sensor【学习笔记】

    高通sensor相关介绍不错的文章:https://www.cnblogs.com/linhaostudy/archive/2018/03/16/8578414.html 高通sensor的校准流程: ...

  6. Linux文件系统被占用,磁盘使用量与实际不一致【转】

    用lsof检查后才发现原因是,有文件被删除,而进程还活着,因而造成还占用空间的现象 [root@/]# lsof |grep delete 根据lsof列出的进程号,kill这些进程后,空间就释放出来 ...

  7. C++11版本不能使用一个单行命名空间方式特化一个函数的bug

    warning: specialization of ‘template<class _Iterator> struct std::iterator_traits’ in differen ...

  8. linux下使用clamav排查病毒

    clamav wget http://www.clamav.net/downloads/production/clamav-0.102.0.tar.gz ### Installyum -y insta ...

  9. python windows下安装pip及rarfile

    python之所以被广泛使用,倒不见得是本身语法简单,而是而nodejs/javascript一样把三方库的依赖管理简化了,而不用和java一样非得通过maven管理,而且还得打包后在classpat ...

  10. leetcode No.500 键盘行 keyboard-row (Python3实现)

    题目描述 给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词.键盘如下图所示. 示例: 输入: ["Hello", "Alaska", " ...