实验七:Spark初级编程实践

由于CSDN上传md文件总是会使图片失效
完整的实验文档地址如下:
https://download.csdn.net/download/qq_36428822/85814468


1、实验环境:

设备名称 LAPTOP-9KJS8HO6
处理器 Intel® Core™ i5-10300H CPU @ 2.50GHz 2.50 GHz
机带 RAM 16.0 GB (15.8 GB 可用)
主机操作系统 Windows 10 家庭中文版
虚拟机操作系统 ubuntukylin-16.04
Hadoop 版本 3.1.3
JDK 版本 1.8
Java IDE:Eclipse
系统类型 64 位操作系统, 基于 x64 的处理器
笔和触控 没有可用于此显示器的笔或触控输入

2、实验内容与完成情况:

  1. 安装hadoop和spark。
    将下载好的安装包解压至固定路径并安装
    使用命令./bin/spark-shell启动spark

图2启动spark

  1. Spark读取文件系统的数据
    (1) 在spark-shell中读取Linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件的行数;

图3 spark统计行数
(2) 在spark-shell中读取HDFS系统文件“/user/hadoop/test.txt”(如果该文件不存在,请先创建),然后,统计出文件的行数;

图4 hdfs上传文件1.txt

图5 spark统计hdfs文件1.txt行数

(3) 编写独立应用程序(推荐使用Scala语言),读取HDFS系统文件“/user/hadoop/test.txt”(如果该文件不存在,请先创建),然后,统计出文件的行数;通过sbt工具将整个应用程序编译打包成 JAR包,并将生成的JAR包通过 spark-submit 提交到 Spark 中运行命令。

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

图6 SimpleApp.scala文件内容

simple.sbt文件内代码如下:

图7 simple.sbt文件内容

使用、usr/local/sbt/sbt package命令将以上代码文件夹打jar包,打包完成后可看到打包成功的输出,如下图:

图8 sbt打包
运行打好的jar包,使用命令/usr/local/spark/bin/spark-submit --class “SimpleApp” /usr/local/spark/mycode/HDFStest/target/scala-2.11/a-simple-hdfs-test_2.11-1.0.jar即可,如下:

图9 运行结果:文件中行数4行
3. 编写独立应用程序实现数据去重
对于两个输入文件 A 和 B,编写 Spark 独立应用程序(推荐使用 Scala 语言),对两个文件进行合并,并剔除其中重复的内容,得到一个新文件 C。下面是输入文件和输出文件的一个样例,供参考。
输入文件 A 的样例如下:
20170101 x
20170102 y
20170103 x
20170104 y
20170105 z
20170106 z
输入文件 B 的样例如下:
20170101 y
20170102 y
20170103 x
20170104 z
20170105 y
根据输入的文件 A 和 B 合并得到的输出文件 C 的样例如下:
20170101 x
20170101 y
20170102 y
20170103 x
20170104 y
20170104 z
20170105 y
20170105 z
20170106 z
RemDup.scala文件内代码内容如下所示:
图10 RemDup.scala文件内容
创建simple.sbt文件并向其中输入代码,使用命令/usr/local/sbt/sbt package 将代码文件夹打包,打包成功后结果如下:
图11 simple.sbt文件内容
图12 RemDup工程打包结果
再使用命令/usr/local/spark/bin/spark-submit --class “RemDup” /home/hadoop/sparkapp2/RemDup/target/scala-2.11/remove-duplication_2.11-1.0.jar
即可运行,结果如下

图13 程序运行结果

  1. 编写独立应用程序实现求平均值问题
    每个输入文件表示班级学生某个学科的成绩,每行内容由两个字段组成,第一个是学生名字,第二个是学生的成绩;编写 Spark 独立应用程序求出所有学生的平均成绩,并输出到一个新文件中。下面是输入文件和输出文件的一个样例,供参考。
    Algorithm 成绩:
    小明 92
    小红 87
    小新 82
    小丽 90
    Database 成绩:
    小明 95
    小红 81
    小新 89
    小丽 85
    Python 成绩:
    小明 82
    小红 83
    小新 94
    小丽 91
    平均成绩如下:
    (小红,83.67)
    (小新,88.33)
    (小明,89.67)
    (小丽,88.67)
    创建代码文件夹,并创建存放成绩数据的文件夹datas,使用vim命令向其中添加题示数据:

图14 成绩数据文件
图15 AvgScore.scala代码
图16 simple.sbt文件
图17 sbt打包结果

运行jar包,使用命令/usr/local/spark/bin/spark-submit --class “AvgScore” /home/hadoop/sparkapp3/AvgScore/target/scala-2.11/average-score_2.11-1.0.jar
得到运行结果,每个学生的平均成绩如下:

图18 程序运行结果

3、出现的问题:

1、用spark读取本地文件并统计文件内容行数时报出IllegalArgumentException(非法参数异常)

图19 问题1

2、用spark读取hdfs文件系统中的文件并统计文件内容行数时报出InvalidInputException(无效输入异常),并提示输入路径不存在

图20 问题2

3、编写spark独立应用程序并实现数据去重时,程序运行报出异常:java.net.URISyntaxException: Illegal character in scheme name at index 0

图21 问题3

4、解决方案:

1、spark读取本地文件的url路径有问题,正确的应该是val textFile=sc.textFile(“file:///usr/local/hadoop/1.txt”),错误原因是file:///少打了一个/

2、依然是读取hdfs文件的url路径有问题,hdfs文件系统的根目录不是~,而应该是/user/hadoop,其中hadoop是用户名

3、代码中获取hdfs文件的地址URL前面有空格,就会报错java.net.URISyntaxException: Illegal character in scheme name at index 0,删掉空格就好了

你可能感兴趣的:(课程设计,hadoop,spark,大数据)