一. BufferStore
BufferStore,它包含两个Store, 笔者这里primaryStore是hdfsFileStore,secondaryStore是stdFileStore。
整个BufferStore工作的时候是一个有限状态自动机,有以下几个状态:
DISCONNECTED, SENDING_BUFFER, STREAMING,
三个状态的含义是主store挂球, 主store恢复并从次store 恢复数据,主store正常工作
有两种事件会可能改变状态
1. handleMessage
if(STREAMING) primaryStore->handleMessage, if fail ,从STREAMING跳到DISCONNECT
if(!STREAMING), secondaryStore->handleMessage(这时候出问题数据丢失)
2. periodCheck(定期检查)
if(DISCONNECTED && ts-lastTs>period) primaryStore->open, if success&&replayBuffer 从STREAMING跳到SENDING_BUFFER, if success&&!replayBuffer,从STREAMING跳到STREAMING, if !success,保持DISCONNECTED
if(SENDING_BUFFER), 将secondaryStore积累的消息flush到primaryStore,如果成功了跳到STREAMING, 如果失败或者报异常跳到DISCONNECTED
changeStore做的事情, 如果前状态是STREAMING, secondaryStore->open
如果后状态是DISCONNECTED, 增加retrytimes,重新设置retryinterval, 如果secondaryStore没open, open
如果后状态是STREAMING, sencondaryStore->close
如果后状态是SENDING_BUFFER, try secondaryStore->open if not
二. 与hadoop-1.0.4工作时候的问题
HdfsFile.cpp 在创建hdfsFileSystem时候使用的是hdfsConnectNewInstance,对每次创建返回一个new的对象,但是hadoop-1.0.4的libhdfs 中没有这个接口
,所以笔者先将其改为hdfsConnect, 但是这样会出现一个问题, 这个connect返回的是一个全局的singleton, 这样第一个categoryA的消息来了建立一次,正常工作,第二个categoryB来了再调用一次,正常工作,但是再来一次第一个categoryA的消息时,其HdfsFile对象的fileSys已经没有了hdfsfilesystem的句柄了(假装自己是c++大牛, 其实就是不work了,不知道是不是它的句柄被释放了),这样问题就来了,处在STREAMING状态,但是写不进去东西,这样就会跳到DISCONNECTED,这样两个category的消息交错进入scribed,两个category的自动机就会不停的跳状态,然后交错使用primary 和 secondary两个store,然后还要将secondary 的数据buffer进primary,这样其实是个不正常的状态
限于笔者屎一般的c++能力,笔者将HdfsFile的fileSys做成了这个类的静态成员变量,所有category的primaryStore 的HdfsFile对象都共用一个hdfsFileSystem,就不贴代码了,
笔者觉得正经的做法是在libhdfs里面仿照 hadoop-0.21添加一个hdfsConnectNewInsance的接口重新生成一个库,供Scribed调用,不过如前文所说限于笔者屎一般的c++能力,还是交给大牛去做吧
分享到:
相关推荐
在实际应用中,scribe常与其它日志处理工具结合使用,例如Logstash或Fluentd,以实现更复杂的数据处理和分析。同时,它也可以配合监控系统如Nagios、Grafana,为运维人员提供实时的日志监控和报警功能。 要使用...
在这个实例中,我们将使用Scribe-java库来实现OAuth与新浪微博的集成。 Scribe-java是一个轻量级的Java库,专门用于处理OAuth 1.0a和OAuth 2.0的身份验证流程。这个库简化了与各种OAuth服务提供商的交互,包括获取...
scribe是一个广泛使用的日志聚合系统,主要设计用于收集、分类和转发分布式系统的日志数据。在大型分布式环境中,如Hadoop或Facebook等,scribe扮演着至关重要的角色,它允许各个节点将日志数据发送到中心位置进行...
生成 Thrift 头文件是使用 Scribe 的关键步骤,需要找到 scribe.thrift 和 fb303.thrift 文件,然后使用 thrift 工具生成对应语言的代码,例如在 PHP 中,执行 `thrift -r --gen php scribe.thrift`。生成的代码将...
在这个压缩包中,你可能会找到scribe客户端所需的jar包以及一个示例程序,帮助你理解如何使用scribe来处理Java应用程序的日志。 scribe的核心功能在于提供了一个统一的接口,允许应用将日志数据发送到中央日志收集...
包含编译好的FacebookService, fb_status, FacebookBase, LogEntry, ResultCode, scribe类。 按照完thrift和scribe后,就不用自己生成了。
3. **Category**:Scribe 使用"Category"来区分不同类型的日志,每个Category可以有自己的存储策略和生命周期。 ### 三、工作流程 1. **日志收集**:每个日志生成者(Producer)将日志信息按照特定格式封装成消息...
在压缩包内的文件名称列表中,“使用说明.txt”是为用户提供操作指导的文档,帮助用户了解如何安装、配置和使用VideoScribe;而“VideoScribe2.3.4中文汉化可输入汉字”则意味着这是一个经过汉化的版本,不仅语言...
**Scribe:Facebook的大数据处理框架** 在大数据领域,Facebook作为全球最大的社交网络之一,面临着海量数据的...在实际应用中,根据具体需求,开发者可以选择Scribe与其他工具搭配使用,构建更完善的大数据处理架构。
通过使用Scribe,开发者可以轻松地集成日志收集功能到他们的应用中,无需关心如何处理大量日志数据的复杂性。 【junrar.zip】则包含了一个名为"junrar"的Java库,这是一个开源的RAR文件解压缩工具。Junrar是基于 ...
音乐功能则允许用户导入背景音乐或使用内置音效,为视频增添情感色彩,增强观看体验。音乐与手绘动画的完美结合,能够创造出引人入胜的故事叙述,让观众沉浸在视听的双重享受中。 此外,VideoScribe也提供了图标...
一款非常有趣的手绘动画视频制作软件,我们经常会看到一些创意动画视频,其中就有一只拿着画笔的手画出整幅画面,就像快进效果的沙画一样。这种手绘视频不仅有创意,还可以装X,自己可以制定视频内容,可以是你跟你...
如果您想自己尝试一下,则可以以某种方式安装摄像机并花费数小时进行绘制,但是更有效的方法是使用VideoScribe。它使您可以创建自己绘制的视频演示文稿。界面的现代设计及其直观的控件使此过程尽可能简单。 该软件...
scribe-1.3.5.jar
VideoScribe的使用流程大致如下: 1. **启动项目**:打开软件,创建新项目,设置视频的分辨率和帧率。 2. **添加元素**:从内置库中选择或导入图片、文字、音频等元素,放置在画布上。 3. **设定动画**:为每个元素...
综上所述,通过结合使用 Scribe、Hadoop、Log4j、Hive 和 MySQL 这些工具和技术,可以构建一套完整的日志数据采集、存储、处理和分析的解决方案。这对于深入理解用户行为、提升系统性能等方面都具有重要意义。
scribe-2.2.tar.gz 下载地址: https://github.com/facebook/scribe Scribe is a server for aggregating log data streamed in real time from a large number of servers. It is designed to be scalable, ...
- **客户端集成**: 应用程序需要使用Scribe的API或客户端库(如Python或C++)来发送日志到Scribe服务器。 - **日志流管理**: 创建和管理日志流,定义日志的分类和处理方式。 - **监控与调试**: 可以使用Scribe自带的...
3. **服务控制**:通过 `scribed` 命令启动和停止 Scribe 服务,使用 `scribe_ctrl` 工具进行监控和管理。 【Thrift+Scribe 的日志收集系统】 在 Thrift+Scribe 构建的分布式日志系统中,日志的产生端(如服务器或...
【标题】"scribe-ink-jdk-1.5.1.zip" 提供的是一个名为 "scribe-ink-jdk-1.5.1" 的软件包,可能是某个特定版本的 JDK (Java Development Kit) 实现,可能由开源社区 "scribe-ink" 开发。JDK 是开发和运行 Java 应用...