基于测量的在线视频流媒体质量因素分析毕业论文.docx
- 文档编号:7724932
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:50
- 大小:1.14MB
基于测量的在线视频流媒体质量因素分析毕业论文.docx
《基于测量的在线视频流媒体质量因素分析毕业论文.docx》由会员分享,可在线阅读,更多相关《基于测量的在线视频流媒体质量因素分析毕业论文.docx(50页珍藏版)》请在冰豆网上搜索。
基于测量的在线视频流媒体质量因素分析毕业论文
基于测量的在线视频流媒体质量因素分析毕业论文
目录
目录1
第一章前言3
1.1课题研究背景和意义3
1.2课题研究内容和本文的主要工作方法5
1.3论文组织结构5
第二章Spark开发平台概述6
2.1Spark的背景6
2.1.1Spark的介绍6
2.1.2Spark的适用场景8
2.1.3在业界的使用8
2.1.4Spark与Hadoop对比8
2.2RDD框架概述9
2.2.1RDD介绍9
2.2.2RDD的主要创建方式9
2.2.3RDD的特点10
2.2.4RDD的好处10
2.2.5RDD的存储与分区10
2.2.6容错性10
2.2.7可用性。
10
2.2.8RDD的内部表示11
2.3Local模式和Mesos模式11
2.4作用于RDD的各种操作11
2.5Spark的编程模型12
第三章Spark平台搭建13
3.1安装UbuntuLinux操作系统13
3.2配置安装JavaJDK13
3.2.1下载jdk13
3.2.2安装jdk14
3.2.3配置环境变量14
3.2.4检查是否安装成功14
3.3搭建Hadoop环境15
3.3.1下载安装Hadoop15
3.3.2配置hadoop15
3.3.3安装rsync和ssh16
3.3.4配置ssh免登录16
3.3.5启动hadoop17
3.4安装Scala18
3.5部署Spark20
3.5.1下载spark-1.0.0源码20
3.5.2解压编译20
3.5.3设置SPARK_HOME环境变量20
3.5.4验证spark环境21
第四章机器学习算法模型22
4.1聚类分析23
4.2K-meansalgorithm23
4.2.1算法描述24
4.2.2算法的性能分析24
第五章实验处理与实验分析25
5.1预处理待测量的数据集26
5.2待测量数据集的条数26
5.3运用KMeans算法27
5.3.1下载NumPy27
5.3.2Kmeans算法的python代码28
5.3.3在Spark中运行29
5.4聚类效果及分析30
5.4.1Kmeans中k值的选取30
5.4.2本次实验结果分析32
5.5结论33
第六章结束语34
参考文献34
附录36
第一章前言
1.1课题研究背景和意义
流媒体(VideoStreaming)是指在Internet中使用流式传输技术的连续时基媒体,视频流媒体(MediaStreaming)业务是指支持多媒体数据流通过网络从服务器向客户机传送,接收方边接收边播放的技术。
与传统的先下载后播放的做法相比,流媒体技术有很大的优势,如实时性强,有利于保护版权等。
随着计算机网络和多媒体技术的不断发展,流媒体直播技术的应用越来越广泛,传统的Flash早已被视频流媒体所取代。
近年来,无线网络的飞速发展和带宽的迅速提高,为流媒体技术在无线网络中的应用奠定了坚实的基础。
在流媒体的背后进行着的是对大数据的挖掘,数据挖掘一般是指从大量的数据中通过算法搜索隐藏于其中信息的过程。
数据挖掘通常与计算机科学有关,并通过统计、在线分析处理、情报检索、机器学习、专家系统和模式识别等诸多方法来实现上述目标。
大数据,一个似乎已经被媒体传播的过于泛滥的词汇,的的确确又在逐渐影响和改变着我们的生活。
也许有人认为大数据在中国仍然只是噱头,但在当前中国互联网领域,大数据以及大数据所催生出来的生产力正在潜移默化地推动业务发展,并为广大中国网民提供更加优秀的服务。
提到大数据,自然不能不提Hadoop[1]。
HDFS已然成为大数据公认的存储,而MapReduce作为其搭配的数据处理框架在大数据发展的早期表现出了重大的价值。
可由于其设计上的约束MapReduce只适合处理离线计算,其在实时性上仍有较大的不足,随着业务的发展,业界对实时性和准确性有更多的需求,很明显单纯依靠MapReduce框架已经不能满足业务的需求了。
Hadoop中的数据传送与共享,串行方式、复制以及磁盘IO等因素使得Hadoop集群在低延迟、实时计算方面表现有待改进。
优酷土豆作为国内最大的视频网站,和国内其他互联网巨头一样,率先看到大数据对公司业务的价值,早在2009年就开始使用Hadoop集群,随着这些年业务迅猛发展,优酷土豆又率先尝试了仍处于大数据前沿领域的Spark内存计算框架,很好地解决了机器学习和图计算多次迭代的瓶颈问题,使得公司大数据分析更加完善。
在今天,数据处理要求非常快,作为Hadoop的替代者,Spark性能比MapReduce提升很多,使其成为一大热门开源项目。
ApacheSpark是新推出的一个高效的分布式计算系统,是一个通用的并行计算框架,发源于美国加州大学伯克利分校AMPLab[2]的集群计算平台。
Databricks,Cloudera都已决定支持Spark,Spark被认为是大数据领域的大事情,且很有可能成为大数据领域的下一个大家伙。
Spark内存计算框架适合各种迭代算法和交互式数据分析,能够提升大数据处理的实时性和准确性。
而MapReduce处理框架则擅长复杂的批处理操作、登陆过滤、ETL(数据抽取、转换、加载)、网页索引等应用,MapReduce在低延迟业务上一直被人所诟病。
作为一个基于内存in-memory数据处理平台,兼容于Hadoop数据源但是比HadoopMapReduce运行得快得多。
Spark迭代计算的主要实现思想就是RDD,把所有计算的数据保存在分布式的内存中。
RDD是分布在一组节点中的只读对象集合。
这些集合是弹性的,如果数据集一部分丢失,则可以对它们进行重建。
迭代计算通常情况下都是对同一个数据集做反复的迭代计算,数据在内存中将大大提升IO操作。
这也是Spark涉及的核心:
内存计算。
Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。
需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小。
虽然Spark与Hadoop有相似之处,但它提供了具有有用差异的一个新的集群计算框架。
首先,Spark是为集群计算中的特定类型的工作负载而设计,即那些在并行操作之间重用工作数据集(比如机器学习算法)的工作负载。
为了优化这些类型的工作负载,Spark引进了内存集群计算的概念,可在内存集群计算中将数据集缓存在内存中,以缩短访问延迟。
RDD能够从磁盘读取然后保持在内存中,提高了性能,这和Hadoop大部分基于磁盘的速度要快多。
Spark也可以直接对HDFS进行数据的读写。
Spark可以与MapReduce运行于同集群中,共享存储资源与计算。
本实验选择Spark是因为传统的并行计算模型无法有效的解决迭代计算(iterative)和交互式计算(interactive);而Spark的使命便是解决这两个问题,这也是它存在的价值和理由。
因此特别适合于机器学习处理来分析大数据。
本文着眼于聚类的机器学习方法应用分布式系统处理挖掘大数据,通过spark对流媒体质量因素进行测量和分析,关联分析在不同技术条件和环境下流媒体的质量特征与因素,得出不同元素如媒体内容、终端类型、地理位置、观看时间等对视频流媒体质量影响的关系和程度。
1.2课题研究内容和本文的主要工作方法
本毕业设计主要任务是搭载实现Spark平台并应用Spark来研究处理分析在线视频流媒体质量因素。
包括:
(1)对Spark平台下的RDD(弹性分布式数据集),机器学习算法KMeans以及相关的机制进行了分析和研究,这为运用机器学习算法进行分析打好了基础。
(2)通过安装hadoop、jdk、scala、spark,并配置环境变量,搭建完成Spark平台。
(3)对数据集进行了预处理。
(4)采用机器学习算法对预处理的数据集进行计算。
(5)从理论上分析了实验结果。
1.3论文组织结构
第一章阐述了课题的背景及意义。
介绍了分布式文件系统。
提出了本文研究的主要内容。
第二章详细介绍了Spark开发平台,对RDD的相关特性,框架,机制进行了深入的讨论。
第三章描述了平台的搭载过程并通过运行例子验证其有效性。
第四章描述了机器学习算法中的聚类模型KMeans。
第五章通过处理分析数据,得出不同数据因素之间的关系。
第六章为全文总结。
列举了本论文的研究成果,并分析了研究工作的不足,展望了进一步研究的内容和方向。
第二章Spark开发平台概述
2.1Spark的背景
2.1.1Spark的介绍
Spark是一种与Hadoop相似的开源集群计算环境,在性能和迭代计算上很有看点,现在是Apache的顶级孵化项目。
Spark由加州大学伯克利分校AMP实验室(Algorithms,Machines,andPeopleLab)开发,可用来构建大型的、低延迟的数据分析应用程序。
Spark启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
Spark是在Scala语言中实现的,它将Scala用作其应用程序框架,而Scala的语言特点也铸就了大部分Spark的成功。
项目的core部分的代码只有63个Scala文件,非常短小精悍。
与Hadoop不同,Spark和Scala能够紧密集成,其中的Scala可以像操作本地集合对象一样轻松地操作分布式数据集。
尽管创建Spark是为了支持分布式数据集上的迭代作业,但是实际上它是对Hadoop的补充,可以在Hadoop文件系统中并行运行。
通过名为Mesos的第三方集群框架可以支持此行为。
Spark可用来构建大型的、低延迟的数据分析应用程序。
Spark和HadoopMapReduce类似,由Master(类似于MapReduce的Jobtracker)和Workers(Spark的Slave工作节点)组成。
用户编写的Spark程序被称为Driver程序,Driver程序会连接master并定义了对各RDD的转换与操作,这些驱动程序可实现在单一节点上执行的操作或在一组节点上并行执行的操作。
与Hadoop类似,Spark支持单节点集群或多节点集群。
对于多节点操作,Spark依赖于Mesos集群管理器。
Mesos为分布式应用程序的资源共享和隔离提供了一个有效平台。
该设置充许Spark与Hadoop共存于节点的一个共享池中。
而对RDD的转换与操作通过Scala闭包(字面量函数)来表示,Scala使用Java对象来表示闭包且都是可序列化的,以此把对RDD的闭包操作发送到各Workers节点。
Workers存储着数据分块和享有集群内存,是运行在工作节点上的守护进程,当它收到对RDD的操作时,根据数据分片信息进行本地化数据操作,生成新的数据分片、返回结果或把RDD写入存储系统。
Spark是开源的类HadoopMapReduce的通用的并行计算框架,Spark基于mapreduce算法实现的分布式计算,拥有HadoopMapReduce所具有的优点;但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS。
除了能够提供交互式查询外,它还可以优化迭代工作负载。
Spark的迭代,内存运算能力以及交互式计算,能更好地适用于数据挖掘与机器学习等需要迭代的mapreduce的算法。
其架构如图2.1.1所示。
图2.1.1
2.1.2Spark的适用场景
Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。
需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小。
由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。
就是对于那种增量修改的应用模型不适合。
总的来说Spark的适用面比较广泛且比较通用。
2.1.3在业界的使用
Spark项目在2009年启动,2010年开源,现在使用的有:
Berkeley、Princeton、Klout、Foursquare、Conviva、Quantifind、Yahoo!
、阿里巴巴、Cloudera、Databricks、IBM、英特尔、淘宝等[3],豆瓣也在使用Spark的python克隆版Dpark。
2.1.4Spark与Hadoop对比
Spark提供的数据集操作类型有很多种,不像Hadoop只提供了Map和Reduce两种操作。
比如map,filter,flatMap,sample,groupByKey,union,join,cogroup,reduceByKey,mapValues,sort,partionBy等多种操作类型,Spark把这些操作称为Transformations。
同时还提供Count,collect,reduce,lookup,save等多种actions操作。
这些多种多样的数据集操作类型,给给开发上层应用的用户提供了方便。
各个处理节点之间的通信模型不再像Hadoop那样就是唯一的DataShuffle一种模式。
用户可以命名,物化,控制中间结果的存储、分区等。
可以说编程模型比Hadoop更灵活。
图2.1.4
2.2RDD框架概述
2.2.1RDD介绍
弹性分布数据集ResilientDistributedDataset(RDD)是Spark的最基本抽象,是对分布式内存的抽象使用,实现了以操作本地集合的方式来操作分布式数据集的抽象实现。
RDD是Spark最核心的东西,也是设计精华所在。
将它理解为一个大的集合,将所有数据都加载到内存中,方便进行多次重用。
第一,它是分布式的,可以分布在多台机器上,进行计算。
第二,它是弹性的,在计算处理过程中,机器的内存不够时,它会和硬盘进行数据交换,某种程度上会减低性能,但是可以确保计算得以继续进行。
它表示已被分区,不可变的并能够被并行操作的数据集合,不同的数据集格式对应不同的RDD实现。
RDD必须是可序列化的。
RDD可以cache到内存中,每次对RDD数据集的操作之后的结果,都可以存放到内存中,下一个操作可以直接从内存中输入,省去了MapReduce大量的磁盘IO操作。
这对于迭代运算比较常见的机器学习算法,交互式数据挖掘来说,效率提升比较大。
2.2.2RDD的主要创建方式
1.从Hadoop文件系统(或与Hadoop兼容的其它存储系统)输入(例如HDFS)创建。
2.通过已存在的RDD转换得到新RDD。
2.2.3RDD的特点
1.它是在集群节点上的不可变的、已分区的集合对象。
2.通过并行转换的方式来创建如(map,filter,join,etc)。
3.失败自动重建。
4.可以控制存储级别(内存、磁盘等)来进行重用。
5.必须是可序列化的。
6.是静态类型的。
2.2.4RDD的好处
1.RDD只能从持久存储或通过Transformations操作产生,相比于分布式共享内存(DSM)可以更高效实现容错,对于丢失部分数据分区只需根据它的lineage就可重新计算出来,而不需要做特定的Checkpoint。
2.RDD的不变性,可以实现类HadoopMapReduce的推测式执行。
3.RDD的数据分区特性,可以通过数据的本地性来提高性能,这与HadoopMapReduce是一样的。
4.RDD都是可序列化的,在内存不足时可自动降级为磁盘存储,把RDD存储于磁盘上,这时性能会有大的下降但不会差于现在的MapReduce。
2.2.5RDD的存储与分区
1.用户可以选择不同的存储级别存储RDD以便重用。
2.当前RDD默认是存储于内存,但当内存不足时,RDD会spill到disk。
3.RDD在需要进行分区把数据分布于集群中时会根据每条记录Key进行分区(如Hash分区),以此保证两个数据集在Join时能高效。
2.2.6容错性
对于流式计算来说,容错性至关重要。
首先我们要明确一下Spark中RDD的容错机制。
每一个RDD都是一个不可变的分布式可重算的数据集,其记录着确定性的操作继承关系(lineage),所以只要输入数据是可容错的,那么任意一个RDD的分区(Partition)出错或不可用,都是可以利用原始输入数据通过转换操作而重新算出的。
2.2.7可用性。
Spark通过提供丰富的Scala,Java,PythonAPI及交互式Shell来提高可用性。
2.2.8RDD的内部表示
在RDD的内部实现中每个RDD都可以使用5个方面的特性来表示:
1.分区列表(数据块列表)
2.计算每个分片的函数(根据父RDD计算出此RDD)
3.对父RDD的依赖列表
4.对key-valueRDD的Partitioner
5.每个数据分片的预定义地址列表(如HDFS上的数据块的地址)
2.3Local模式和Mesos模式
Spark支持Local调用和Mesos集群两种模式,在Spark上开发算法程序,可以在本地模式调试成功后,直接改用Mesos集群运行,除了文件的保存位置需要考虑以外,算法理论上不需要做任何修改。
Spark的本地模式支持多线程,有一定的单机并发处理能力。
但是不算很强劲。
本地模式可以保存结果在本地或者分布式文件系统,而Mesos模式一定需要保存在分布式或者共享文件系统。
2.4作用于RDD的各种操作
作用于RDD的各种操作,有两种类型的动作转换(Transformations)和动作(Actions)。
它们本质区别是:
Transformation返回值还是一个RDD。
它使用了链式调用的设计模式,对一个RDD进行计算后,变换成另外一个RDD,然后这个RDD又可以进行另外一次转换。
这个过程是分布式的。
Action返回值不是一个RDD。
它要么是一个Scala的普通集合,要么是一个值,要么是空,最终或返回到Driver程序,或把RDD写入到文件系统中。
关于这两个动作,它们是基于Spark开发的核心。
图2.4阐明两种动作的区别。
图2.4
2.5Spark的编程模型
RDD是只读的数据分区集合,注意是数据集。
只有当RDD上有action时,该RDD及其父RDD上的所有operation才会被提交到cluster中真正的被执行。
从代码到动态运行,涉及到的组件如图2.5所示。
图2.5
第三章Spark平台搭建
3.1安装UbuntuLinux操作系统
使用wubi安装ubuntu,我使用的是当前的LTS版本Ubuntu12.04LTS。
3.2配置安装JavaJDK
3.2.1下载jdk
在这里有jdk1.7的下载:
/java/javase/downloads/jdk7-downloads-1880260.html
如果CPU是32位,选择下载Linuxx86,如果CPU是64位的,选择Linuxx64。
一般来说,如果计算机是双核的,肯定支持64位操作系统。
或者可以打开命令终端运行”uname-a”命令看一下,在笔者的笔记本上运行这个命令结果如下:
图3.2.1
Linuxubuntu3.11.0-22-generic#38~precise1-UbuntuSMPFriMay1620:
47:
57UTC2014x86_64x86_64x86_64GNU/Linux
后面的x86_64表明系统是64位的。
我所用的版本是jdk-7u60-linux-x64.tar.gz
3.2.2安装jdk
打开命令终端,下文的命令都是在终端里执行。
$sudosu-
这个命令会切换到root用户,也就是最高权限的用户。
因为后面要执行的jdk安装操作是在/usr/local目录下进行的,用root用户更方便。
$cd/usr/local/lib
cd就是changedirectory的缩写,切换当前目录。
$tar-zxvf/home/kavin/jdk-7u55-linux-x64.tar.gz
tar是linux下的打包和解压命令行工具,具体细节可以参考"mantar"。
这个命令将jdk-7u55-linux-x64.tar.gz压缩包解压到当前目录下。
解压缩完毕之后,执行"ls",能看到当前目录下有一个新目录叫"jdk1.7.0_55"
3.2.3配置环境变量
$gedit/etc/profile
gedit是linux下类似Windoes的记事本的编辑器,文件/etc/profile是linux下的配置文件。
本命令会打开这个配置文件,以备编辑。
添加配置:
在/etc/profile文件末尾加上如下的三行代码:
exportJAVA_HOME=/usr/local/lib/jdk1.7.0_55
exportCLASSPATH=.:
$JAVA_HOME/jre/lib/rt.jar:
$JAVA_HOME/lib/dt.jar:
$JAVA_HOME/lib/tools.jar
exportPATH=$PATH:
$JAVA_HOME/bin
保存文件,然后退出。
Linux系统,开机后会自动执行/etc/profile配置文件。
export命令设置或者显示环境变量。
上述三行代码,分别设置了JAVA_HOME,CLASSPATH,PATH这三个环境变量。
$source/etc/profile
如果更改了/etc/profile配置文件,它只会在新的终端里生效,现在正在使用的终端是不会生效的。
如果想让它在正使用的终端也生效,需要用source命令运行一下配置文件。
这条命令会让3.2.3的三个环境变量立即生效。
3.2.4检查是否安装成功
图3.2.4
$java-version
这条命令检查jdk安装是否成功。
运行这条命令,只要没有报错就表明安装成功了。
Java环境安装与配置完成,这是我们搭建Hadoop的基础,因为Hadoop平台是基于Java进行开发与运行的。
3.3搭建Hadoop环境
Hadoop的安装比较繁琐,有如下几个原因:
其一,Hadoop有非常多的版本;其二,官方文档不尽详细,有时候更新脱节,Hadoop发展的太快了;其三,网上流传的各种文档,或者是根据某些需求定制,或者加入了不必须要的步骤,或者加入容易令人误解的步骤。
其实安装是很重要的步骤,只有安装好了,才能谈及下一步。
3.3.1下载安装Hadoop
在Hadoop的主页上提供了多个下载链http:
//hadoop.apache.org
我这个实验,选择目前hadoop的stable版:
Hadoop1.2.1,所以我选择下载hadoop-1.2.1.tar.gz
将stable版本的Hadoop解压
$cd~/setup/hadoop
在命令终端里
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 测量 在线视频 流媒体 质量 因素 分析 毕业论文