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
相关推荐
weixin_307779131 小时前
基于Azure Delta Lake和Databricks的安全数据共享(Delta Sharing)
python·安全·spark·云计算·azure
zxhl09271 小时前
Kafka--常见问题
大数据·分布式·kafka
Chanson4 小时前
SparkSQL常见语法的实现原理
大数据
豪越大豪5 小时前
豪越科技:融合低空经济的消防一体化安全管控解决方案
大数据·运维·安全
Gauss松鼠会5 小时前
GaussDB构建高性能Schema:分布式数据库架构设计与实战
数据库·分布式·sql·数据库架构·gaussdb
youka1509 小时前
大数据学习栈记——HBase操作(shell & java)
大数据·学习·hbase
三块钱079411 小时前
【原创】通过S3接口将海量文件索引导入elasticsearch
大数据·elasticsearch·搜索引擎·go
观测云16 小时前
使用外部事件检测接入 CDH 大数据管理平台告警
大数据·告警
群联云防护小杜16 小时前
分布式节点池:群联云防护抗DDoS的核心武器
前端·网络·分布式·udp·npm·node.js·ddos
Faith_xzc16 小时前
存算分离是否真的有必要?从架构之争到 Doris 实战解析
大数据·数据库·数据仓库·架构·开源