首页 > 其他分享 >假期学习记录08

假期学习记录08

时间:2024-01-22 17:34:32浏览次数:25  
标签:src sbt scala 假期 08 记录 atguigu spark local

  本次学习学习了spark的安装和使用方法

运行代码

Spark shell本身就是一个Driver,里面包含main方法

进入shell界面

./bin/spark-shell -- master<master-url>

<master-url>:

local 使用一个CPU本地去运行SPARK:完全不并行 不加参数默认该模式

local[*] 使用逻辑CPU个数量的线程去本地SPRAK

local[K] 使用K个CPU的数量的线程去本地SPRAK

还有在集群上进行运行:...

退出: :quit

编写Spark独立应用程序

对于Scala编写的程序采用sbt/maven都可以进行打包

进行安装下载sbt:安装了大约3个小时吧,一开始报错找不到stat,换版本加载慢,最后换阿里源进行解决

启动:

./sbt sbtVersion

示例:

[atguigu@hadoop102 mycode]$ cd ~
[atguigu@hadoop102 ~]$ mkdir ./sparkapp
[atguigu@hadoop102 ~]$ mkdir -p ./sparkapp/src/main/scala
[atguigu@hadoop102 ~]$ cd ./sparkapp/src/main/scala/
[atguigu@hadoop102 scala]$ vim SimpleApp.scala

编写程序:

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

object SimpleApp {
  def main(args: Array[String]): Unit = {
    val logFile = "file:///opt/module/spark/README.md"

    val conf = new SparkConf().setAppName("Simple Application")
    val sc = new SparkContext(conf)
    val logData = sc.textFile(logFile,2).cache()
    val numAs = logData.filter(line => line.contains("a")).count()
    val numBs = logData.filter(line => line.contains("b")).count()
    println("Line with a: %s,Line with b: %s".format(numAs,numBs))

  }
}

返回到与src同级的目录下,创建simple.sbt

[atguigu@hadoop102 ~]$ cd sparkapp/
[atguigu@hadoop102 sparkapp]$ ll
总用量 0
drwxrwxr-x. 3 atguigu atguigu 18 1月  20 11:01 src
[atguigu@hadoop102 sparkapp]$ vim simple.sbt

写入内容:

name := "Simple Project"  //名称
version := "1.0"                    
scalaVersion := "2.12.15"
libraryDependencies += "org.apache.spark" %% "spark-core" % "3.2.0"

目录结构如下:

[atguigu@hadoop102 sparkapp]$ find .
.
./src
./src/main
./src/main/scala
./src/main/scala/SimpleApp.scala
./simple.sbt

进行打包:

[atguigu@hadoop102 sparkapp]$ /usr/local/sbt/sbt package

打包完成后文件存在target目录下:生成的应用程序JAR包的位置为“/home/hadoop/sparkapp/target/XXX.jar”

运行:

./bin/spark-submit 
  --class <main-class>  //需要运行的程序的主类,应用程序的入口点 (object)
  --master <master-url>  //Master URL,下面会有具体解释
  --deploy-mode <deploy-mode>   //部署模式
  ... # other options  //其他参数
  <application-jar>  //应用程序JAR包
  [application-arguments] //传递给主类的主方法的参数 

--master <master-url> 不写采用本地模式

[atguigu@hadoop102 spark]$ ./bin/spark-submit --class "SimpleApp" /home/atguigu/sparkapp/target/scala-2.12/simple-project_2.12-1.0.jar

入门示例 wordCount

进入shell界面:./bin/spark-shell

scala> val textFile = sc.textFile("file:///usr/local/spark/mycode/wordcount/word.txt")
scala> val wordCount = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)
scala> wordCount.collect()

结果:

采用的是不需要hadoop版本的spark进行操作

编写应用程序执行词频统计:

下面我们编写一个Scala应用程序来实现词频统计。
请登录Linux系统(本教程统一采用用户名hadoop进行登录),进入Shell命令提示符状态,然后,执行下面命令:

cd /usr/local/spark/mycode/wordcount/
mkdir -p src/main/scala  //这里加入-p选项,可以一起创建src目录及其子目录

Shell 命令

请在“/usr/local/spark/mycode/wordcount/src/main/scala”目录下新建一个test.scala文件,里面包含如下代码:

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

object WordCount {
    def main(args: Array[String]) {
        val inputFile =  "file:///usr/local/spark/mycode/wordcount/word.txt"
        val conf = new SparkConf().setAppName("WordCount")
        val sc = new SparkContext(conf)
                val textFile = sc.textFile(inputFile)
                val wordCount = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)
                wordCount.foreach(println)       
    }
}

如果test.scala没有调用SparkAPI,那么,只要使用scalac命令编译后执行即可。但是,这个test.scala程序依赖 Spark API,因此我们需要通过 sbt 进行编译打包

执行如下命令:

cd /usr/local/spark/mycode/wordcount/
vim simple.sbt

Shell 命令

通过上面代码,新建一个simple.sbt文件,请在该文件中输入下面代码:

name := "WordCount Project"

version := "1.0"

scalaVersion := "2.12.15"

libraryDependencies += "org.apache.spark" %% "spark-core" % "3.2.0"

注意, "org.apache.spark"后面是两个百分号,千万不要少些一个百分号%,如果少了,编译时候会报错。
下面我们使用 sbt 打包 Scala 程序。为保证 sbt 能正常运行,先执行如下命令检查整个应用程序的文件结构:

cd /usr/local/spark/mycode/wordcount/
find .

Shell 命令

应该是类似下面的文件结构:

.
./src
./src/main
./src/main/scala
./src/main/scala/test.scala
./simple.sbt
./word.txt

接着,我们就可以通过如下代码将整个应用程序打包成 JAR(首次运行同样需要下载依赖包 ):

cd /usr/local/spark/mycode/wordcount/  //请一定把这目录设置为当前目录
/usr/local/sbt/sbt package

Shell 命令

上面执行过程需要消耗几分钟时间:

生成的 jar 包的位置为

/usr/local/spark/mycode/wordcount/target/scala-2.12/wordcount-project_2.12-1.0.jar

最后,通过 spark-submit 运行程序。我们就可以将生成的 jar 包通过 spark-submit 提交到 Spark 中运行了,命令如下:

/usr/local/spark/bin/spark-submit --class "WordCount"  /usr/local/spark/mycode/wordcount/target/scala-2.12/wordcount-project_2.12-1.0.jar

结果:

 

IDEA编写Spark应用程序

。。。。

标签:src,sbt,scala,假期,08,记录,atguigu,spark,local
From: https://www.cnblogs.com/JIANGzihao0222/p/17980556

相关文章

  • 记录一次 SpringBoot 自动装配失败
    项目业务模块引入公共模块,公共模块的bean死活自动装配失败,如下图:想要自动装配bean的类型是PasswordEncoder,但是就是装配不上去仔细检查后发现本应该是2层目录的META-INF/spring成了1层名叫META-INFO.spring的目录原来resource层级下新建目录在后面加.下一层目录不像在ja......
  • 记录使用Redis当分布式锁
    在网上看到一次使用redis当分布式锁的文章,我就自己写了个demo前置条件:建议新建一个springboot工程(添加web依赖),然后自行整合mybatisplus、redis,可以参照以下链接:mybatisPlus:https://blog.csdn.net/wang20000102/article/details/132615071redis:https://blog.csdn.net/lwj_07/art......
  • Git必知必会基础(08):分支合并
    补充切换分支前一定要先将当前分支内容add、commit到本地仓库然后fetch远程仓库分支合并,有冲突就解决冲突(因为可能别人push了),然后push另外,也可能你push前和pull后这段时间别人又push了,这样就需要再次fetch合并 命令 命令作用备注git merge分支名表示用指定分支和当前分支进行合......
  • G2303、G2318期末复习习题册第五章解答(元旦假期部分)
    ......
  • 毕设全流程记录(个人向)
    选定java语言参考1:Java快速入门:https://www.cnblogs.com/happyframework/p/3332243.htmlJava后台开发的常用框架有SSM框架。选定SSM框架参考1:SSM框架理解:https://www.cnblogs.com/verlen11/p/5349747.html 参考2:使用idea2017搭建SSM框架:https://www.cnblogs.com/hackyo/p/66......
  • [MIT 6.S081] Lab: system calls
    Lab:systemcalls前言这次实验是实现内核中的两个syscall:trace和sysinfo。回顾一下第三节课,用户态的进程想要执行某个系统调用,例如exex(init,argv),首先会将init和argv的地址分别存放在a0和a1寄存器中,然后a7存放所要调用的系统调用,最后执行ecall。之后要结......
  • DC-7靶机做题记录
    靶机下载地址:链接:https://pan.baidu.com/s/1w2c_QKd_hOoR2AzNrdZjMg?pwd=tdky提取码:tdky参考:DC7靶机地址:http://www.five86.com/downloads/DC-7.zipDC7靶场介绍:https://www.vulnhub.com/entry/dc-7,356/php插件地址:https://ftp.drupal.org/files/projects/php-8.x-1.x......
  • 文心一言测评记录
    首先,我们需要明确RB-INSERT和RB-DELETE的基本操作。RB-INSERT的基本步骤如下:将新节点插入到红黑树的某个位置。重新平衡树,确保红黑树的性质仍然满足。RB-DELETE的基本步骤如下:http://sss.com。重新平衡树,确保红黑树的性质仍然满足。现在,我们考虑一个特定的场景:首先使用RB......
  • Go语言核心36讲 08 | container包中的那些容器
    我们在上次讨论了数组和切片,当我们提到数组的时候,往往会想起链表。那么Go语言的链表是什么样的呢?Go语言的链表实现在标准库的container/list代码包中。这个代码包中有两个公开的程序实体——List和Element,List实现了一个双向链表(以下简称链表),而Element则代表了链表中元素的结构......
  • 假期学习记录07
    本次学习了Spark概述,了解了Spark的一些基本概念,为更好的学习基于内存计算的分布式框架,拥有良好的性能,运行速度快,采用内存计算scala简介运行再jvm上,具有强大并发性,支持函数式编程,语法简洁,兼容java,交互式语言Spark与Hadoop比较Hadoop:磁盘io开销大,表达能力有限,延迟高,map......