虚拟机有个小问题需要解决
(2025.03.21之前复制的有这个问题,在21号之后复制的我已经在虚拟机文件上解决了这个问题)
打开虚拟机后默认登陆的用户为”feng”,但是hadoop,spark,scala等各种东西都安装在hadoop用户下,所以直接使用命令start-all.sh会发现报错找不到命令,feng用户是创建系统的时候搞的默认用户,现在用不到它了可以把他删除掉。
打开虚拟机后会自动登陆到feng用户,先点击右上角的按钮,选择登出,然后切换成hadoop用户(所有有密码的东西密码都是123456)


进入hadoop用户后,打开终端输入以下命令:sudo user -r feng
来删除用户feng,密码是123456

正式开始本次的教程
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电脑的防火墙设置)



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


2.其它项目(spark,scala)使用方法
略
(烙铁,spark命令行和scala代码怎么写都可以问AI的)
3.如何将scala代码打包成jar包
此教程的主要目的来了,由于真的在终端中敲代码的话,比较麻烦(用vim写代码的都是大哥),所以我们在拥有可视化页面的IDEA中进行代码编写和打包(因为IDEA中有插件能很好的创建scala项目和编写scala代码) 关于如何创建scala项目,可以先去看我的另一篇博客(安装并编写scala代码(在windows中)),这里不再说一遍了。
不同之处
当看完另一篇教程后,你应该已经会创建scala项目了,此时我们再创建一个新的scala项目,创建的时候不再选择使用IntelliJ来构建系统,因为我们要打包,所以要使用sbt来构建项目,以便后续能直接在IDEA中使用sbt打包。

构建系统选择sbt,Scala版本选择2.13.11(和虚拟机中的Spark版本兼容性好,同时虚拟机中用的scala版本也是这个)
等待项目构建完成之后,会在左侧项目文件管理栏中有一个”build.bat”文件,它管理着项目的一些配置,我们更改它为下图中这样:

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"
)
)
然后点击悬浮的小按钮重新构建项目。

重新构建完成后就可以进行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()
}
}

代码文件要在上图指示的这个目录下
然后点击启动左下角的sbt工具的sbt shell,输入指令package进行打包。

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

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 文件的路径。

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

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

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

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