学习目标
通过本关卡练习,您将学到:
- 如何使用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
中运行命令。
-
使用
hadoop
用户名登录Linux
系统,打开一个终端,在Linux
终端中,执行如下命令创建一个文件夹sparkapp
作为应用程序根目录:cd ~ # 进入用户主文件夹
mkdir ./sparkapp # 创建应用程序根目录
mkdir -p ./sparkapp/src/main/scala # 创建所需的文件夹结构
2.下面使用vim编辑器在~/sparkapp/src/main/scala
下建立一个名为SimpleApp.scala
的Scala
代码文件,命令如下:
代码文件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))
}
}
任务五
-
完成代码编辑后,使用
sbt
对Scala
程序进行编译打包。
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