实验七(用Scala编写Spark应用程序,用Java编写Spark应用程序)
一、官网下载安装Scala:scala-2.12.8.tgz
https://www.scala-lang.org/download/
tar -zxvf scala-2.12.8.tgz -C /opt/modulemv scala-2.12.8
scala测试:scala -version
启动:scala
二、官网下载安装Spark:spark-2.4.2-bin-hadoop2.7.tgzhttps://www.apache.org/dyn/closer.lua/spark/spark-2.4.2/spark-2.4.2-bin-hadoop2.7.tgz
解压、重命名启动spark
①先启动hadoop 环境start-all.sh
②启动spark环境进入到SPARK_HOME/sbin下运行start-all.sh/opt/module/spark/sbin/start-all.sh[注] 如果使用start-all.sh时候会重复启动hadoop配置,需要./在当前工作目录下执行命令jps 观察进程 多出 worker 和 mater 两个进程。查看spark的web控制页面:http://bigdata128:8080/ 显示spark的端口是7070
③启动Spark Shell此模式用于interactive programming,先进入bin文件夹后运行:spark-shellSecureCRT 下 spark-shell 下scala> 命令行无法删除,解决办法:https://blog.youkuaiyun.com/nicolewjt/article/details/87368749
④退出Spark Shellscala> :quit
三、使用Spark Shell编写代码读取本地文件
显示第一行内容
读取HDFS文件
对上述hdfs根目录下f1.txt文件进行词频统计
查看结果
四、用Scala语言编写Spark独立应用程序下载安装Scala
1、执行如下命令新建目录:
cd /usr/local/spark
mkdir mycode
cd mycode
mkdir wordcount
cd wordcount
2、在“/usr/local/spark/mycode/wordcount”目录下新建一个包含了一些语句的文本文件word.txt,命令如下:
vim word.txt
输入需要词频统计语句,退出
3、执行以下命令进入spark-shell
cd /usr/local/spark
./bin/spark-shell
....//这里省略启动过程显示的一大堆信息
scala>
4、加载本地文件
在第二个终端窗口下操作,用下面命令到达“/usr/local/spark/mycode/wordcount”目录,查看一下上面已经建好的word.txt的内容
cd /usr/local/spark/mycode/wordcount
cat word.txt
5、切换回到第一个终端,也就是spark-shell,然后输入下面命令:
scala> val textFile = sc.textFile("file:///usr/local/spark/mycode/wordcount/word.txt")
6、结果:
textFile.first()
加载HDFS中的文件
1、启动Hadoop
2、新建目录:
hdfs dfs -mkdir -p /user/hadoop
3、上传本地的word.txt到HDFS:
hdfs dfs -put /usr/local/spark/mycode/wordcount/word.txt /user/hadoop
4、回到spark-shell窗口,编写语句,把textFile变量中的内容再次写回到另外一个文本文件wordback.txt中:
val textFile = sc.textFile("hdfs://hadoop:9000/user/hadoop/word.txt")
textFile.saveAsTextFile("hdfs://hadoop:9000/user/hadoop/writeback")
5、查看结果
hdfs dfs -cat /user/hadoop/writeback/part-00000
词频统计
切换到spark-shell窗口
scala> val textFile = sc.textFile("file:///usr/local/spark/mycode/wordcount/word.txt")
scala> val wordCount = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)
scala> wordCount.collect()
编写独立应用程序执行词频统计
1、cd /usr/local/spark/mycode/wordcount/ mkdir -p src/main/scala //这里加入-p选项,可以一起创建src目录及其子目录
2、在“/usr/local/spark/mycode/wordcount/src/main/scala”目录下新建一个test.scala文件,里面包含如下代码:
3、执行如下命令:
cd /usr/local/spark/mycode/wordcount/
vim simple.sbt
4、通过上面代码,新建一个simple.sbt文件,在该文件中输入下面代码:
5、使用 sbt 打包 Scala 程序
cd /usr/local/spark/mycode/wordcount/
find .
6、通过如下代码将整个应用程序打包成 JAR
cd /usr/local/spark/mycode/wordcount/ //请一定把这目录设置为当前目录
/usr/local/sbt/sbt package
7、在spark中运行jar包
/usr/local/spark/bin/spark-submit --class "WordCount" /usr/local/spark/mycode/wordcount/target/scala-2.10/wordcount-project_2.10-1.0.jar
五、用Java语言编写Spark独立应用程序
1、在eclipse中运行程序
2、将程序打包传入xshell
3、运行程序
4、词频统计
5、运行结果