编写Spark独立应用程序

news2024/9/21 4:39:18

执行本文之前,先搭建好spark的开发环境,我目前只搭建了standalone模式,参考链接 : Spark Standalone模式部署-CSDN博客

1. 安装sbt

1)下载sbt

        网址:https://www.scala-sbt.org/download.html ,下载sbt-1.8.3.tgz。

2)将下载好的安装包拷贝到共享文件夹,

        cd /mnt/hgfs/Ubuntu_share

3)解压到/usr/local

        sudo tar -zxvf  sbt-1.8.3.tgz -C /usr/local

4)修改权限

        sudo chown -R wang:wang /usr/local/sbt

5)将bin目录下的sbt-launch.jar复制到sbt的安装目录下

        cd /usr/local/sbt

        sudo cp ./bin/sbt-launch.jar ./

6) 创建脚本/usr/local/sbt/sbt,添加如下内容:

        sudo vim /usr/local/sbt/sbt

#!/bin/bash
SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"

7) 修改权限

        sudo chmod u+x /usr/local/sbt/sbt

8) 检验 sbt 是否可用

        sudo ./sbt sbtVersion

出现如下画面,则sbt安装成功。

2. 编写scala应用程序

1)创建应用程序根目录

        mkdir ~/sparkcode
        cd ~/sparkcode/
        mkdir -p ./src/main/scala

2)新建测试程序
        cd src/main/scala/
        vim SimpleApp.scala

输入如下内容,该程序计算 testspark.txt 文件中包含 "a" 的行数 和包含 "b" 的行数。

/* SimpleApp.scala */
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
object SimpleApp {
    def main(args: Array[String]) {
        val logFile = "file:///usr/local/testspark.txt" // Should be some file on your system
        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("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
    }
}

3. 使用 sbt 打包 Scala 程序

1)新建文件simple.sbt

        vim ~/sparkcode/simple.sbt

2)添加内容如下

name := "Simple Project"
version := "1.0"
scalaVersion := "2.12.17"
libraryDependencies += "org.apache.spark" %% "spark-core" % "3.3.0"

3)将整个应用程序打包成 JAR:

        sudo /usr/local/sbt/sbt package

出现如下内容,打包成功。

jar包路径:~/sparkcode/target/scala-2.12/simple-project_2.12-1.0.jar  

4)通过 spark-submit 运行程序

/usr/local/spark-3.3.0-bin-hadoop3/bin/spark-submit --class "SimpleApp" ~/sparkcode/target/scala-2.12/simple-project_2.12-1.0.jar
/usr/local/spark-3.3.0-bin-hadoop3/bin/spark-submit --class "SimpleApp" ~/sparkcode/target/scala-2.12/simple-project_2.12-1.0.jar 2>&1 | grep "Lines with a:"

第二条可以过滤信息,最终得到结果:      ​​​​​

5)在浏览器中可查看运行状态

我运行了多次,故出现了很多个SimpleApp。

4. 遇到的问题

执行/usr/local/spark-3.3.0-bin-hadoop3/bin/spark-submit --class "SimpleApp" ~/sparkcode/target/scala-2.12/simple-project_2.12-1.0.jar

第一次执行成功了,在执行报了一堆错误,筛选了一下,主要是如下错误

Job aborted due to stage failure: Task 1 in stage 0.0 failed 4 times, most recent failure: Lost task 1.3 in stage 0.0 (TID 7) (192.168.50.40 executor 0): java.io.FileNotFoundException: File file:/usr/local/testspark.txt does not exist
这个文件在master中是存在的,192.168.50.40是slave1的地址,猜想应该是slave1缺少该文件,遂在slave1新建/usr/local/testspark.txt。

再次执行,错误变成下面

ResultStage 0 (count at SimpleApp.scala:11) failed in 3.144 s due to Job aborted due to stage failure: Task 1 in stage 0.0 failed 4 times, most recent failure: Lost task 1.3 in stage 0.0 (TID 4) (192.168.50.40 executor 0): java.io.EOFException: Cannot seek after EOF

百度查到应该是master和slave1的testspark.txt数据不一致引起的,于是将master的testspark.txt发送到slave1,再执行,成功。

以上问题虽然解决,但感觉这样必须所有节点都保存一份testsparl.txt,不应该是这么处理。参考文章spark读取不了本地文件_spark 无法读取读取本地文件-CSDN博客,决定将该文件上传到hdfs中

文章地址:上传文件到HDFS-CSDN博客

上传成功后更改SimpleApp.scala中的内容如下,

再次按上文流程,打包运行程序,成功。

文章参考:Spark安装和使用_厦大数据库实验室博客 (xmu.edu.cn)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1611931.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

# Win10 打不开【本地组策略编辑器】解决方案

Win10 打不开【本地组策略编辑器】解决方案 段子手168 问题描述: 当在 WIN R 打开【运行】输入:gpedit.msc 打开【本地组策略编辑器】时,出现错误时, 或者在【计算机管理】中 没有【本地用户和组】这一项。 可以试一下以下方…

8.MMD ray渲染主流常用插件介绍

导入一个场景,做好基础操作 导入控制器、天空盒、材质 1. AutoLuminous4 自发光的插件 ![[Pasted image 20240421103420.png]] 拖进去以后可以让场景中的自发光材质发光 也可以让不发光的材质强行发光 打开MME,找到AL_EmitterRT 展开场景&#x…

解线性方程组——直接解法:LU分解、PLU分解(类似列主元消去法) | 北太天元

L: lower triangular 下三角 U: upper triangular 上三角 LU 分解,顾名思义,为 把一个 矩阵 分成 一个下三角矩阵 乘上一个上三角矩阵的形式。 Example 为什么可以这样 几个基本的初等行变换,可以自己验算一下,等式的左边与右边…

spring高级篇(二)

1、Aware和InitializingBean Aware和InitializingBean都与Bean的生命周期管理相关。 Aware接口: 概念: Aware接口是Spring框架中的一个标记接口,它表示一个类能够感知到(aware of)Spring容器的存在及其特定的环境。Spring框架提供了多个Awar…

一周学会Django5 Python Web开发-Django5模型数据修改

锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计47条视频,包括:2024版 Django5 Python we…

小图标还不会设计!

ICON图标设计 hello,我是小索奇 image-20230805225451447 你有好奇过这样的图标如何设计的吗? 其实非常简单,仅需要一行代码即可完成,本篇文章就带伙伴们使用,每天看一篇,简单易懂,日久技长~…

5 款免费数据恢复工具,用于恢复误删数据

数据恢复工具是通过组装幸存的片段、从剩余的片段重建或使用备份来重新获得对因存储损坏、人为错误或意外中断而丢失的文件的访问权限的行为。它是将丢失、损坏、意外擦除或以其他方式无法访问的数据恢复到服务器、计算机、手机或存储设备的过程。 在大多数情况下,数…

kaggle 泰坦尼克使用xgboost 得分0.73684

流程 导入所要使用的包引入kaggle的数据集csv文件查看数据集有无空值填充这些空值提取特征分离训练集和测试集调用模型 导入需要的包 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import warnings warnings.filterwarni…

人人都能玩赚数字人操作员 数字人直播搭建/多路开播/选品技巧/0-1开播流程

课程目录 01 数字人工业化直播车间打造 02 数字人直播规则及防封技巧 03 数字人直播间搭建步骤流程 04 数字人直播行业应用盘点 05 数字人直播多平台多路开播 06 数字人高成交循环话术运营 07 数字人直播选品及组品技I5 08 数字人直播0-1流程 09 工业化直播0-1流程 网…

Axure中的样式

样式 首先说一下Axure里面的原点位置 如下图: 还有一个办法是我们选中我们的按钮,如上图,然后打开右边的样式,可以看按钮的x,y属性,类似于游戏中unity软件的x,y属性,类似于html中…

【JVM系列】关于静态块、静态属性、构造块、构造方法的执行顺序

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

数字时代的智慧演奏

数字化时代,工业不再是孤独的机器运转,而是演绎着一场智能与数据的华丽交响。无数智能节点的联动,数据的涌动,成为工业的新活力,同时也是创新的源泉。 工业互联网将每个机器、设备连接在一起,打破了原本独立…

【数据结构练习题】堆——top-k问题

♥♥♥♥♥个人主页♥♥♥♥♥ ♥♥♥♥♥数据结构练习题总结专栏♥♥♥♥♥ ♥♥♥♥♥上一章:【数据结构练习题】二叉树(1)——1.相同的树2.另一颗树的子树3.翻转二叉树4.平衡二叉树5.对称二叉树♥♥♥♥♥ 文章目录 1.top-k问题1.1问题描述1.2思路分析1.3绘图分析…

simulink中怎么使用solve函数?

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

Sulley入门教学——简介、安装(Win7、VMware)

1、简介 Sulley 是由 Pedram Amini 和 Aaron Portnoy 开发的开源工具。它以 Python 编写,可以轻松地在不同平台上部署和使用。Sulley 提供了一个灵活且功能强大的框架,允许用户定义协议消息的结构、字段类型、边界条件和模糊测试策略。用户可以使用 Sul…

第三方应用类---Phpmyadmin 后台 Getshell 操作

免责声明:本节仅做技术交流学习. 目录 什么是Phpmyadmin? getshell前提条件: 详细步骤: 1-搜集到开放phpmyadmin的web,然后访问进去 2-执行SQL命令查看是否开启了读写权限 3-开启了读写权限-->继续 没有开读写权限--->鸡鸡 4-有读写权限之后,执行SQL语句导出文件…

解析 IP(IPv4)地址

IPv 4 地址 一、组成二、IPv4 的分类三、子网掩码四、特殊的地址五、私有 IP 地址六、全局 IP 地址七、私有 IP 地址和全局 IP 地址的关系八、广播地址九、网络地址十、IP 地址个数计算十一、查看电脑的 IP 地址(window)十二、手动设置电脑的 IP 地址 为…

第二篇:阿里为什么要禁用Java内置线程池?自定义线程池参数如何设置?

线程池基本概念不清楚的请移步:第一篇:Java中的线程池介绍(阿里为什么要禁用Java内置线程池?自定义线程池参数如何设置?)-CSDN博客 Java中为我们提供了内置线程池,为什么阿里却要严令禁止使用呢…

Python 数据结构和算法实用指南(一)

原文:zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d 译者:飞龙 协议:CC BY-NC-SA 4.0 前言 数据结构和算法是信息技术和计算机科学工程学习中最重要的核心学科之一。本书旨在提供数据结构和算法的深入知识,以及编程…

kkFileView 任意文件上传致远程代码执行漏洞复现(QVD-2024-14703)

0x01 产品简介 kkFileView 是使用 spring boot 搭建的文件文档在线预览解决方案,支持主流办公文档的在线预览。 0x02 漏洞概述 2024年4月,互联网上披露kkFileView远程代码执行漏洞情报,攻击者可利用该漏洞上传恶意文件,获取操作系统权限。该漏洞利用简单,建议受影响的客…