背景技术
为了分析用户偏好以进行营销等,需要使用大量的用户行为数据,目前在公交车、购物中心、广场等公共场所一般安装WIFI设备,提供免费上网入口,从而得到用户行为数据。尽管单台移动上网设备接入到WIFI设备产生的数据量不大,但在人流量大的公共场所,接入的移动上网设备多,导致需要处理的数据量也日益增加。因为WIFI设备不仅要为接入的移动上网设备提供上网冲浪服务,还要上传用户行为日志记录,如果将WIFI设备采集到的数据直接上传到服务器,会对WIFI设备的网络带宽有很高的要求,对于使用移动网络提供上网服务的WIFI设备而言,可用的带宽资源就更加窘迫,为了能够减少数据传输所需的带宽和消耗的流量,提高数据上传的速度,一般会在数据上传之前对数据进行压缩打包处理。对数据压缩打包解决了数据传输的问题,但引来了新的问题。为了使用这些数据,需要对压缩文件进行解压以及相关的预处理,而为了提高数据的实时性,一般数据压缩上传的间隔设定比较短,如5分钟,使得产生了大量需要待处理的压缩文件。
现有的常用方案是等待当天文件传输完毕后,启动离线批处理的程序对全部文件进行一次性解压,这种方法简单,且无需做其他的特殊处理,但受到网络的限制,等待文件同步完成常需要较长的时间,而这个时间点不可预知。等待所有文件传输完毕才能执行操作,这使得数据利用有较大的时延;另一种方法是每间隔一段时间查找获得当前目录下的文件列表,对比上一时间扫描得到的文件列表,对新增的文件进行解压,当文件数量较少时,该方法可以做到接近实时,设置的关键在于间隔时长,但随时间推移,文件数量增加,扫描的时间增长,对比需要花费的时间也随之增加,使得检测新增文件消耗不少资源。
目前现有技术提供的方法是等待文件传输完毕执行离线批处理或者通过间断扫描目标目录对检测到的新文件进行处理。前者是一种较为直接的方法,但只适合于对实时需求不高,且离线批处理性能较优时使用。后者提供了一个接近实时的处理方法,但其伴随产生了额外不断增长的资源消耗。
发明内容
提供一种实时处理远程同步文件的方法,其解决了现有技术的无法实时处理文件以及增加额外的资源消耗的缺点。
一方面,提供一种实时处理远程同步文件的方法,所述方法包括如下步骤:
从远程主机同步文件到指定目标文件夹;
对所述目标文件夹进行文件操作监控;
对目标监控行为进行检查,如检查出被操作文件符合要求的,将文件路径作为消息发送到消息系统;
多个文件处理实例从消息系统获取消息,所述消息包括:文件路径,执行具体的文件处理操作。
可选的,所述从远程主机同步到指定目标文件夹具体,包括:
使用Linux系统上的远程同步命令rsync将所述远程主机同步到指定目标文件夹。
可选的,所述对所述目标文件夹进行文件操作监控具体,包括:
使用基于Linux系统上inotify功能开发的python库pyinotify对所述目标文件进行操作监控。
可选的,所述从远程主机同步到指定目标文件夹具体,包括:
将每天的数据分别同步到对应的指定目标文件夹。
可选的,所述方法还包括:将日期作为主题,将该主题划分成多个分块。
可选的,所述多个文件处理实例从消息系统获取消息具体,包括:
使用多个进程从所述消息系统的一个主题的不同分块获取消息。
可选的,所述对目标监控行为进行检查,如检查出被操作文件符合要求的,将文件路径作为消息发送到消息系统具体,包括:
实时将被监控文件夹内的文件操作进行条件判断,将符合目标要求的操作记录的文件路径发送到消息系统。
可选的,所述执行具体的文件处理操作具体,包括:
使用并行算法执行具体的文件处理操作。
本发明具体实施方式提供的技术方案从数据流架构上实现了数据流的隔离划分、从多个层次提高数据处理的并行化、解决数据处理速度慢导致消息队列溢出的问题,以较高地效率完成了消息分发和文件处理的任务。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参阅图1,图1为本发明第一较佳实施方式提供的一种实时处理远程同步文件的方法,该方法由数据处理服务器完成,该数据处理服务器可以为如计算机、服务器等具有逻辑处理功能的设备,该方法如图1所示,包括如下步骤:
步骤S101、从远程主机同步到指定目标文件夹;
步骤S101的实现方法具体可以包括:使用Linux系统上的远程同步命令rsync实现数据接收服务器(即远程主机)和数据处理服务器的文件同步功能。
参照图2,在同步过程中,rsync的文件操作的方法如图2所示,包括如下步骤:
步骤S201、创建临时文件;
步骤S202、打开临时文件;
步骤S203、向临时文件写入;
步骤S204、关闭临时文件;
步骤S205、修改临时文件属性;
步骤S206、重命名临时文件(即移动临时文件)。
上述图2中各个步骤的实现方法可以参见Linux系统上远程同步命令rsync的介绍,这里不再赘述。
步骤S102、对目标文件夹进行文件操作监控;
上述步骤S103的实现方法具体可以为:
文件监控功能使用基于Linux系统上inotify功能开发的python库pyinotify,根据如图2所示的描述,单个文件同步完成的标志是文件移动(临时文件重命名为目标文件)指定监控的文件夹后,对于文件的移动操作会触发自定义的函数,对文件进行处理,对于文件夹同步,可以实现自动将子目录下的文件夹自动添加到监控文件夹列表中。由于文件处理速度一般比文件同步速度慢,随着时间的推移,待处理的文件队列很快就会溢出,因此本发明在处理函数中并不执行实质的处理操作,而是将文件路径发送到消息系统。
S103、对目标监控行为进行检查,如检查出被操作文件符合要求的,将文件路径作为消息发送到消息系统。
上述步骤S103的实现方法具体可以为,消息系统功能使用Kafka作为文件路径的缓存,对远程同步文件夹进行文件操作监控。具体为,文件监控功能使用基于Linux系统上inotify功能开发的python库pyinotify,根据所述S101中的描述,单个文件同步完成的标志是文件移动(临时文件重命名为目标文件)。指定监控的文件夹后,对于文件的移动操作会触发自定义的函数,对文件进行处理。对于文件夹同步,可以实现自动将子目录下的文件夹自动添加到监控文件夹列表中。由于文件处理速度一般比文件同步速度慢,随着时间的推移,待处理的文件队列很快就会溢出,因此本发明在处理函数中并不执行实质的处理操作,而是将文件路径发送到消息系统。Kafka有主题、分块、生产者、消费者等概念:一个主题是消息发布到的一个类别或订阅名称;一个主题可以划分为多个分区,每个分区是一个不断被追加的有序的消息序列;生产者负责将消息发布到自定义的主题中,包括选择哪个消息分配给话题内的哪个分区;消费者负责从指定的主题和分块获取消息。
为了便于维护和解除数据的耦合,以日期作为话题,文件监控模块作为生产者,每天对监控到的文件路径发布到消息系统,提供作为消费者的程序获取。为了提高文件的处理速度,考虑到Python的多线程的限制,本发明使用多进程对文件流处理,为此在消息系统中提高了话题的分块数量,每个处理文件的进程对接话题的一个分块。
步骤S104、多个文件处理实例从消息系统获取消息(即待处理文件的路径),执行具体处理操作。
上述步骤S104的实现方法具体可以为,文件处理的具体功能依照实际应用需求,本发明实际应用的一个例子是对压缩文件解压,同时在解压出的文本的行末添加文件名信息,并根据数据的类型分类,由于对文件的处理流程一致,在Python实现时可根据需要调用multiprocessing模块,提高文件处理的并行度。
本发明具体实施方式提供的技术方案从数据流架构上实现了数据流的隔离划分、从多个层次提高数据处理的并行化、解决数据处理速度慢导致消息队列溢出的问题,以较高地效率完成了消息分发和文件处理的任务。
可选的,上述从远程主机同步到指定目标文件夹具体,包括:
将每天的数据分别同步到对应的指定目标文件夹。即以日期划分,每天的数据分别同步到指定的目标文件夹,这样能降低数据的耦合度,便于调试和应对故障恢复。
可选的,上述方法还包括:将日期作为主题,将该主题划分成多个分块。
可选的,上述多个文件处理实例从消息系统获取消息具体,包括:
使用多个进程从所述消息系统的一个主题的不同分块获取消息。
可选的,上述对目标监控行为进行检查,如检查出被操作文件符合要求的,将文件路径作为消息发送到消息系统具体,包括:
实时将被监控文件夹内的文件操作进行条件判断,将符合目标要求的操作记录的文件路径发送到消息系统。
可选的,上述执行具体的文件处理操作具体,包括:
使用并行算法执行具体的文件处理操作。使得上述方案实现多级并行化,提高处理效率的机制。
需要说明的是,对于前述的各方法实施方式或实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为根据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述实施方式或实施例均属于优选实施例,所涉及的动作和单元并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
本发明实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。
本发明实施例装置中的单元可以根据实际需要进行合并、划分和删减。本领域的技术人员可以将本说明书中描述的不同实施例以及不同实施例的特征进行结合或组合。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可以用硬件实现,或固件实现,或它们的组合方式来实现。当使用软件实现时,可以将上述功能存储在计算机可读介质中或作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是计算机能够存取的任何可用介质。以此为例但不限于:计算机可读介质可以包括随机存取存储器(Random Access Memory,RAM)、只读存储器(Read-Only Memory,ROM)、电可擦可编程只读存储器(Electrically ErasableProgrammable Read-Only Memory,EEPROM)、只读光盘(Compact Disc Read-OnlyMemory,CD-ROM)或其他光盘存储、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质。此外。任何连接可以适当的成为计算机可读介质。例如,如果软件是使用同轴电缆、光纤光缆、双绞线、数字用户线(Digital SubscriberLine,DSL)或者诸如红外线、无线电和微波之类的无线技术从网站、服务器或者其他远程源传输的,那么同轴电缆、光纤光缆、双绞线、DSL或者诸如红外线、无线和微波之类的无线技术包括在所属介质的定影中。如本发明所使用的,盘(Disk)和碟(disc)包括压缩光碟(CD)、激光碟、光碟、数字通用光碟(DVD)、软盘和蓝光光碟,其中盘通常磁性的复制数据,而碟则用激光来光学的复制数据。上面的组合也应当包括在计算机可读介质的保护范围之内。
总之,以上所述仅为本发明技术方案的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。