当前课程知识点:高级大数据系统 > In-memory Processing > Experiment in Spark > Video
好
我们刚刚介绍了这个spark
那么在真实的一个集群上
部署了spark之后
我们怎么样在上面
去运行一个真实的
数据处理任务
让我们通过一些实际的操作
给大家介绍这件事情
那么在spark上
去运行一个真实的程序
大概分成几个步骤
第一个步骤就是
说我们要准备数据
和我们在spark上运行数据
运行一个程序实际上是类似的
我们需要把这个程序
放到分布式文件系统
或者是放到其它hadoop
这个spark能够读取的这样一个数据源上
然后我们需要去通过
这些分布式文件系统
来生成最初的RDD
大家回想
在spark里面
我们的数据处理实际上
是基于RDD的
基于RDD的变换
基于RDD的action
然后我们会去对原生的这些
RDD进行transformation
进行一些形变
比如说map
比如说flat map
或者说是reduceByKey
然后有了这一步之后
我们会去做action
我们最终想要它输出
我们可以action
让它输出到文件
我们可以action
让它输出到桌面
最后我们会去
查看我们的结果
如果结果不正确
我们需要迭代
如果结果正确
我们需要进一步
进行持续化的操作
或者说是反复进行
这个数据的查询
我们来看看这几步
在spark的这种实际代码的编写当中
它是怎么样完成的
准备数据
那么准备数据
我们在之前已经介绍过
怎么样从本机把数据
复制到分布式文件系统上
这边我们就列举
那么实际上spark
它既能访问本机的数据
也能访问
分布式文件系统上的数据
它大概是需要这样的
文件标识的方法
本机的文件以file开头
分布式文件系统上的文件
以hdfs开头
通过两种方式
我们可以把这个数据
作为原始的这个数据源
用来生成第一批的RDD
有了这个原始数据之后
我们需要去启动
spark的程序
启动spark的程序
实际上大概会有两种模式
第一个我们编写
独立的spark程序
让它在spark这个
运行环境下去运行
它的过程有点类似于这个
hadoop的执行方式
大家可以去参考一下手册
看看怎么样运行
当然
在这个过程中
大家也可以使用不同的编程语言
包括java、python、scala的方式
来进行程序的编写
那么第二种模式
就是我们经常提到的这个
交互式的操作
我们会开启一个命令行窗口
以交互的这种形式
来进行数据的操作
我们在这个实验课当中
会重点给大家介绍这种模式
屏幕上给的这个命令行
实际上就启动了一个叫做
py-spark的这样一个终端
它是一个命令行交互的一个终端
在这里面大家可以运行
spark支持的
这些命令和语言
它的这个语言
是用python来编写的
所以
大家可以在这里面运行类似于
python的这样一个代码
在这个里面
我们指定了它的master
是一个yarn-cline
然后我们指定了他的
executor的数量是十
启动了之后
我们就可以去运行这个
spark程序了
我们第一步要运行
是需要创建一个
spark的context
这在spark的编程方式
和命令行方式
它是一致的
只不过在命令行方式
这个context
会帮我们直接创建起来
通过context
我们可以把一个
分布式文件系统的
这样一个文件
或者是本地的文件
给转成第一个RDD在这里面
就是一个text file
这样一个RDD
有了这个之后
我们可以对它做一系列的操作
那么大家看到
前面的3个大于符号
就是刚刚提到的这个shell
它的一个提示符
在这里面我们可以对它进行flat map
我们可以进行
flat map之后来继续做map
然后我们还可以进行reduceByKey
等等这样的一系列的操作
最后我们可以进行action
比如说我们要看
前10个元素是什么
然后我们可以去
对里面的一些元素进行查找
通过一个叫做filter的操作
然后我们可以把它输出到文件
把它保存
结果保存出来
下面我们会通过一些例子
来给大家介绍一下这个过程
在我的这个集群上
我们运行过
hadoop的程序
现在我们可以进一步来看
如果我们运行
spark程序的时候
是怎么样的
我这边已经保存了一系列
spark的代码
为了输入的方便
我直接把这些代码复制过去
首先
我们启动一个spark的shell
启动了之后实际上它会给
我们一个交互的操作环境
我们下面可以看到
这样一个操作的交互环境
当然它在这个过程中
已经去把相应的一些资源
进行了分配
启动spark交互环境之后
我们还是使用我们
在hadoop中使用过的
这个单词的这样一个文件
来对单词的文件
进行视频的统计
我们产生第一个RDD
通过spark的context
然后从分布式文件系统中
把这样的一个文件读取出来
好
我们现在已经有了一个RDD
叫做textFile
大家注意这个过程
实际上很快就完成了
因为它并没有真正的
发生什么运算
或者是io
因为它只是让spark记录了
我们要做出这样一个DD
这个RDD由于
它没有action
所以基于它的这个
lazy execution的原则
这一步操作实际上
会在真正我们
发生action的时候
才会去完成
我们可以做一些什么样的事情呢
我们首先把这个加法导入进来
因为我们后面reducer
中是需要用到的
然后我们会形成一个新的RDD
这个新的RDD是会对
这个行进行一个分割
有点像我们在map里面做的
单词的一个行的一个切分
得到一系列单词
我们得到了单词的RDD
我们得到单词RDD之后
我们进一步
去进行一个新的RDD的生成
我们把它叫做maprdd
实际上这一步
我们会把刚刚的一系列单词
输出成单词 1这样的
新的这样一个数据集
叫做maprdd
同样这些操作也是非常快的
有了maprdd之后
我们可以进一步去尝试着模拟
mapreduce的reduce过程
我们形成一个
reduceRDD
这步做的操作就是把
我们有的这个reducer
有的这个中间的这些
这个MAP RDD里面的
这个value进行叠加
叠加了之后
实际上就是我们统计好的
这个词频
有了这一步之后
实际上我们就可以
去简单的看一下我们
这个结果到底怎么样
现在我们用一个
我们用一个action
我们来提出前面的20个单词
和它的这个词频来看一眼
我们看看是什么样的情况
大家可以注意到
当我们敲这个命令之后
看起来好像spark
就已经开始工作了
的确它已经开始工作
因为take是需要
结果呈现在屏幕上的
那么用户执行
这个命令之后
实际上就已经触发了
之前我们做的
若干个transformation
那么最终要求把结果
投到屏幕上
那么我们可以通过这个进度看到
整个这个transformation和action执行的
这样一个进度的一个情况
那么当这个进度执行完了之后
实际上我们就可以
拿到这样一个结果
那么这边大家可以看到
它切分的一个情况
实际上我们通过
Context的一些控制
我们可以让
RDD的一个控制
我们可以让这个RDD
它并行的一个情况
以及它partition的一个情况
对它进行一个优化
比如说在我们的任务中
也许我们通过partition的优化
可以达到提高整个
action速度的一个目标
这个大家需要
在后面实际的运行中去尝试
好
我们刚刚的take
已经拿到了
我们拿到了前20个单词的
这样一个输出
那么我们现在
如果还想再进一步看多一些
我们想看前50个
我们只需要take 50
那我们发现take 50之后
这个过程就变得快多了
那这也依赖于这个spark
对in memory的RDD做了优化
我们的结果已经在
内存中出现
所以它可以直接在
屏幕上得到呈现
当然
如果大家需要
对RDD显示的要求
他在内存中得到缓存的话
大家是可以用相应的命令
把RDD调整到内存当中
那这样的话你可以满足
比如说我们对关键词
进行搜索这样的目标
达到一个快速的一个效果
我们刚刚讲了
大家可以在单机的
这个linux
机群上去进行数据的处理
那么大家也学到了一些基本的
linux的命令
也学到了怎么样通过
SSH远程的执行命令
并且通过crontabl加wget的方式
在一个中心的服务器上
指定要运行
这个程序和数据
那么大家可能会问的
一个很自然的问题
就是如果没有这些
server怎么办
那么由于我们的课程
是针对各种各样的同学
以及工程人员的
那么我们现在就给大家介绍
怎么样达到自己能够
拥有一定的这个
server资源的
这样一个目标
大概有几种方式
你可以去获得这个server的
这样一个资源
第一个我们可以使用
云计算的平台
那么EC2还有这个阿里云
腾讯云等
都是大家可以去使用的资源
大家可以通过这个按需付费
按需分配的方式
来获得你需要的
这种云计算资源
包括在上面分配这种虚拟机
这些虚拟机大家可以去安装
linux的系统
然后只需要经过几分钟的时间
大家就可以在远端
在云上有一个自己的服务器
那么大家如果不愿意付
这个很少的这个
云计算的服务费的话
依然可以使用一些免费的平台
比如说planetlab
然后phonelab实际上
都是大家可以去使用的一些
这种免费的linux
主机以及一些data center的
这种的硬件资源
同样
大家可以向我们的
课程申请使用
我们课程提供的
一些这种免费的资源
当然
如果有用户的量比较多的话
可能我们的这个小的集群
可能会出现延迟比较大
或者说服务质量
不是特别高的现象
但是这几种资源的形式
都是大家可以去在我们的
课堂上利用的
那么我重点介绍一下
大家使用云计算资源
应该去怎么做
那么使用云计算
我们这边介绍的是Amazon EC2
这个例子
就让大家使用阿里云
或者是腾讯云
应该是有类似的这样操作的
我们使用的这个云的服务
模式应该是叫做
RAS 基础设施及服务
这样的一个模式
也就是说我们可以分配
出类似于真实机器的
这样的一些基础设施
那么它给用户看起来
就像是一个真实的linux server
包含它的CPU资源
网络资源
ip资源以及它的存储资源
我们甚至可以去自定义
你自己的硬件的情况
比如说你要不要有GPU
要不要有CPU上有多少个核
你的内存有多大
那么都是能够在数十分钟之内
就可以完成一个任务
那么这边是EC2的一个情况
我们可以看到它的价格
我们可以看到
它的一些资源的分配的情况
那么在EC图里面
有大量的这种
在amazon里面
它其实有大量的资源
你可以去虚拟化
可以去分配
那么包含了我们刚刚
讲到的一些硬件的资源
一些这种甚至是软件的资源
那么拥有这些资源之后
大家不但可以
用来做数据的处理
它们甚至可以用来
做数据的存储
以及后面的这种
数据的一个服务
甚至是部署在web
上面的一些具体的这种应用
那么针对EC2的话
当大家分配好一个
EC2的节点之后
我们大概会看到
这样的一个控制的一个面板
它可以显示你分配的一个
EC2的虚拟机
它的一些基本的信息
包含它的网络的信息
存储的信息
以及它其他的一些密钥
以及安全的信息
那么如果一切信息都
没有问题的话
大家就可以把实例
给运行起来
EC2的一个虚拟机
叫做一个instance
大家把这个实例运行起来之后
那么amazon就会开始计费
那么在通知面板里面
大家还可以去查看
你当前运行的
这些服务器的情况
如果你运行的不止一台
实际上你是可以通过一个内网
把这些服务器连接起来
组织成一个你自己的小的
这样一个虚拟cluster
虚拟机群
那么在集群上能够干的事情
实际上你在当前
amazon的EC2上
你都可以做
那么在这个集群里面
我们同样还可以
对网络进行管理
比如说当我们在
进行某一些数据处理任务的时候
我们可能需要我们的机器
离我们的数据源相对近一些
那这时候我们是可以
把我们的amazon机器
分配到与它比较近的一个区域
比如说我们的数据源在美国
那我们可以选择
美国离它比较近的site
进行资源的一个分配
那么同时我们可以去配置
我们instance它网络的
一个状况
比如说我们需要
有不同的ip address
或者我们需要有什么样
质量的一个内网的
ip和instamce之
间传输数据的
这样一个连接的一个质量保证
这是可以在这里面得到配置的
那么值得一提的是
尽管EC2是对所有人都开放的
但是它针对研究针对教育
还有特别的优惠
也就是说大家可以
通过自己的学生身份
或者说大家参与课程的
这样一个身份
可以去申请到EC2
一些比较优惠的
使用他们EC2节点的支持
那么这种支持的方式
通常是以点数的方式
给到每个同学的这样一个账号
当然大家需要通过申请
大家拿到这样一个免费的
使用时长之后
实际上就可以完成很多
我们课堂或者课堂以外的
这种服务器资源的一个使用
-What is big data and what is big data system?
--Video
-Problems in big data systems?
--Video
-Overview of the course
--Video
-Principles of big data system design
--Video
-Manipulating Data on Linux
--Video
--Video
--Video
-Basics of Linux Data Processing--Manipulating Data
-Running Commands on a Single Machine
--Video
-Running Commands on a Single Machine--作业
-Using a Linux Cluster
--Video
-Using a Linux Cluster--作业
-Storage for Big Data Computing: Distributed file system
--Video
-Storage for Big Data Computing: Distributed file system--作业
-File system and GFS
--Video
-File system and GFS--作业
-Understanding HDFS using Legos
--Video
-Understanding HDFS using Legos--作业
-File System Implementation and DFS
--Video
--Video
-File System Implementation and DFS--作业
-What is MapReduce and why
--Video
-What is MapReduce and why
-Learn MapReduce by playing with cards
--Video
-Processing pattern
--Video
-Processing pattern--作业
-Hadoop
--Video
-Hadoop--作业
-Algorithms in MapReduce
--Video
-Algorithms in MapReduce--作业
-Tutorial
--Video
-Background
--Video
-Background--作业
-Spark
--Video
-Spark--作业
-Use Spark for data mining
--Video
-Use Spark for data mining--作业
-Spark data processing
--Video
-Spark data processing--作业
-Experiment in Spark
--Video
-Experiment in Spark--作业
-Introduction to streaming data processing
--Video
-Introduction to streaming data processing--作业
-Storm
--Video
--Video
--Video
-Storm--作业
-Spark streaming
--Video
--Video
-Spark streaming--作业
-NoSQL introduction
--Video
-NoSQL introduction--作业
-Common Advantages
--Video
-Common Advantages--作业
-Bigtable
--Video
-Bigtable--作业
-Master Startup
--Video
-Master Startup--作业
-HBase
--Video
-HBase--作业
-What is GraphDB and Graph data processing
--Video
-What is GraphDB and Graph data processing--作业
-Graph systems
--Video
-Graph systems
-Example of a GraphDB
--Video
-Example of a GraphDB--作业
-Mahout
--Video
-Mahout--作业
-Case Study: Recommendation
--Video
-Case Study: Recommendatio作业
-Recommendation in Mahout
--Video
-Recommendation in Mahout--作业