日志数据的存储方法及系统与流程

文档序号:12747729阅读:923来源:国知局
日志数据的存储方法及系统与流程

本发明涉及计算机技术领域,尤其涉及一种日志数据的存储方法及系统。



背景技术:

日志数据里蕴含有价值的信息。日志数据的及时有效的存储和分析,能够带来客观的商业价值。比如,通过分析服务器运行日志数据,我们可以分析发生故障的原因。通过分析电商网站的日志数据,我们可以了解用户最近的浏览/购买行为的变化,进而为其进行个性化的推荐。可见,个性化的分析需要我们保留明细的日志数据,而实时分析则要求我们尽快地把数据装载到数据仓库中。这是个性化实时分析的两个挑战,也就是明细数据不能丢失,数据要尽快装载。

传统的日志处理技术只关注宏观信息,直接在数据流上进行一些简单检测,只需要保存必要的汇总数据,并且对数据入库的延迟问题没有具体要求。

在实现本发明过程中发明人发现现有的日志数据的处理技术中至少存在以下缺陷:

传统的日志处理技术无法快速实现日志数据中留明细日志数据的暂存,而且不能确保日志数据无丢失、快速地进入数据仓库。



技术实现要素:

鉴于上述问题,本发明提出了一种日志数据的存储方法及系统,能够实现日志数据的无丢失暂存与快速装载。

本发明的一个方面,提供了一种日志数据的存储方法,包括:

将日志数据按照所属实体簇的不同划分为多个日志记录分片;

将各个日志记录分片分别写入分布式消息队列的不同主题;

采用多线程方式,将所述分布式消息队列的不同主题中存放的日志记录分片并行装载到分布式文件系统。

可选地,所述方法还包括:

通过接收日志数据流中包含的日志和/或读取指定文件中的日志实现日志数据的获取。

可选地,所述将日志数据按照所属实体簇的不同划分为多个日志记录分片,包括:

根据实体到实体簇的映射关系,将日志数据按照所属实体簇的不同划分为多个日志记录分片;

其中,日志记录分片中包含有不同实体的日志数据。

可选地,所述方法还包括:

在所述分布式文件系统的每个数据节点上配置一个数据装载器,并为每一数据装载器划分对应的数据装载任务;

所述数据装载任务包含实体簇集以及该实体簇集对应的主题集;

所述主题集为所述实体簇集对应的日志记录分片在分布式消息队列中所存放的多个消息队列主题。

可选地,所述采用多线程方式,将所述分布式消息队列的不同主题中存放的日志记录分片并行装载到分布式文件系统,包括:

运行各个数据装载器,以使每一数据装载器根据其对应的数据装载任务,采用多线程方式从所述数据装载任务中包含的实体簇集对应的主题集中拉取日志记录分片,其中,每个线程拉取一个主题的日志记录分片;

将各数据装载器拉取的日志记录分片,以压缩列存储格式保存到分布式文件系统。

可选地,所述将各数据装载器拉取的日志记录分片,以压缩列存储格式保存到分布式文件系统,包括:

每一数据装载器分别监控各自启动的多线程所拉取的日志记录分片的数据总量是否达到预设的数据阈值;

若达到预设的数据阈值,则对每一线程所拉取的日志记录分片进行数据排序,并且把各个线程所拉取的日志记录分片进行组合,生成日志数据块;

将所述日志数据块以压缩列存储格式保存到分布式文件系统。

可选地,所述将所述日志数据块以压缩列存储格式保存到分布式文件系统之后,还包括:

创建第一元信息表Block表,所述第一元信息表中包含有日志数据块的ID、日志数据块在分布式文件系统上的逻辑文件名,以及该日志数据块包含的实体簇信息,所述实体簇信息至少包括实体簇的ID;

创建第二元信息表Offset表,所述第二元信息表中包含实体簇的ID,以及该实体簇ID对应消息队列的主题的偏移地址。

可选地,所述方法还包括:

定期对所述分布式文件系统中每个数据节点上配置的数据装载器对应的数据装载任务进行调整。

本发明的又一个方面,提供了一种日志数据的存储系统,包括:

数据划分单元,用于将日志数据按照所属实体簇的不同划分为多个日志记录分片;

数据写入单元,用于将各个日志记录分片分别写入分布式消息队列的不同主题;

数据装载单元,用于采用多线程方式,将所述分布式消息队列的不同主题中存放的日志记录分片并行装载到分布式文件系统。

可选地,所数系统还包括:

配置单元,用于在所述分布式文件系统的每个数据节点上配置一个数据装载器,并为每一数据装载器划分对应的数据装载任务;

所述数据装载任务包含实体簇集以及该实体簇集对应的主题集;

所述主题集为所述实体簇集对应的日志记录分片在分布式消息队列中所存放的多个消息队列主题;

数据装载单元,具体用于运行各个数据装载器,以使每一数据装载器根据其对应的数据装载任务,采用多线程方式从所述数据装载任务中包含的实体簇集对应的主题集中拉取日志记录分片,其中,每个线程拉取一个主题的日志记录分片;以及,将各数据装载器拉取的日志记录分片,以压缩列存储格式保存到分布式文件系统。

本发明实施例提供的日志数据的存储方法及系统,通过将日志数据按照所属实体簇的不同划分为多个日志记录分片,并分别写入分布式消息队列的不同主题,将分布式消息队列的不同主题中存放的日志记录分片采用多线程方式并行装载到分布式文件系统,不仅实现了日志数据的并行、快速的存储,保证日志数据不丢失,而且并行装载方式还能够保证日志数据以方便查询的格式装载到数据仓库中。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示出了本发明实施例的一种日志数据的存储方法的流程图;

图2示出了本发明另一实施例的一种日志数据的存储方法的流程图;

图3示出了本发明实施例的一种日志数据的存储方法中步骤S13的细分流程图;

图4示出了本发明实施例中日志数据装载的并行处理的原理示意图;

图5示出了本发明实施例的一种日志数据的存储系统的结构示意图;

图6示出了本发明另一实施例的一种日志数据的存储系统的系统架构图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。

本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非被特定定义,否则不会用理想化或过于正式的含义来解释。

图1示意性示出了本发明一个实施例的日志数据的存储方法的流程图。参照图1,本发明实施例的日志数据的存储方法具体包括以下步骤:

S11、将日志数据按照所属实体簇的不同划分为多个日志记录分片。

日志数据记录了关于实体的事件信息。比如在电子商务网站日志中,日志记录分片描述的实体是用户和商品。在本实施例中,用户是主实体,商品是从实体。

本发明实施例中提供的日志数据的存储方法将基于主实体展开,从实体的处理是类似的。

在大数据处理应用中,一个重要的原则是利用空间换取时间,也就是数据可以存放多个副本。本发明实施例中基于这样的策略,可将主实体的日志划分保存在2个副本中,从实体的日志划分保存在1个副本中,总共三个副本。面向主实体的查询,将引导到基于主实体划分的副本上,而面向从实体的查询,将引导到以基于从实体划分的副本上。

在实体的基础上,本实施例中把实体组织成实体簇(Entity Fiber,简称Fiber)。并基于实体簇的划分将日志数据划分为多个日志记录分片。可理解的,实体簇是实体的一个子集。

S12、将各个日志记录分片分别写入分布式消息队列的不同主题。

本实施例中,在基于实体簇的概念对数据进行划分之后,进一步地将隶属不同的实体簇的日志记录分片,写入分布式消息队列的不同主题,通过持久化到硬盘暂存到消息队列的主题中,实现日志数据的可靠的无丢失的暂时存储。每个主题对应一个实体簇的日志记录分片,为后续并行装载提供支持。

S13、采用多线程方式,将所述分布式消息队列的不同主题中存放的日志记录分片并行装载到分布式文件系统。

需要说明的是,消息队列里的日志数据是不支持查询的,因此必须快速装载到数据仓库中。为了将日志数据以方便查询的格式装载到数据仓库中,本实施例中,通过将分布式消息队列的不同主题中存放的日志记录分片采用多线程方式并行装载到分布式文件系统,实现日志数据的并行和快速装载。其中,主副本将保存在本地,从副本由分布式文件系统选择合适的节点存放。

本发明实施例提供的日志数据的存储方法,通过将日志数据按照所属实体簇的不同划分为多个日志记录分片,并分别写入分布式消息队列的不同主题,将分布式消息队列的不同主题中存放的日志记录分片采用多线程方式并行装载到分布式文件系统,不仅实现了日志数据的无丢失暂存与快速装载,而且还能够保证日志数据以方便查询的格式装载到数据仓库中。

在本发明的一个可选实施例中,如图2所示,在步骤S11之前所述方法还包括以下步骤:

S10、通过接收日志数据流中包含的日志和/或读取指定文件中的日志实现日志数据的获取。

为了确保准确、全面的得到日志数据,实现日志数据的完整性存储,本发明实施例,通过接收上游应用的日志数据流过来的日志和/或读取保存在文件中的日志进行明细日志数据的获取。

在本发明的一个可选实施例中,步骤S11中的将日志数据按照所属实体簇的不同划分为多个日志记录分片,具体包括:

根据实体到实体簇的映射关系,将日志数据按照所属实体簇的不同划分为多个日志记录分片;其中,日志记录分片中包含有不同实体的日志数据。

本实施例中,日志数据中包含有多个实体的日志数据。

本实施例中,通过根据某种规则建立从实体到实体簇的映射关系,也可以通过哈希(Hash)函数或者范围(Range)函数等进行映射,得到实体到实体簇的映射关系。在接收上游日志数据流的日志,或者从日志文件读取日志数据获取到包含有不同实体的日志数据之后,根据实体到实体簇的映射关系,将日志数据按照所属实体簇的不同划分为多个日志记录分片。

在一个具体示例中,如在移动通讯应用中,呼叫记录的划分,可以根据不同地理区域的用户的呼叫的密集程度,对呼叫记录进行划分。某个区域的用户通讯更加频繁,可以把这个区域的用户划分到多个实体簇。某个区域的用户通讯量很少,可以把这个区域的用户和其他类似区域用户合并成一个实体簇。这样的实体簇划分,考虑了日志数据产生的时候的分布的倾斜特点,力图使装载程序(Loader)将要接收的各个实体簇的日志数据较为均衡。

本发明实施例,通过根据实体到实体簇的映射关系,对日志数据进行划分,不同实体簇的日志数据写入分布式消息队列的不同主题,只需实现映射操作和转发功能,进而可以达到很高的数据吞吐量,确保日志数据的快速存储。

在本发明的一个可选实施例中,所述方法还包括以下步骤:在所述分布式文件系统的每个数据节点上配置一个数据装载器,并为每一数据装载器划分对应的数据装载任务;所述数据装载任务包含实体簇集以及该实体簇集对应的主题集;所述主题集为所述实体簇集对应的日志记录分片在分布式消息队列中所存放的多个消息队列主题。本发明实施例中,通过数据装载器Loader程序,把日志数据直接装载到分布式文件系统上。在分布式文件系统的每个数据节点Data Node上运行一个Loader,负责其数据装载任务中实体簇集对应日志记录分片的装载。各个Data Node上的Loader负责各自的Fiber集,实现并行装载。

进一步地,上述实施例中的步骤S13,如图3所示,具体包括如下步骤:

S131、运行各个数据装载器,以使每一数据装载器根据其对应的数据装载任务,采用多线程方式从所述数据装载任务中包含的实体簇集对应的主题集中拉取日志记录分片,其中,每个线程拉取一个主题的日志记录分片。

本发明在分布式文件系统的格式数据节点上(Data Node)运行数据装载器(Loader)。数据装载器,以多线程方式运行,各个线程负责一个Fiber数据的抓取。

S132、将各数据装载器拉取的日志记录分片,以压缩列存储格式保存到分布式文件系统。具体包括:每一数据装载器分别监控各自启动的多线程所拉取的日志记录分片的数据总量是否达到预设的数据阈值;若达到预设的数据阈值,则对每一线程所拉取的日志记录分片进行数据排序,并且把各个线程所拉取的日志记录分片进行组合,生成日志数据块;将所述日志数据块以压缩列存储格式保存到分布式文件系统。

其中,预设的数据阈值可以为一个数据块的大小。

在实际应用中,各个Loader根据自己负责的Fiber数量,启动若干线程,每个线程负责拉取处在消息队列中的该Fiber数据,图4为本发明实施例中日志数据装载的并行处理的原理示意图,如图4所示。当的这些线程的数据总量达到一个数据块大小的时候,Loader将所有的线程的临时数据,组织成一个数据块。每个Fiber内部需要根据实体ID对相应的日志记录分片进行记录排序,多个Fiber数据组织在一块,以压缩的Parquet格式(一种列存储格式)保存到分布式文件系统系统中,以节省空间。

而且本发明实施例中采用Parquet列存储格式,有利于加快后续分析查询的性能。由于分析型查询一般只涉及少数的数据列,列存储避免了无关数据列的读取,为后续的查询性能提供了保障。

本发明实施例中,在所述将所述日志数据块以压缩列存储格式保存到分布式文件系统之后,还包括:

创建第一元信息表Block表,所述第一元信息表中包含有日志数据块的ID、日志数据块在分布式文件系统上的逻辑文件名,以及该日志数据块包含的实体簇信息,所述实体簇信息至少包括实体簇的ID;

创建第二元信息表Offset表,所述第二元信息表中包含实体簇的ID,以及该实体簇ID对应消息队列的主题的偏移地址。

在实际应用中,可根据第二元信息表Offset表确定某一主题现在已经入库的日志记录分片到哪一条了,没有入库的还有哪些,以便系统失败以后,重启。

本发明实施例中,分布式文件系统优先在本地写入数据块的主副本,然后在集群上寻找合适的节点存放另外两个副本。数据块写入分布式文件系统以后,进一步,创建第一元信息表并在第一元信息表即Block表里,根据本数据块包含的Fiber数量,写入多条元信息记录,记录的内容为:数据块ID(Block_id)、Fiber ID(Fiber_id))、Fiber的最小时间戳(start_time)、Fiber的最大时间戳(end_time)、Fiber的记录数量(record_count)、以及该数据块在分布式文件系统上的逻辑文件名(block_location)。

登记了上述元信息后,表示消息队列里这些Fiber的相关记录已经完整入库,本发明是实施例通过创建第二元信息表即Offset表。Offset表包含两个字段,一个是Fiber ID,一个是Offset,表示消息队列里该Fiber对应的日志记录分片已经处理到哪个偏移量,以便于当Loader发生失败,然后重启的时候,可以准确地知道应该从哪个位置开始继续拉数据入库,进而数据不丢失地、完整地存储。

此外,本发明实施例中,还包括将上述单个表数据通过视图机制(View)整合成一个逻辑表格的步骤。本实施例可以把一个表格,如LineItem表,对应的一系列数据块的各个文件,通过视图机制(View)整合成一个逻辑表格,实现整体表数据的可视化显示,方便查询。

在本发明的一个可选实施例中,所述日志数据的存储方法还包括以下步骤:定期对所述分布式文件系统中每个数据节点上配置的数据装载器对应的数据装载任务进行调整。

在本发明实施例中,数据装载器对应的数据装载任务可通过建立Fiber到每个Loader的映射关系的方法实现。例如,对于上千万、甚至上亿的用户(实体)量,可以把它们划分成上万个Fiber。在上百台机器构成的集群上,每个Data Node负责几十、上百个Fiber数据的装载,精细的Fiber划分有利于在各个Data Node之间实现负载均衡。

进一步地,本发明实施例定期对数据装载任务即从Fiber到Data Node的映射关系进行调整,以保证每个Fiber,在第一时间段主要保存某些Fiber到某个Data Node上,而过了一段时间则保存这些Fiber到另外一个Data Node上。通过映射的调整,称为Mapping Shuffle。数据装载任务的调整能够避免出现特别繁忙的Data Node,进而实现数据装载的负载均衡。

对于从实体对应的日志数据的存储方法实施例而言,由于其与主实体对应的日志数据的存储方法实施例基本相似,因此不做过多描述,相关之处参见主实体对应的日志数据的存储方法实施例的部分说明即可。

对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。

图5示意性示出了本发明一个实施例的日志数据的存储系统的结构示意图。参照图5,本发明实施例的日志数据的存储系统具体包括数据划分单元501、数据写入单元502以及数据装载单元503,其中:

数据划分单元501,用于将日志数据按照所属实体簇的不同划分为多个日志记录分片;

数据写入单元502,用于将各个日志记录分片分别写入分布式消息队列的不同主题;

数据装载单元503,用于采用多线程方式,将所述分布式消息队列的不同主题中存放的日志记录分片并行装载到分布式文件系统。

本发明实施例提供的日志数据的存储系统,数据划分单元501将日志数据按照所属实体簇的不同划分为多个日志记录分片,并通过数据写入单元502分别写入分布式消息队列的不同主题,数据装载单元503将分布式消息队列的不同主题中存放的日志记录分片采用多线程方式并行装载到分布式文件系统,本发明实施例不仅实现了日志数据的并行、快速的存储,保证日志数据不丢失,而且并行装载方式还能够保证日志数据以方便查询的格式装载到数据仓库中。

在本发明的一个可选实施例中,所述系统还包括附图中未示出的获取单元,该获取单元,用于通过接收日志数据流中包含的日志和/或读取指定文件中的日志实现日志数据的获取。

在本发明的一个可选实施例中,所述数据划分单元501,具体用于根据实体到实体簇的映射关系,将日志数据按照所属实体簇的不同划分为多个日志记录分片;其中,日志记录分片中包含有不同实体的日志数据。

本实施例中,日志数据中包含有多个实体的日志数据。

在本发明的一个可选实施例中,所数系统还包括附图中未示出的配置单元,该配置单元,用于在所述分布式文件系统的每个数据节点上配置一个数据装载器,并为每一数据装载器划分对应的数据装载任务;

其中,所述数据装载任务包含实体簇集以及该实体簇集对应的主题集;

其中,所述主题集为所述实体簇集对应的日志记录分片在分布式消息队列中所存放的多个消息队列主题;

进一步地,数据装载单元503,具体用于运行各个数据装载器,以使每一数据装载器根据其对应的数据装载任务,采用多线程方式从所述数据装载任务中包含的实体簇集对应的主题集中拉取日志记录分片,其中,每个线程拉取一个主题的日志记录分片;以及,将各数据装载器拉取的日志记录分片,以压缩列存储格式保存到分布式文件系统。

在本发明的一个可选实施例中,所述数据装载单元503,具体还用于每一数据装载器分别监控各自启动的多线程所拉取的日志记录分片的数据总量是否达到预设的数据阈值;若达到预设的数据阈值,则对每一线程所拉取的日志记录分片进行数据排序,并且把各个线程所拉取的日志记录分片进行组合,生成日志数据块;以及将所述日志数据块以压缩列存储格式保存到分布式文件系统。

在本发明的一个可选实施例中,所述系统还包括附图中未示出的记录单元,该记录单元,用于在将所述日志数据块以压缩列存储格式保存到分布式文件系统之后,创建第一元信息表Block表,所述第一元信息表中包含有日志数据块的ID、日志数据块在分布式文件系统上的逻辑文件名,以及该日志数据块包含的实体簇信息,所述实体簇信息至少包括实体簇的ID;以及创建第二元信息表Offset表,所述第二元信息表中包含实体簇的ID,以及该实体簇ID对应消息队列的主题的偏移地址。

在本发明的一个可选实施例中,所述配置单元,还用于定期对所述分布式文件系统中每个数据节点上配置的数据装载器对应的数据装载任务进行调整。

在实际应用中,所述数据划分单元可通过数据源适配器和数据分片器实现,而且,该系统还包括查询处理器,该查询处理器可以把一个表格,如LineItem表,对应的一系列数据块的各个文件,通过视图机制(View)整合成一个逻辑表格,实现整体表数据的可视化显示,方便查询,具体系统架构如图6所示。

对于系统实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本发明实施例提供的日志数据的存储方法及系统,通过将日志数据按照所属实体簇的不同划分为多个日志记录分片,并分别写入分布式消息队列的不同主题,将分布式消息队列的不同主题中存放的日志记录分片采用多线程方式并行装载到分布式文件系统,不仅实现了日志数据的并行、快速的存储,保证日志数据不丢失,而且并行装载方式还能够保证日志数据以方便查询的格式装载到数据仓库中。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1