一. 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++能力,还是交给大牛去做吧
分享到:
相关推荐
包含编译好的FacebookService, fb_status, FacebookBase, LogEntry, ResultCode, scribe类。 按照完thrift和scribe后,就不用自己生成了。
Oauth实例(使用Scribe-java实现新浪微博的Oauth)
scribe软件
如果您想自己尝试一下,则可以以某种方式安装摄像机并花费数小时进行绘制,但是更有效的方法是使用VideoScribe。它使您可以创建自己绘制的视频演示文稿。界面的现代设计及其直观的控件使此过程尽可能简单。 该软件...
scribe-1.3.5.jar
很好的东西,描述如何详细的安装scribe,编写安装脚本
scribe客户端所需要用到的jar包,里面还包含一个java客户端用log4j向scribe服务端发送日志的小例子
facebook的log系统 - scribe
VideoScribe.exeVideoScribe.exeVideoScribe.exeVideoScribe.exeVideoScribe.exeVideoScribe.exe
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, ...
VideoScribe手绘视频制作软件
Facebook大量数据处理 Scribe ,Scribe旨在帮助Facebook处理服务器上的大量数据,正像Scribe网页所述“如经常访问Fa...
Flat earth scribe
一款非常有趣的手绘动画视频制作软件,我们经常会看到一些创意动画视频,其中就有一只拿着画笔的手画出整幅画面,就像快进效果的沙画一样。这种手绘视频不仅有创意,还可以装X,自己可以制定视频内容,可以是你跟你...
thrift框架的分布式日志记录框架,支持多种语言实现。
scribe日志系统使用文档 本文档描述scribe日志的发送,日志内容分析,用户行为的统计,系统错误信息的记录和统计内容和错误内容的查询
最佳环境 CentOS 5.4 Scribe真正可用rpm安装包 apache-thrift-0.7.0-1.x86_64.rpm,fb303-0.7.0-1.x86_64.rpm,scribe-2.2-3.x86_64.rpm。无需编译,一命令安装。简单快捷,方便部署。 ============================...
Scribe is a server for aggregating log data streamed in real time from a large number of servers. It is designed to be scalable, extensible without client-side modification, and robust to failure of ...
Scribe is a server for aggregating log data streamed in real time from a large number of servers. It is designed to be scalable, extensible without client-side modification, and robust to failure of ...
scribe-example - 使用示例 入门 克隆仓库 git clone https://github.com/caiiiycuk/scribe-log4j.git 将 scribe-client 安装到本地 maven 仓库 cd scribe-log4j/scribe-client mvn install 运行聚合日志的 scribe...