通过scala语言基于local编写spark的Wordcount

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext} object WordCount {
def main(args: Array[String]): Unit = { // Spark配置文件对象
val conf: SparkConf = new SparkConf() // 设置Spark程序的名字
conf.setAppName("WordCount") // 设置运行模式为local模式 即在idea本地运行
// local : 一个并行度
// local[2] : 两个并行度
// local[*] : 有多少用多少
conf.setMaster("local") // Spark的上下文环境,相当于Spark的入口
val sc: SparkContext = new SparkContext(conf) // 词频统计
// 1、读取文件
/**
* RDD : 弹性分布式数据集(可以先当成scala中的集合去使用)
*/
val linesRDD: RDD[String] = sc.textFile("scala/data/words.txt") // 2、将每一行的单词切分出来
// flatMap: 在Spark中称为 算子
// 算子一般情况下都会返回另外一个新的RDD
val wordsRDD: RDD[String] = linesRDD.flatMap(kv=>kv.split(",")) // 3、按照单词分组
val groupRDD: RDD[(String, Iterable[String])] = wordsRDD.groupBy(kv=>kv) // 4、统计每个单词的数量
val countRDD: RDD[String] = groupRDD.map(kv => {
val key: String = kv._1
val values: Iterable[String] = kv._2 // words.size直接获取迭代器的大小
// 因为相同分组的所有的单词都会到迭代器中
// 所以迭代器的大小就是单词的数量
val size: Int = values.size
key + "," + size
}) countRDD.saveAsTextFile("spark/data/wordcount.txt") } }



会报这个错

解决方案:

新建一个文件夹,放入这个文件



配置环境变量

需要导入的依赖

<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.4.5</version>
</dependency> <dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.11.12</version>
</dependency> <dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-compiler</artifactId>
<version>2.11.12</version>
</dependency> <dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-reflect</artifactId>
<version>2.11.12</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
</dependency> </dependencies> <build>
<plugins>
<!-- Java Compiler -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin> <!-- Scala Compiler -->
<plugin>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<version>2.15.2</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin> </plugins>
</build>

基于yarn去调度WordCount


import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.{FileSystem, Path}
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext} /**
* 1、去除setMaster("local")
* 2、修改文件的输入输出路径(因为提交到集群默认是从HDFS获取数据,需要改成HDFS中的路径)
* 3、在HDFS中创建目录
* hdfs dfs -mkdir -p /spark/data/words/
* 4、将数据上传至HDFS
* hdfs dfs -put words.txt /spark/data/words/
* 5、将程序打成jar包
* 6、将jar包上传至虚拟机,然后通过spark-submit提交任务
* spark-submit --class WordCount2 --master yarn-client spark-1.0.jar
* spark-submit --class WordCount2 --master yarn-cluster spark-1.0.jar
*/
object WordCount2 {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("WordCount2")
val sc: SparkContext = new SparkContext(conf) val linesRDD: RDD[String] = sc.textFile("/spark/data/words")
val wordsRDD: RDD[String] = linesRDD.flatMap(s=>s.split(","))
val groupRDD: RDD[(String, Iterable[String])] = wordsRDD.groupBy(s=>s)
val resRDD: RDD[String] = groupRDD.map(kv => {
kv._1 + "," + kv._2.size }) // 使用HDFS的JAVA API判断输出路径是否已经存在,存在即删除
val conff: Configuration = new Configuration()
// core-site.xml
conff.set("fs.defaultFS", "hdfs://master:9000")
val sys = FileSystem.get(conff) if (sys.exists(new Path("/spark/data/wordcount"))){
sys.delete(new Path("/spark/data/wordcount"),true)
} resRDD.saveAsTextFile("/spark/data/wordcount") } }

打成jar包去运行

默认会有两个分区Task



可以通过sc.textFile(Path,分区个数)

on yarn的两种模式

yarn client模式:driverzai当前提交任务的节点上,可以打印任务运行的日志信息,而

yarn cluster模式:driver在AppMaster所有节点上,分布式分配,不能再提交任务的本机打印日志信息

Spark中的Wordcount的更多相关文章

  1. 006 Spark中的wordcount以及TopK的程序编写

    1.启动 启动HDFS 启动spark的local模式./spark-shell 2.知识点 textFile: def textFile( path: String, minPartitions: ...

  2. Spark中的wordCount程序实现

    import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaPairRDD; import org.apache.s ...

  3. spark 中的RDD编程 -以下基于Java api

    1.RDD介绍:     RDD,弹性分布式数据集,即分布式的元素集合.在spark中,对所有数据的操作不外乎是创建RDD.转化已有的RDD以及调用RDD操作进行求值.在这一切的背后,Spark会自动 ...

  4. 大话Spark(3)-一图深入理解WordCount程序在Spark中的执行过程

    本文以WordCount为例, 画图说明spark程序的执行过程 WordCount就是统计一段数据中每个单词出现的次数, 例如hello spark hello you 这段文本中hello出现2次 ...

  5. Spark初步 从wordcount开始

    Spark初步-从wordcount开始 spark中自带的example,有一个wordcount例子,我们逐步分析wordcount代码,开始我们的spark之旅. 准备工作 把README.md ...

  6. 【Spark篇】---Spark中Shuffle机制,SparkShuffle和SortShuffle

    一.前述 Spark中Shuffle的机制可以分为HashShuffle,SortShuffle. SparkShuffle概念 reduceByKey会将上一个RDD中的每一个key对应的所有val ...

  7. intellij-idea打包Scala代码在spark中运行

    .创建好Maven项目之后(记得添加Scala框架到该项目),修改pom.xml文件,添加如下内容: <properties> <spark.version></spar ...

  8. spark中的RDD以及DAG

    今天,我们就先聊一下spark中的DAG以及RDD的相关的内容 1.DAG:有向无环图:有方向,无闭环,代表着数据的流向,这个DAG的边界则是Action方法的执行 2.如何将DAG切分stage,s ...

  9. Tachyon在Spark中的作用(Tachyon: Reliable, Memory Speed Storage for Cluster Computing Frameworks 论文阅读翻译)

    摘要:         Tachyon是一种分布式文件系统,能够借助集群计算框架使得数据以内存的速度进行共享.当今的缓存技术优化了read过程,可是,write过程由于须要容错机制,就须要通过网络或者 ...

随机推荐

  1. Java中的wait方法 简单介绍。

    一 wait方法怎么用? package com.aaa.threaddemo; /* * 多线程中的wait方法? public final void wait() throws Interrupt ...

  2. 从服务之间的调用来看 我们为什么需要Dapr

    Dapr 相关的文章我已经写了20多篇了[1] . 当向其他人推荐Dapr 的时候,需要回答的一个问题就是: Dapr 似乎并不是特别令人印象深刻.它提供了一组"构建块",解决了与 ...

  3. [ACM]Link-Cut Tree实现动态树初探

    动态树问题是指的一类问题,而不是具体指的某一种数据结构.它主要维护一个包含若干有根树的森林,实现对森林的修改和查询等. 实现动态树的数据结构据说主要有4种,Link-Cut Tree是其中的一种.Li ...

  4. 线程池与Callable接口

    定义: 一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源. 使用方法 public void lockDemo() throws Inter ...

  5. Linux 打包压缩、软链接、硬链接、配置镜像源

    tar命令:tar -cvf 打包文件.tar  被打包文件的路径   把文件打包成tar包,但并未被压缩: [root@Server-n93yom test]# ll total 0 -rw-r-- ...

  6. jdk1.5新特性之-------静态导入

    import java.util.ArrayList; import java.util.Collections; /* jdk1.5新特性之-------静态导入 静态导入的作用: 简化书写. 静态 ...

  7. Centos8安装virtualbox

    一.执行以下命令并启用 VirtualBox 和 EPEL 包仓库 dnf config-manager --add-repo=https://download.virtualbox.org/virt ...

  8. centos安装MySQL问题

    使用sudo yum install mysql-server出现没有可用软件包 mysql-server. 先 执行 wget http://repo.mysql.com/mysql-communi ...

  9. 基于XC7A100T的PCIe千兆电口以太网收发卡

    一.板卡概述 本板卡采用Xilinx公司的Artix7系列的XC7A100T-2FGG484 芯片作为主处理器.包含双路千兆电口网络,双组DDR,PCIeX1 V1.1接口,板卡设计满足工业级要求. ...

  10. [源码解析] NVIDIA HugeCTR,GPU版本参数服务器---(3)

    [源码解析] NVIDIA HugeCTR,GPU版本参数服务器---(3) 目录 [源码解析] NVIDIA HugeCTR,GPU版本参数服务器---(3) 0x00 摘要 0x01 回顾 0x0 ...