时间:2022-08-30 08:29:33
摘 要微课快速的发展,使得微课视频量的爆炸式增长,使现有的存储平台难以满足视频增长的要求,因此构建一个基于云存储的微课系统变得尤其重要。本文主要介绍如何将Hadoop技术应用到微课系统中,实现了微课视频的海量存储及流媒体式播放。最后介绍了苏州科技学院苏科视频的实现过程。
【关键词】Hadoop RTMP 微课
1 引言
近年来,高校微课的发展作为教学的补充,受到了学生的热烈欢迎,对教学起到了积极的作用。随着微课的不断增加,产生了大量的数据,这海量数据给学校的存储系统带来了很大的压力。如何将海量的视频进行有效的廉价存储,是微课发展中必须要解决的问题。
以云计算为基础的分布式存储系统是实现廉价存储趋势,通过云计算进行硬件资源整合提供强大的存储能力及计算能力,并实现了对数据的统一管理,提高服务质量以及数据处理的可靠性和扩展性。
本文在Hadoop的架构基础上,将Hadoop的HDFS作为微课系统海量存储系统,用Red5做为流媒体服务器,实现校园微课系统。
2 相关技术
2.1 云存储
云存储是在云计算概念上延伸和发展出来的一个新的概念,是一种新型的网络存储技术,是指通过集群应用、网络技术或分布式文件系统等功能,将网络中大量各种不同类型的存储设备通过应用软件集合起来协同工作,对外提供数据存储业务的一个系统。
2.2 HDFS
HDFS是Hadoop的分布式文件系统。HDFS采用Master/Slave模式,一个HDFS集群系统是由一个Master和多个Slave构成。HDFS集群有两类节点,并以管理者――工作者的方式运行,即一个NameNode(管理者)和多个DataNode(工作者)。NameNode管理文件系统的命名空间。它维护着文件系统树及整棵树内所有的文件和目录。DataNode是文件系统的工作节点,它根据需要存储并检索数据块,并且定期向NameNode发送它们所存储的块的列表。
2.3 Red5
Red5是一个采用Java开发开源的Flash流媒体服务器。Red 5支持众多功能,具体包括号:
(1)把音频(MP3)和视频(FLV,F4V,MP4,3GP)转换成播放流;
(2)录制客户端播放流,把摄像头,麦克风等传入的音频视频录制保存到服务器;
(3)共享对象;
(4)现场直播流;
(5)远程调用;
(6)协议:RTMP,RTMPT,RTMPS,and RTMPE。
2.4 RTMP
RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。
该协议基于TCP,是一个协议族,包括:
(1)RTMP工作在TCP之上,默认使用端口1935;
(2)RTMPE在RTMP的基础上增加了加密功能;
(3)RTMPT封装在HTTP请求之上,可穿透防火墙;
(4)RTMPS类似RTMPT,增加了TLS/SSL的安全功能。
3 系统的设计
3.1 系统架构
微课系统在架构从下往上分别是:混合存储层,数据管理层,数据接口层和应用层。
(1)混合存储层:混合存储层主要包括了各种物理机的硬盘和虚拟机的硬盘。在Hadoop系统的管理下为DataNode提供空间存储服务。
(2)数据管理层:数据管理层做为公共数据平台的管理者,基于Hadoop的NameNode来负责管理文件系统的命名空间、集群配制信息维护、存储块的复制和整个平台的存储块的动态平衡等。
(3)数据转换层:HDFS-RTMP实现HDFS数据到RTMP数据格式的转换。
(4)应用层:为用户提供流媒体服务。
3.2 HDFS-RTMP
HDFS-RTMP是实现整个系统关键,包括两个主要模块:HDFSClient和RTMPClient。HDFSClient和RTMPClient是一个种背靠背的结构,HDFSClient负责从Hadoop集群中实时读取视频数据,提交给RTMPClient;RTMPClient则是负责将接收到的视频数据以RTMP数据流的形式发向Red5服务器。
3.2.1 HDFSClient实现
通过调用HDFS API接口来实现以文件流的形式读取Hadoop集群中存储的视频数据。通过一个FileSystem对象可以打开一个Path文件,返回一个FSDataInputStream文件输入流对象,然后从该FSDataInputStream对象就能够读取出文件的内容,步骤如下。
(1)HDFSClient调用FileSystem的get()方法得到一个实例fs(即分布式文件系统DistributedFileSystem),然后fs调用open()打开希望读取的文件。
(2)DistributedFileSystem(fs)通过使用RPC调用NameNode以确定文件起始block的位置。
(3)DistributedFileSystem(fs).open()返回一个FSDataInputStream对象给client用来读数据。FSDataInputStream封装了分布式文件输入流(DFSInputStream)用于管理NameNode和DataNode的I/O.client调用对这个输入流调用read()方法。
(4)通过对数据流反复的调用read()可以将数据从datanode传输到client。
(5)对一个block读完时DFSInputStream会关闭与datanode的连接,然后寻找下一个block的最佳datanode。
(6)当client完成读取,调用FSDataInputStream的close()方法。
3.2.2 RTMPClient实现
RTMPClient第一步,建立一个网络连接,实现Red5与RTMPClient之间基础的连通关系;第二步,建立一个网络流,实现发送视频数据的通道,如图1所示。
RTMPClient按照RTMP协议与Red5完成三次握手,建立Red5与RTMPClient之间网络连接,创立数据流,并接收HDFSClient提交的视频流。如果有播放请求,则转发视频数据给Red5,如果没有播放请求,就返回保持网络连接。
通过调用Red5 API接口实现发送RTMP流到Red5,核心步骤如下:
步骤1.创建一个RTMPClient实例RTMPClient rtmpClient=new RTMPClient(),调用RTMPClient的connect()方法建立一个网络连接。
步骤2.通过调用rtmpClient.createStream()方法建立一个数据连接。
步骤3.调用rtmpClient.publishStreamData()方法发送视频数据。
4 基于Hadoop的微课系统的实践
以微课系统苏科视频建设为例,底层视频存储采用分布式系统Hadoop,流媒体服务器采用Red5,Web应用为开发的苏科视频点播系统USTS_Micro,流媒体播放器为JWPlayer。
4.1 平台搭建
硬件环境:采用Dell R920 2台服务器,配置为:CPU 2.0GHz 32 Cores/64GB内存/8*16GB/900GB硬盘,采用ESXI 6.0虚拟化7台虚拟机Dell_HDFS_1~Dell_HDFS_7基本配制为:CPU 4*4,内存32GB。
软件环境:CentOS 6.4,hadoop-2.2.0,red5-1.0.5,HDFS-RTMP,苏科视频
4.2 应用实践
在Dell_HDFS_1~Dell_HDFS_5安装Hadoop,其中Dell_HDFS_1作NameNode,其它的为DataNode,并在4台DataNode上安装HDFS-RTMP;在Dell_Red5上安装Red5服务,在USTS_MOOC上安装苏科视频应用系统,各系统协作工作过程如图2所示,具体步骤如下。
(1)用户点击某视频请求播放。
(2)苏科视频在数据库中查找该视频存在Hadoop的URL地址。
(3)苏科视频将URL地址提交给HDFS-RTMP。
(4)HDFS-RTMP根据URL地址从Hadoop集群中读取视频数据。
(5)HDFS-RTMP转换视频数据为RTMP数据流并发向Re5。
(6)Red5返回RTMP数据给用户,播放视频如图3所示。
5 总结
本文提出一种基于Hadoop的微课系统,利用HDFS为作为该系统的视频存储系统, HDFS-RTMP作为背靠背连接在HDFS与Red5之间。HDFS-RTMP从HDFS中读取数据再以RTMP的形式发向Red5,由Red5转发给Web端。
本文提出的HDFS-RTMP背靠背尽管满足现有项目的需求,但仍然存在很多值得去研究的地点,比如:HDFS-RTMP通过优化其负载均衡进一步提高整个系统的性能。
参考文献
[1]翁嘉,周驰.微课在高校教学中的应用探析[J].浙江水利水电学院学报,2014,26(2):86-87.
[2]胡锐,胡伏原,陈丽春.基于Hadoop的高校公共数据平台的构建[J].苏州科技学院学报(自然科学版),2015,32(3):52-53.
[3]李逦.浅析云计算背景下云存储的优势与劣势[J].计算机光盘软件与应用,2013,(23):1-1.
[4]郭奇.基于HDFS的流媒体服务器Red5视频文件分发的研究与应用[D].北京:北京邮电大学,2012:9-10.
[5]方雷.基于云计算的土地资源服务高效处理平台关键技术探索与研究[D].杭州:浙江大学,2011:82.