跳到主要内容

虚拟机使用操作(以及如何使用sbt工具打jar包)

目录

    虚拟机有个小问题需要解决

    (2025.03.21之前复制的有这个问题,在21号之后复制的我已经在虚拟机文件上解决了这个问题)

    打开虚拟机后默认登陆的用户为”feng”,但是hadoop,spark,scala等各种东西都安装在hadoop用户下,所以直接使用命令start-all.sh会发现报错找不到命令,feng用户是创建系统的时候搞的默认用户,现在用不到它了可以把他删除掉。

    打开虚拟机后会自动登陆到feng用户,先点击右上角的按钮,选择登出,然后切换成hadoop用户(所有有密码的东西密码都是123456)

    图片占位符 1

    图片占位符 2

    进入hadoop用户后,打开终端输入以下命令:sudo user -r feng

    来删除用户feng,密码是123456

    图片占位符 3


    正式开始本次的教程

    1.hadoop的使用

    我已经将hadoop相关环境变量全部配置好了,所以hadoop相关的指令都可以直接使用:

    start-dfs.sh    # 开启hdfs服务
    start-yarn.sh   # 开启yarn服务
    start-all.sh    # 开启全部hadoop服务
    stop-all.sh     # 关闭全部hadoop服务

    (其它的命令也同样可以直接使用,这里不再赘述)

    hadoop的相关服务是拥有web可视化页面的,先使用命令:ifconfig 来查看自己本机的IP地址,然后在浏览器中输入 本机IP:9870,本机IP:8088,可分别进入到hdfs和YARN的管理页面。(如下图)

    (hadoop的相关服务启动后才能进入这些页面,在虚拟机或者windows主机的浏览器都可以打开,如果不能打开请检查自己windows电脑的防火墙设置)

    图片占位符 4

    图片占位符 5

    图片占位符 6

    HDFS文件管理页面

    HDFS的文件管理页面是我们常用的,所以说一下怎么进这个页面,在dfs管理页面中(IP:9870)点击上方菜单栏的Utilities然后选择第一个选项就进入HDFS文件管理页面了。

    图片占位符 7

    图片占位符 8

    2.其它项目(spark,scala)使用方法

    (烙铁,spark命令行和scala代码怎么写都可以问AI的)

    3.如何将scala代码打包成jar包

    此教程的主要目的来了,由于真的在终端中敲代码的话,比较麻烦(用vim写代码的都是大哥),所以我们在拥有可视化页面的IDEA中进行代码编写和打包(因为IDEA中有插件能很好的创建scala项目和编写scala代码) 关于如何创建scala项目,可以先去看我的另一篇博客(安装并编写scala代码(在windows中)),这里不再说一遍了。

    不同之处

    当看完另一篇教程后,你应该已经会创建scala项目了,此时我们再创建一个新的scala项目,创建的时候不再选择使用IntelliJ来构建系统,因为我们要打包,所以要使用sbt来构建项目,以便后续能直接在IDEA中使用sbt打包。

    图片占位符 9

    构建系统选择sbt,Scala版本选择2.13.11(和虚拟机中的Spark版本兼容性好,同时虚拟机中用的scala版本也是这个)

    等待项目构建完成之后,会在左侧项目文件管理栏中有一个”build.bat”文件,它管理着项目的一些配置,我们更改它为下图中这样:

    图片占位符 10

    ThisBuild / version := "0.1.0-SNAPSHOT"
    
    ThisBuild / scalaVersion := "2.13.11"
    
    lazy val root = (project in file("."))
      .settings(
        name := "sbt_demo",
        libraryDependencies ++= Seq(
          "org.apache.spark" %% "spark-core" % "3.4.4", // 根据你的 Spark 版本选择合适的依赖
          "org.apache.spark" %% "spark-sql" % "3.4.4"
        )
      )

    然后点击悬浮的小按钮重新构建项目。

    图片占位符 11

    重新构建完成后就可以进行scala代码的编写

    问AI代码怎么写,别问我。

    下面是AI写的代码:

    import org.apache.spark.sql.SparkSession
    
    object HDFSLineCount {
      def main(args: Array[String]): Unit = {
        // 创建 SparkSession
        val spark = SparkSession.builder
          .appName("HDFS Line Count")
          .getOrCreate()
    
        // 读取 HDFS 文件
        val filePath = "/user/hadoop/test.txt"
        val lines = spark.read.textFile(filePath)
    
        // 统计行数
        val lineCount = lines.count()
        println(s"test.txt文件的行数是: $lineCount") // 这行代码将结果输出到控制台
    
        // 停止 SparkSession
        spark.stop()
      }
    }

    图片占位符 12

    代码文件要在上图指示的这个目录下

    然后点击启动左下角的sbt工具的sbt shell,输入指令package进行打包。

    图片占位符 13

    打包出来的jar包在target/scala2.13文件目录下。

    图片占位符 14

    4.使用spark运行jar包

    将jar包导入到虚拟机中(放在哪个目录都可以,只要自己能够找到就行)

    然后启动hadoop,因为要sparky运行依托于hadoop的YARN服务。

    然后执行下面的命令进行运行

    可以在打开hadoop服务后直接先运行这串指令试试,因为我已经在虚拟机中放了一个jar包。

    spark-submit \
    --class HDFSLineCount \
    --master yarn \
    --deploy-mode cluster \
    --name "HDFS Line Count Application" \
    --num-executors 3 \
    --executor-memory 2g \
    --executor-cores 2 \
    /home/hadoop/sbt_demo_2.13-0.1.0-SNAPSHOT.jar

    参数说明

    • --class HDFSLineCount:指定包含 main 方法的类名,即 HDFSLineCount
    • --master yarn:指定使用 YARN 作为资源管理器。
    • --deploy-mode cluster:指定驱动程序在集群中运行(而不是在提交命令的机器上运行)。
    • --name "HDFS Line Count Application":为应用程序指定一个名称,便于在 YARN 界面中识别。
    • --num-executors 3:指定分配 3 个执行器。
    • --executor-memory 2g:为每个执行器分配 2GB 内存。
    • --executor-cores 2:为每个执行器分配 2 个 CPU 核心。
    • /home/hadoop/sbt_demo_2.13-0.1.0-SNAPSHOT.jar:指定 JAR 文件的路径。

    图片占位符 15

    执行命令后的结果,程序的输出结果并不会在终端中显示,而是在YARN管理的日志中显示。

    打开浏览器输入 IP:8088 进入YARN管理页面,然后选择你刚刚运行的jar的应用ID号(在终端中输入显示的有),以本程序为例程序ID为:application_1742486156184_0002,注意,每一次程序运行后产生的程序ID号都不同(但其实也没必要太注意,因为这里的日志是缓存,会被自动清理掉,每次运行完程序可能这里就只有一两个日志)

    点击进入刚刚运行的jar包的程序运行信息中

    图片占位符 16

    然后滑到页面最下方,找到日志(logs)点击进入

    图片占位符 17

    最后点击日志中的输出文件(stdout(标准输出))

    图片占位符 18

    可以看到程序的运行输出结果

    图片占位符 19