《spark技术应用》课程期末考试大作业报告,使用eclipse完成求top值、文件排序、二次排序三个程序的个性化开发。

1 篇文章 0 订阅
1 篇文章 0 订阅

​​​​目录

一、选题的目的及要求... 4

二、设计思路... 4

三、主要内容及关键技术.. 5

四、制作步骤... 5

1准备工作... 5

1.1在VMware中安装一台Ubuntu64位系统... 5

1.2启用共享文件夹实现文件共享,方便文件传输... 5

1.3安装VMware Tools. 6

1.4设置root管理员... 6

1.5更换壁纸、创建文件夹放置压缩文件和解压后的文件以及数据.. 6

2.安装vim编译器... 6

2.1更换镜像网址... 6

2.2下载vim. 7

3.修改环境变量.. 7

3.1查看IP地址... 7

3.2修改hosts文件... 7

4.免密登录设置.. 7

4.1安装ssh服务... 7

4.2生成密钥私钥... 8

4.3将密钥发送给用户... 8

5.安装jdk、配置jdk全局变量... 8

5.1 安装jdk并将hadoop压缩包拷贝到tian文件夹中... 8

5.2将package文件夹中的压缩包解压到tian文件夹中.. 9

5.3修改配置文件 测试环境变量... 10

6.搭建hadoop集群... 10

6.1修改hadoop四个配置文件... 10

6.2修改hadoop-env.sh文件.. 11

6.3修改slaves文件,添加自己的集群名.. 11

6.4格式化 hdfs namenode -format. 12

6.5启动和关闭hadoop集群.. 12

7.搭建spark集群... 12

7.1解压spark安装包... 12

7.2修改配置文件... 13

8.安装sbt. 14

9.安装配置eclipse. 15

9.1解压eclipse. 15

9.2配置全局变量... 16

9.3 下载sbt相关插件,exit退出... 16

9.4 启动eclipse. 16

10.创建eclipse应用程序运行环境... 17

10.1在GTworkspace 目录下创建文件夹 GTwordcount 并打开终端... 17

10.2在GTwordcount目录下创建以下文件结构,find 查看结构... 17

10.3 sbt配置信息... 17

10.4 创建project文件夹,在project/build.properties输入sbt版.. 18

11.数据准备... 18

11.1开启hadoop集群(start-all.sh). 19

11.2修改Windows 映射... 19

11.3访问hadoop集群web端... 19

11.4 HDFS创建文件夹... 19

11.5文件存放... 20

12.打开eclipse 导入工程... 23

五.求top值程序个性化开发(30分).. 24

1.班级总成绩Top.. 24

2.多个数据Top... 25

六.文件排序程序个性化(30分).. 26

七、二次排序程序个性化.. 28

八、制作总结... 30

《spark技术应用》课程期末考试大作业报告

完成hadoop、spark的安装配置,在此基础上使用eclipse完成求top值、文件排序、二次排序三个程序的个性化开发。

环境(个人):

win11   ubuntukylin-16.04.7

软件版本(个人):

openjdk 1.8.0_292

hadoop-2.7.1

sbt-0.13.18

scala-2.11.8

spark-2.1.0

scala-SDK-4.7.0(eclipse)

二、设计思路

1)ssh免密登录

2)安装jdk

3)安装hadoop

4)配置hadoop集群

5)安装spark

6)配置spark集群

7)安装sbt

8)安装配置eclipse

9)开启hadoop、spark进程

10)准备好运行程序所需要的数据文件

11)在eclipse上运行程序

三、主要内容及关键技术

1.设计主要内容

用户名主机名个性化,jdk、hadoop、spark、sbt、eclipse安装路径个性化,eclipse程序个性化。

2.关键技术

ssh免密登录

hadoop集群搭建

spark集群搭建

本地文件上传HDFS

四、制作步骤

1准备工作

1.1在VMware中安装一台Ubuntu64位系统

安装Ubuntu   设置用户名(姓名缩写+学号后两位):gt-12

1.2启用共享文件夹实现文件共享,方便文件传输

1.3安装VMware Tools

 

1.4设置root管理员

 

1.5更换壁纸、创建文件夹放置压缩文件和解压后的文件以及数据

2.安装vim编译器

2.1更换镜像网址

  

2.2下载vim

            

3.修改环境变量

3.1查看IP地址

3.2修改hosts文件

 

 

4.免密登录设置

4.1安装ssh服务

     

4.2生成密钥私钥

 

4.3将密钥发送给用户

4.4测试免密登录

5.安装jdk、配置jdk全局变量

5.1 安装jdk并将hadoop压缩包拷贝到tian文件夹中

 

 

5.2将package文件夹中的压缩包解压到tian文件夹中

5.3修改配置文件

 

配置完成 测试环境变量

         

6.搭建hadoop集群
6.1修改hadoop四个配置文件

1)core-site.xml文件

2)hdfs-site.xml文件

3)yarn-site.xml文件

4)mapred-site.xml文件

6.2修改hadoop-env.sh文件

 

6.3修改slaves文件,添加自己的集群名

6.4格式化 hdfs namenode -format

6.5启动和关闭hadoop集群

启动

 

关闭

 

7.搭建spark集群                 

7.1解压spark安装包

7.2 修改配置文件       

  1. 修改spark-env.sh文件 (vim spark-env.sh)

2)返回上级目录 在sbin目录下修改spark-config.sh文件 

  

7.4开启spark 集群 (sbin/start-all.sh)

启动

 

关闭集群 (sbin/stop-all.sh)

8.安装sbt

解压sbt,将sbt-launch.jar复制到sbt安装目录下,在安装目录中使用下面命令创建一个Shell脚本文件,用于启动sbt, 同时为该Shell脚本文件增加可执行权限

          

使用命令查看 sbt版本 (./sbt sbtVersion)

9.安装配置eclipse

9.1解压eclipse

9.2配置全局变量

创建目录~/.sbt/0.13/plugins,并在该目录下创建文件build.sbt, 在build.sbt文件输

入以下内容:

       

9.3 下载sbt相关插件,exit退出

9.4 启动eclipse

 

10.创建eclipse应用程序运行环境

10.1GTworkspace 目录下创建文件夹 GTwordcount 并打开终端

10.2GTwordcount目录下创建以下文件结构,find 查看结构

10.3 sbt配置信息

修改为自己的scala版本和spark版本

10.4 创建project文件夹,在project/build.properties输入sbt版

10.5 在wordcount 目录下创建eclipse程序

/home/gt-12/Desktop/tian/sbt/sbt eclipse 打包并创建eclipse工程

11.数据准备

11.1开启hadoop集群(start-all.sh)

           

11.2修改Windows 映射

hosts 添加映射

11.3访问hadoop集群web端

注:也可以直接在ubuntu中直接访问

11.4 HDFS创建文件夹

11.5文件存放

Gaotian_Top文件夹下的大数据202上学期成绩表0.txt  大数据202上学期成绩表0.txt

Gaotian_Top文件夹下的data1、data2

Gaotian-SecondSort文件夹下的 消费数据金额.txt

Gaotian_FileSort文件夹下的file1、file2、file3

11.6 数据上传

1)将数据大数据202上学期成绩表0.txt  大数据202上学期成绩表0.txt上传到hdfs Gaotian_Top中

2)将数据data1、data2上传到hdfs Gaotian_Top中

 

3)将数据 消费数据金额.txt 上传到Gaotian_SecondSort

4)将file1、file2、file3上传到Gaotian_FileSort

12.打开eclipse 导入工程

打开eclipse并选择GTworkspace,导入工程File->Import->Existing Projects into Workspace,然后finsh

删除错误文件

GTwordcount工程创建完成

五.求top值程序个性化开发(30分)

1.班级总成绩Top

在src/main/scala目录下创建包Gaotian_Top然后创建scala文件Gaotian_SparkTop

写入代码

package Gaotian_Top

import org.apache.spark.{SparkConf, SparkContext}

/**

  * 业务场景:求top值

  * 需求:求上学期和这学期大数据课程总成绩综合排名? 前5名

  */

object Gaotian_SparkTop {

  def main(args: Array[String]): Unit = {

    //创建SparkConf对象

    val conf = new SparkConf().setMaster("local[*]").setAppName("ranking")

    //创建上下文对象

    val sc = new SparkContext(conf)

    //读取外部存储文件

    val bigdata = sc.textFile("hdfs://Gaotian:9000/Gaotian_Top/大数据202上学期成绩表0.txt")

    val math = sc.textFile("hdfs://Gaotian:9000/Gaotian_Top/大数据202上学期成绩表0.txt")

           //对两个表进行连接

    val score = bigdata.union(math)

           //将连接后的表score中的每行数据按“\t”分割成集合,并将集合中的学号和分数组合中k-v,学号转换成Int

    val rdd1 = score.map(_.split("\t")).map(x => (x(0) -> x(1).toInt))

    //将key学号相同的value进行聚合,

    //top()底层调用的是takeOrdered(),我们也直接可以用takeOrdered(10)(Ordering.by(e => e._2) 这种写法叫函数柯里化

    val value = rdd1.reduceByKey(_+_).top(5)(Ordering.by(e => e._2))

    //输出结果

    value.foreach(println)

 }

}

运行程序

2.多个数据Top值

在src/main/scala目录下创建包Gaotian_Top然后创建scala文件Gaotian_SparkTop,修

改scala版本

写入代码

package Top

import org.apache.spark.{SparkConf, SparkContext}

/**

  * 业务场景:求top值

object SparkTop {

  def main(args: Array[String]): Unit = {

    val conf = new SparkConf().setMaster("local").setAppName("reduce")

    val sc = new SparkContext(conf)

    sc.setLogLevel("ERROR")

    val six = sc.textFile("/home/gt-12/Desktop/data/top")

    var idx = 0;

    val res = six.filter(x => (x.trim().length > 0) && (x.split(",").length == 4))

      .map(_.split(",")(2))

      .map(x => (x.toInt, ""))

      .sortByKey(false)   

      .map(x => x._1).take(5)

      .foreach(x => {

        idx = idx + 1

        println(idx + "\t" + x)

      })

  }

}

                

运行结果

六.文件排序程序个性化(30分)

在src/main/scala目录下创建包Gaotian_ FileSort然后创建scala文件Gaotian_Spark FileSort

写入代码

package Gaotian_FileSort

import org.apache.spark.SparkContext

import org.apache.spark.SparkContext._

import org.apache.spark.SparkConf

import org.apache.spark.HashPartitioner

/**

  * 业务场景:求文件排序

  * 需求:将每个文件中的数据,进行升序排列?

  * @Author: 大数据202 高天 2007322212

  */

object Gaotian_SparkFilesort {

  def main(args: Array[String]) {

        val conf = new SparkConf().setAppName("FileSort").setMaster("local")

        val sc = new SparkContext(conf)

        val dataFile = "hdfs://Gaotian:9000/Gaotian_FileSort"

        val lines = sc.textFile(dataFile,3)

        var index = 0

        val result = lines.filter(_.trim().length>0).map(n=>(n.trim.toInt,"")).partitionBy(new HashPartitioner(1)).sortByKey().map(t => {index += 1

            (index,t._1)

        })

        result.saveAsTextFile("hdfs://Gaotian:9000/Gaotian_fileout1") //文件名不能存在

    }

}

运行结果

查看结果

七、二次排序程序个性化

查看一下二次排序 程序的数据

在src/main/scala目录下创建包Gaotian_ SecondSort然后创建scala文件Gaotian_ SparkSecondSort

写入代码

package Gaotian_SecondSort

import org.apache.spark.{SparkConf, SparkContext}

/**

  * 业务场景:求二次排序

  * 需求:求每位用户近期每周消费的金额使用情况,并按照升序排列?

  * @Author: 大数据202 高天 2007322212

  */

object Gaotian_SparkSecondSort {

  def main(args: Array[String]): Unit = {

    val conf = new SparkConf().setAppName("secondarySort").setMaster("local")

    val sc = new SparkContext(conf)

    val rdd = sc.textFile("hdfs://Gaotian:9000/Gaotian_SecondSort/消费数据金额.txt")

    val result = rdd.map(x => x.replaceAll("\\s+"," ").split(" "))

      .map(x => (x(0),x(1)))

    result.repartition(1).groupByKey()

      .mapValues(x => x.toList.sortBy(x => x))

      .sortByKey()

      .saveAsTextFile("hdfs://Gaotian:9000/Gaotian_SecondSort/output1")

  }

}

运行结果

查看结果

八、制作总结

期间遇到过很多问题,就个人而言.

一:

一开始sbt打包的时候,不理解为什么出现错误,直到更换版本才得以解决,很多人都出现了这个问题,这是因为软件与软件之间的版本不兼容,需要使用特定的版本才能够顺利进行,否则的话只能去修改软件内部的配置文件(当然,这个有一定的难度),趁陷入的不太深,及时更换版本才是正确的选择。

分享一下自己的学习这些的经验,从一开始,错误超级多,但是,都是我自己解决的,上网查了很多资料,很多人做大作业的时候都说,看来又要重装了,我只能说,我已经不知道重装了多少次了,大部分问题已经见怪不怪了,虽然这样学习效率有点低,但我感觉挺适合我,所谓笨鸟先飞,当然要课下多努力啊,什么事情都不能一蹴而就,这个道理大家应该都明白。

  • 12
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值