1.一种基于Storm流式计算框架多并发写文件的方法,其特征在于:包括如下步骤:
步骤1、利用消息获取任务线程采集原始消息,并将所述原始消息以数组形式发送给消息处理任务线程中任一一个线程;
步骤2、通过消息处理任务线程对获取到的消息进行处理,得到处理后的消息,并将处理后的消息写入同一队列中;
步骤3、通过一队列处理线程初始化文件大小、默认批次和文件路径,并划分文件块,记录文件写入的起始位置和结束位置,通过所述队列处理线程获取队列中的消息按批次发送给一异步线程池;
步骤4、通过异步线程池根据所述队列处理线程传来的数据使用异步方式写文件,所述异步线程池包括复数个写文件线程,且每一写文件线程对应写一个文件块。
2.根据权利要求1所述的一种基于Storm流式计算框架多并发写文件的方法,其特征在于:在所述消息处理任务线程初始化的时候,以单例模式一起启动队列处理线程,保证一个工作进程中对应一个队列。
3.根据权利要求1所述的一种基于Storm流式计算框架多并发写文件的方法,其特征在于:所述步骤3进一步包括:
步骤31、通过一队列处理线程初始化文件大小、默认批次和文件路径,并划分文件块,记录文件写入的起始位置和结束位置,所述批次大小为消息条数;
步骤32、通过所述队列处理线程实时监听队列,当监听到队列中有消息时,根据结束位置和文件大小判断是否需要创建新的文件路径,若结束位置大于或等于文件大小,则新建一个文件路径,并将起始位置和结束位置置为0,进入步骤33,否则,直接进入步骤33;
步骤33、创建一个空的集合类,所述集合类的默认大小设为批次大小,用于存储每一批次的消息;
步骤34、通过所述队列处理线程循环地从队列中获取消息存放在集合类里,同时根据添加的消息修改结束位置,直至集合类的消息数大于批次大小或者结束位置不小于文件大小或者队列为空,结束循环,进入步骤35;
步骤35、判断所述集合类是否为空,若是,则返回步骤32,否则,通过所述队列处理线程将文件路径、集合类、起始位置作为参数传递给异步线程池,修改起始位置为结束位置。
4.根据权利要求1所述的一种基于Storm流式计算框架多并发写文件的方法,其特征在于:所述步骤4具体为:通过异步线程池中空闲的写文件线程获取所述队列处理线程传递的集合类和文件路径,并根据起始位置将集合类中的消息写入到所给文件对应的文件块位置,所述文件块大小为集合类中所有消息的大小,所述集合类用于存放每一批次消息。
5.一种基于Storm流式计算框架多并发写文件的系统,其特征在于:包括一消息采集模块、一队列存储模块、一批次处理模块和一异步写文件模块:
所述消息采集模块,用于利用消息获取任务线程采集原始消息,并将所述原始消息以数组形式发送给消息处理任务线程中任一一个线程;
所述队列存储模块,用于通过消息处理任务线程对获取到的消息进行处理,得到处理后的消息,并将处理后的消息写入同一队列中;
所述批次处理模块,用于通过一队列处理线程初始化文件大小、默认批次和文件路径,并划分文件块,记录文件写入的起始位置和结束位置,通过所述队列处理线程获取队列中的消息按批次发送给一异步线程池;
所述异步写文件模块,用于通过异步线程池根据所述队列处理线程传来的数据使用异步方式写文件,所述异步线程池包括复数个写文件线程,且每一写文件线程对应写一个文件块。
6.根据权利要求5所述的一种基于Storm流式计算框架多并发写文件的系统,其特征在于:在所述消息处理任务线程初始化的时候,以单例模式一起启动队列处理线程,保证一个工作进程中对应一个队列。
7.根据权利要求5所述的一种基于Storm流式计算框架多并发写文件的系统,其特征在于:所述批次处理模块进一步包括:
一初始化参数模块,用于通过一队列处理线程初始化文件大小、默认批次和文件路径,并划分文件块,记录文件写入的起始位置和结束位置,所述批次大小为消息条数;
一监听模块,用于通过所述队列处理线程实时监听队列,当监听到队列中有消息时,根据结束位置和文件大小判断是否需要创建新的文件路径,若结束位置大于或等于文件大小,则新建一个文件路径,并将起始位置和结束位置置为0,执行集合类创建模块,否则,直接执行集合类创建模块;
一集合类创建模块,用于创建一个空的集合类,所述集合类的默认大小设为批次大小,用于存储每一批次的消息;
一消息存储模块,用于通过所述队列处理线程循环地从队列中获取消息存放在集合类里,同时根据添加的消息修改结束位置,直至集合类的消息数大于批次大小或者结束位置不小于文件大小或者队列为空,结束循环,执行发送模块;以及
一发送模块,用于判断所述集合类是否为空,若是,则返回执行监听模块,否则,通过所述队列处理线程将文件路径、集合类、起始位置作为参数传递给异步线程池,修改起始位置为结束位置。
8.根据权利要求5所述的一种基于Storm流式计算框架多并发写文件的系统,其特征在于:所述异步写文件模块具体为:通过异步线程池中空闲的写文件线程获取所述队列处理线程传递的集合类和文件路径,并根据起始位置将集合类中的消息写入到所给文件对应的文件块位置,所述文件块大小为集合类中所有消息的大小,所述集合类用于存放每一批次消息。