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
相关推荐
怪力左手10 分钟前
kafka部署
分布式·kafka
欧亚学术36 分钟前
计算机网络领域所有CCF-A/B/C类期刊汇总!
大数据·计算机网络·计算机·论文·sci·期刊·发表
江瀚视野1 小时前
虎扑正式易主,迅雷完成收购会带来什么变化?
大数据·区块链
QYR_112 小时前
宠物车载安全座椅市场报告:解读行业趋势与投资前景
大数据·人工智能
Leo.yuan2 小时前
实时数据仓库是什么?数据仓库设计怎么做?
大数据·数据库·数据仓库·数据分析·spark
predisw2 小时前
Kafka broker 写消息的过程
分布式·kafka
@BreCaspian2 小时前
Git 推送失败解决教程——error: failed to push some refs to
大数据·git·elasticsearch
找不到、了4 小时前
深入学习RabbitMQ队列的知识
分布式·rabbitmq
showmethetime4 小时前
RabbitMQ实用技巧
分布式·rabbitmq·ruby
郭泽元5 小时前
递归树形菜单:优雅处理层级数据的利器
大数据