RDD编程初级实践

                

1.需求描述

    大数据时代的来临,带来了各行各业的深刻变革。大数据就像能源、原材料一样,已经成为提升国家和企业竞争力的关键要素,被称为“未来的新石油”。基于互联网技术而发展起来的大数据技术,将会对人们的生产和生活产生颠覆性的影响。

    Spark最初诞生于美国加州大学伯克利分校(UC Berkeley)的AMP实验室,是一个可应用于大规模数据处理的快速、通用引擎。2013年,Spark加入Apache孵化器项目后,开始获得迅猛的发展,如今已成为Apache软件基金会最重要的三大分布式计算系统开源项目之一(即Hadoop、Spark、Storm)。Spark最初的设计目标是使数据分析更快——不仅运行速度快,也要能快速、容易地编写程序。

    Apache Spark 是一个新兴的大数据处理通用引擎,提供了分布式的内存抽象。Spark 最大的特点就是快,可比 Hadoop MapReduce 的处理速度快 100 倍。

    为了使程序运行更快,Spark提供了内存计算,减少了迭代计算时的IO开销;而为了使编写程序更为容易,Spark使用简练、优雅的Scala语言编写,基于Scala提供了交互式的编程体验。虽然,Hadoop已成为大数据的事实标准,但其MapReduce分布式计算模型仍存在诸多缺陷,而Spark不仅具备Hadoop MapReduce所具有的优点,且解决了Hadoop MapReduce的缺陷。Spark正以其结构一体化、功能多元化的优势逐渐成为当今大数据领域最热门的大数据计算平台。

    RDD是Spark的基石,是实现Spark数据处理的核心抽象。RDD支持两种操作:转化操作和行动操作。RDD 的转化操作是返回一个新的 RDD的操作,比如 map()和 filter()。

2.环境介绍

(1)操作平台:Ubuntu 16.04 (64-bit)

(2)Hadoop版本:2.7.1

(3)Spark版本:3.1.0

(4)Python版本:3.8.5

(5)HBase版本:1.1.5

(6)JDK版本:1.8

(7)Scala版本:2.11.8

(8)Windows 10家庭中文版

(9)Scala IDE(Eclipse4.7.0,Maven,Scala,sbt)

(10)网卡1:Intel PRO/1000 MT 桌面(桥接网络,Realtek USB GbE Family Controller #2)

3.数据来源描述

数据集链接:

链接:https://pan.baidu.com/s/13cR8_QAqD9ny7jYHBxhg0w
提取码:rm1i

数据文件包含(data.txt、A.txt、B.txt、Algorithm.txt、Database.txt、Python.txt)

4.数据上传及上传结果查看

(1)设置Ubuntu操作系统网络为桥接网络,打开虚拟机,创建终端,输入ifconfig查看虚拟机IP地址。

(2)打开Filezilla客户端,点击站点管理器,添加新站点。设置主机IP:10.0.2.15。协议为SFTP -SSH File Transfer Protocol。登录类型选择选择正常。输入用户名:hadoop;密码:hadoop。然后点击连接。进入【默认保存密码下次直接点击连接即可】,进入后左边是本地目录和文件列表,右边为FTP的目录文件列表。

 

(3)将数据集上传到Hadoop目录下的下载子目录。使用mv命令,将数据集移动到/usr/local/spark/mycode目录下。

 

5、数据处理过程描述

一、pyspark交互式编程

    本作业提供分析数据data.txt,该数据集包含了某大学计算机系的成绩,数据格式如下所示:

Tom,DataBase,80

Tom,Algorithm,50

Tom,DataStructure,60

Jim,DataBase,90

Jim,Algorithm,60

Jim,DataStructure,80

请根据给定的实验数据,在pyspark中通过编程来计算以下内容:

(1)该系总共有多少学生; 265

(2)该系共开设了多少门课程; 8

(3)Tom同学的总成绩平均分是多少;30.8

(4)求每名同学的选修的课程门数;

 

(5)该系DataBase课程共有多少人选修;1764

(6)各门课程的平均分是多少;

 

(7)使用累加器计算共有多少人选了DataBase这门课。1764

 

二、编写独立应用程序实现数据去重

对于两个输入文件A和B,编写Spark独立应用程序,对两个文件进行合并,并剔除其中重复的内容,得到一个新文件C。本文给出门课的成绩(A.txt、B.txt)下面是输入文件和输出文件的一个样例,供参考。
输入文件A的样例如下:
20200101    x
20200102    y
20200103    x
20200104    y
20200105    z
20200106    z
输入文件B的样例如下:
20200101    y
20200102    y
20200103    x
20200104    z
20200105    y
根据输入的文件A和B合并得到的输出文件C的样例如下:
20200101    x
20200101    y
20200102    y
20200103    x
20200104    y
20200104    z
20200105    y
20200105    z
20200106    z
步骤如下:
(1)假设当前目录为/usr/local/spark/mycode/remdup,在当前目录下新建一个remdup.py文件

(2)最后在目录/usr/local/spark/mycode/remdup下执行下面命令执行程序(注意执行程序时请先退出pyspark shell,否则会出现“地址已在使用”的警告)

(3)在目录/usr/local/spark/mycode/remdup/result下即可得到结果文件part-00000。

三、编写独立应用程序实现求平均值问题

每个输入文件表示班级学生某个学科的成绩,每行内容由两个字段组成,第一个是学生名字,第二个是学生的成绩;编写Spark独立应用程序求出所有学生的平均成绩,并输出到一个新文件中。本文给出门课的成绩(Algorithm.txt、Database.txt、Python.txt),下面是输入文件和输出文件的一个样例,供参考。

Algorithm成绩:

小明 92

小红 87

小新 82

小丽 90

……

Database成绩:

小明 95

小红 81

小新 89

小丽 85

……

Python成绩:

小明 82

小红 83

小新 94

小丽 91

……

平均成绩如下:

    (小红,83.67)

    (小新,88.33)

    (小明,89.67)

(小丽,88.67)

……

步骤如下:


(1)假设当前目录为/usr/local/spark/mycode/avgscore,在当前目录下新建一个avgscore.py;

(2)最后在目录/usr/local/spark/mycode/avgscore下执行下面命令执行程序(注意执行程序时请先退出pyspark shell,否则会出现“地址已在使用”的警告)。

代码如下:

(3)在目录/usr/local/spark/mycode/avgscore/result下即可得到结果文件part-00000。运行结果:

 

6、经验总结

     通过本学期的学习,我明白了Spark采用textFile()方法从文件系统中加载数据创建RDD,该方法把文件的URL作为参数,这个URL可以是本地文件系统的地址、分布式文件系统HDFS的地址或者诗Amazon S3的地址等。

     Spark采用RDD以后能够实现高效计算的主要原因如下:

     高效的容错性。现有的分布式共享内存、键值存储、内存数据库等,为了实现容错,必须在集群节点之间进行数据复制或者记录日志,也就是在节点之间会发生大量的数据传输,这对于数据密集型应用而言会带来很大的开销。在RDD的设计中,数据只读,不可修改,如果需要修改数据,必须从父RDD转换到子RDD,由此在不同RDD之间建立了血缘关系。所以,RDD是一种天生具有容错机制的特殊集合,不需要通过数据冗余的方式(比如检查点)实现容错,而只需通过RDD父子依赖(血缘)关系重新计算得到丢失的分区来实现容错,无需回滚整个系统,这样就避免了数据复制的高开销,而且重算过程可以在不同节点之间并行进行,实现了高效的容错。此外,RDD提供的转换操作都是一些粗粒度的操作(比如map、filter和join),RDD依赖关系只需要记录这种粗粒度的转换操作,而不需要记录具体的数据和各种细粒度操作的日志(比如对哪个数据项进行了修改),这就大大降低了数据密集型应用中的容错开销;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值