Spark读取文件系统的数据(sbt打包测试)-入门级别Demo

学习目标

通过本关卡练习,您将学到:

  • 如何使用Spark访问本地文件和HDFS文件
  • Spark应用程序的编写、编译和运行方法

相关知识

操作系统:Ubuntu 16.04;

Spark版本:2.4.0;

Hadoop版本:3.1.3。

编程要求

任务一

  • spark-shell中读取Linux系统本地文件/data/workspace/data_set/test.txt,然后统计出文件的行数。Spark默认安装在/usr/local/spark目录下。

    cd /usr/local/spark
    ./bin/spark-shell
    val textFile=sc.textFile("file:data/workspace/data_set/test.txt")
    textFile.count()

可以通过:quit退出spark-shell

任务二

  • 为hadoop用户在HDFS中创建用户目录/user/hadoop

    cd /usr/local/hadoop
    ./bin/hdfs dfs -mkdir -p /user/hadoop

  • 将Linux系统本地的/data/workspace/data_set/testHdfs.txt文件上传到HDFS的目录/user/hadoop

    cd /usr/local/hadoop
    ./bin/hdfs dfs -put /data/workspace/data_set/testHdfs.txt

  • 先用如下命令进入spark-shell

    cd /usr/local/spark && ./bin/spark-shell

再在spark-shell中读取HDFS系统文件/user/hadoop/testHdfs.txt,然后,统计出文件的行数

复制代码
val textFile=sc.textFile("hdfs://localhost:9000/user/hadoop/testHdfs.txt")
textFile.count()

退出spark-shell

复制代码
:quit

任务三

安装scala程序的构建工具sbt,可以到官网下载sbt安装文件sbt-1.3.8.tgz,也可直接使用已经下载好的安装文件/opt/sbt-1.3.8.tgz

  • 使用如下命令,将sbt安装到/usr/local/sbt目录下:

    sudo tar -zxf /opt/sbt-1.3.8.tgz -C /usr/local && sudo chown -R hadoop /usr/local/sbt

  • 配置环境变量,用vim编辑文件~/.bashrc,命令如下:

    vim ~/.bashrc

在末尾追加如下内容:

复制代码
export SBT_HOME=/usr/local/sbt
export PATH=$PATH:$SBT_HOME/bin

保存退出之后,执行如下命令,使设置环境变量生效:

复制代码
source ~/.bashrc

可以使用如下命令查看sbt版本信息:

复制代码
cd ~ && sbt sbtVersion

配置sbt:

用vim创建文件/usr/local/sbt/conf/repositories

复制代码
vim /usr/local/sbt/conf/repositories

内容如下:

复制代码
[repositories]
local
local-preloaded-ivy: file:///${sbt.preloaded-${sbt.global.base> -${user.home}/.sbt}/preloaded/}, [organization]/[module]/[revi sion]/[type]s/[artifact](-[classifier]).[ext]
local-preloaded: file:///${sbt.preloaded-${sbt.global.base-${user.home}/.sbt}/preloaded/}

maven-central: http://nexus3.plugins.svc/repository/maven-public/
sbt-plugin-repo: http://nexus3.plugins.svc/repository/maven-public/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly

修改sbt配置文件/usr/local/sbt/conf/sbtopts,命令如下

复制代码
vim /usr/local/sbt/conf/sbtopts

在末尾增加如下内容:

复制代码
-Dsbt.override.build.repos=true
-Dsbt.repository.config=/usr/local/sbt/conf/repositories

任务四

编写独立应用程序(使用Scala语言),读取HDFS系统文件/user/hadoop/testHdfs.txt,然后,统计出文件的行数;通过sbt工具将整个应用程序编译打包成 JAR包,并将生成的JAR包通过 spark-submit 提交到 Spark 中运行命令。

  1. 使用hadoop用户名登录Linux系统,打开一个终端,在Linux终端中,执行如下命令创建一个文件夹sparkapp作为应用程序根目录:

    cd ~ # 进入用户主文件夹
    mkdir ./sparkapp # 创建应用程序根目录
    mkdir -p ./sparkapp/src/main/scala # 创建所需的文件夹结构

2.下面使用vim编辑器在~/sparkapp/src/main/scala下建立一个名为SimpleApp.scalaScala代码文件,命令如下:

代码文件SimpleApp.scala内容如下:

复制代码
/* 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 = "hdfs://localhost:9000/user/hadoop/testHdfs.txt"
        val conf = new SparkConf().setAppName("Simple Application")
        val sc = new SparkContext(conf)
        val logData = sc.textFile(logFile, 2)
        val num = logData.count()
        println("The num of this file is %d".format(num))
    }
}

任务五

  • 完成代码编辑后,使用sbtScala 程序进行编译打包。
    SimpleApp.scala程序依赖于Spark API,因此,需要通过sbt进行编译打包以后才能运行。 首先,需要使用vim编辑器在~/sparkapp目录下新建文件simple.sbt,命令如下:

    vim ~/sparkapp/simple.sbt

simple.sbt文件内容如下:

复制代码
name := "Simple Project"
version := "1.0"
scalaVersion := "2.11.12"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.0"
  • 为了保证sbt能够正常运行,先执行如下命令检查整个应用程序的文件结构:

    cd ~/sparkapp
    find .

文件结构应该是类似如下所示的内容:

复制代码
.
./src
./src/main
./src/main/scala
./src/main/scala/SimpleApp.scala
./simple.sbt

接下来,通过如下代码将整个应用程序打包成 JAR:

复制代码
cd ~/sparkapp  #一定把这个目录设置为当前目录
sbt package

生成的JAR包的位置为~/sparkapp/target/scala-2.11/simple-project_2.11-1.0.jar

对于前面sbt打包得到的应用程序JAR包,可以通过spark-submit提交到Spark中运行,命令如下:

复制代码
/usr/local/spark/bin/spark-submit --class "SimpleApp" ~/sparkapp/target/scala-2.11/simple-project_2.11-1.0.jar
相关推荐
LaughingZhu16 分钟前
Product Hunt 每日热榜 | 2026-02-08
大数据·人工智能·经验分享·搜索引擎·产品运营
玄同7651 小时前
Git常用命令指南
大数据·git·elasticsearch·gitee·github·团队开发·远程工作
瑞华丽PLM2 小时前
电子行业国产PLM系统功能差异化对比表
大数据·plm·国产plm·瑞华丽plm·瑞华丽
深圳市恒星物联科技有限公司3 小时前
水质流量监测仪:复合指标监测的管网智能感知设备
大数据·网络·人工智能
是做服装的同学4 小时前
如何选择适合的服装企业ERP系统才能提升业务效率?
大数据·经验分享·其他
藦卡机器人5 小时前
国产机械臂做的比较好的品牌有哪些?
大数据·数据库·人工智能
代码改善世界5 小时前
CANN深度解构:中国AI系统软件的原创性突破与架构创新
大数据·人工智能·架构
java-yi6 小时前
Elasticsearch(ES)核心用法与实战技巧分享
大数据·elasticsearch·搜索引擎
程序猿阿伟6 小时前
《分布式追踪Span-业务标识融合:端到端业务可观测手册》
分布式