Spark 读取文件系统的数据
(1)在 spark-shell 中读取 Linux 系统本地文件“/home/hadoop/test.txt”,然后统计出文 件的行数; (2)在 spark-shell 中读取 HDFS 系统文件“/user/hadoop/test.txt”(如果该文件不存在, 请先创建),然后,统计出文件的行数; (3)编写独立应用程序,读取 HDFS 系统文件“/user/hadoop/test.txt”(如果该文件不存在, 请先创建),然后,统计出文件的行数;通过 sbt 工具将整个应用程序编译打包成 JAR 包, 并将生成的 JAR 包通过 spark-submit 提交到 Spark 中运行命令。
当然,让我们逐步完成每个任务:
(1) 在 spark-shell 中读取 Linux 系统本地文件"/home/hadoop/test.txt",然后统计出文件的行数:
// 启动 spark-shell
$ spark-shell
// 读取本地文件并计算行数
val localFileRDD = sc.textFile("file:///home/hadoop/test.txt")
val lineCount = localFileRDD.count()
println(s"本地文件的行数: $lineCount")
(2) 在 spark-shell 中读取 HDFS 系统文件"/user/hadoop/test.txt",然后,统计出文件的行数:
// 读取 HDFS 文件并计算行数
val hdfsFileRDD = sc.textFile("hdfs:///user/hadoop/test.txt")
val lineCountHDFS = hdfsFileRDD.count()
println(s"HDFS 文件的行数: $lineCountHDFS")
(3) 编写独立应用程序,读取 HDFS 系统文件"/user/hadoop/test.txt",然后,统计出文件的行数;通过 sbt 工具将整个应用程序编译打包成 JAR 包,并将生成的 JAR 包通过 spark-submit 提交到 Spark 中运行命令。
首先,创建一个Scala应用程序,比如SparkFileReader.scala:
import org.apache.spark.{SparkConf, SparkContext}
object SparkFileReader {
def main(args: Array[String]): Unit = {
// 设置 Spark 配置
val conf = new SparkConf().setAppName("SparkFileReader")
val sc = new SparkContext(conf)
// 读取 HDFS 文件并计算行数
val hdfsFileRDD = sc.textFile("hdfs:///user/hadoop/test.txt")
val lineCountHDFS = hdfsFileRDD.count()
println(s"HDFS 文件的行数: $lineCountHDFS")
// 停止 Spark 上下文
sc.stop()
}
}
然后,使用 sbt 构建项目并创建一个 JAR 文件:
$ sbt package
这将在 target/scala-/ 目录下创建一个 JAR 文件。
最后,使用 spark-submit 提交 JAR 文件到 Spark:
$ spark-submit --class SparkFileReader --master <spark-master-url> target/scala-<version>/sparkfilereader_2.11-<version>.jar
将 <spark-master-url> 替换为 Spark 主节点的 URL。这将在 Spark 集群上执行你的 Spark 应用程序。
注意:确保 Spark 和 Hadoop 已正确配置,并在运行 Spark 应用程序之前在 HDFS 中准备好必要的文件。根据你的环境调整代码和配置。