- 博客(130)
- 资源 (9)
- 收藏
- 关注
原创 MapReduce源码分析之MapTask分析(二)
MapReduce源码分析之MapTask详解的后半段文章。在分析过程中我们知道了MapTask是如何使用循环缓存区管理数据,知道了数据在缓存不下是如何做spill处理的,spill输出的数据格式,combiner如何处理,如何将多一个文件merge为一个等等。也希望通过阅读这部分源码能学习到部分设计思路,能在未来的设计中提供多一种思路。
2014-08-04 22:21:17
6469
1
原创 MapReduce源码分析之MapTask分析
前言 MapReduce的源码分析是基于Hadoop1.2.1基础上进行的代码分析。 该章节会分析在MapTask端的详细处理流程以及MapOutputCollector是如何处理map之后的collect输出的数据。 map端的主要处理流程图1 MapTask处理流程 图1所示为MapTask的主要代码执行流程,在MapTask启动后会进入入口run函数,根据是否使用
2014-07-13 20:55:13
6928
原创 MapReduce源码分析之架构分析1
前言 MapReduce的源码分析是基于Hadoop1.2.1基础上进行的代码分析。 本篇,将不会涉及代码部分的分析,只是简单分析map的整体架构,并介绍map与reduce的运行过程,主要是为后续的分析做一个铺垫。至于MapTask/ReduceTask的原理分析,JobTracker部分,以及TaskTracker如何启动一个Task这些都将在后续章节给出。MR编程模型
2014-04-14 22:24:54
5233
1
原创 MapReduce源码分析之InputSplit分析
前言MapReduce的源码分析是基于Hadoop1.2.1基础上进行的代码分析。什么是InputSplit InputSplit是指分片,在MapReduce当中作业中,作为map task最小输入单位。分片是基于文件基础上出来的而来的概念,通俗的理解一个文件可以切分为多少个片段,每个片段包括了等信息。在MapTask拿到这些分片后,会知道从哪开始读取数据。Job
2014-04-03 23:15:55
13778
原创 迟到的2013年总结
前言 有近两个月没有写blog了,找个不算借口的借口吧,一直因为工作忙的缘故只剩上班和下班了。。特别是放假前加了一次到第二天两点,缓了几天感觉还是精气神仍旧有点没回过神来。。这可以说是工作以来加的最凶猛的一次,估计以后不太会有这样的场景了。 总的来说,在13年换了份工作,换了个行业,从技术角度来说属于开始从广度转向了深度,让自己更加专注于底层技术。同时,在13年让自己的
2014-01-28 22:14:46
3465
转载 HBase -ROOT-和.META.表结构(region定位原理)
在HBase中,大部分的操作都是在RegionServer完成的,Client端想要插入,删除,查询数据都需要先找到相应的RegionServer。什么叫相应的RegionServer?就是管理你要操作的那个Region的RegionServer。Client本身并不知道哪个RegionServer管理哪个Region,那么它是如何找到相应的RegionServer的?本文就是在研究源码的基础上揭
2013-11-24 13:50:01
18924
2
原创 storm-0.8.2源码分析之nimbus运行过程(一)
nimbus运行过程 这部分将详细讲述启动后,nimbus是如何运行的。在之前讲述nimbus启动过程,有提到nimbus.clj中有个通过defserverfn定义的核心函数service-handler,是实现了Thrift的service Nimbus代码生成的Nimbus.Iface这个句柄类,这个句柄类需要用户自己去实现内部每个函数的处理流程。在rpc client调
2013-10-30 22:38:12
5073
原创 redis-2.6.16源码分析之pub-sub系统
redis实现的发送订阅系统,即pub-sub,这部分的的代码比较少,也方便分析。在这只将会分析下普通的pub-sub(会忽略掉Pattern-matching subscriptions),以此来简述一个pubsub系统是如何实现的。 在redis主要有介绍redis的pub-sub,在开始之前, 需要知道redis的pubsub的几个命令:SUBSCRIBE first second
2013-09-02 22:26:57
4148
原创 storm-0.8.2源码分析之topology启动
topology启动 一个topology的启动包括了三个步骤 1)创建TopologyBuilder,设置输入源,输出源 2)获取config 3)提交topology(这里不考虑LocalCluster本地模式) 以storm.starter的ExclamationTopology为例:
2013-08-29 22:44:31
7906
原创 storm-0.8.2源码分析之nimbus启动
nimbus启动脚本启动逻辑 通过bin/stormnimbus会启动nimbus进程,类似hadoop的jobtracker。bin/storm是一个python写的脚本,支持jar,kill,nimbus,supervisor,ui,drpc等等命令。python的入口函数如下def main(): if len(sys.argv)
2013-08-29 22:41:40
6945
原创 简述thrift与应用分析
前言 本篇将以thrift-0.9.0为背景讲述thrift的基础,使用案例,启发。概述 thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa,JavaScript, Node.js, Sma
2013-07-14 21:06:40
10065
原创 多线程删除注册的事件
1.多线程删除注册的事件,因为事件响应总是会调用回调的,因此,在这通过注册和删除回调函数来阐述2.由于多线程环境去处理,那么需要注意事件增删的接口,会在任何地方调用,因此,需要处理好,即保证无递归产生死锁也要保证互斥性3.代码是伪代码,处理流程参考了libevent,libevent对于event的删除就是这么做的4.有可能描述不太清晰,具体可以去看libevent代码cl
2013-06-02 22:53:48
3374
原创 unp总结
第二章tcp从连接到关闭的状态变化图TIME_WAIT状态 1)可靠实现TCP全双工连接的终止;TCP执行主动关闭,并发送最后一个ACK,该连接必须在TIME_WAIT状态停留2MSL,如果另一端超时并重发最后的FIN,这样可以让TCP再次发送最后的ACK以防止这个ACK丢失2)允许老的重复分节在网络中消逝 以太网MTU 1500字节,MSS IPv4 1460,IPv6 1
2013-06-02 13:49:06
5326
转载 storm几个必知的概念
ConceptsThis page lists the main concepts of Storm and links to resources where you can find more information. The concepts discussed are:TopologiesStreamsSpoutsBoltsStream groupings
2013-05-22 00:23:20
3195
原创 shell解析ini文件
做个shell解析ini文件,用作搭建HA框架中的解析ini配置文件测试的ini文件是系统里面搜到的一个# Example driver definitions# Driver from the postgresql-odbc package# Setup from the unixODBC package[PostgreSQL]Description = ODBC for Po
2013-04-14 14:09:44
9249
原创 再见了,我的第一份工作
走过那些年 那时还是懵懂的年纪,带着学生气带着对工作的渴望与激情,对于去做linux c/c++的开发充满了期待,在10年11月入职。 而现在转眼两年多过去了,即将离开工作两年半的地方,也即将去面对新的工作,我觉得有必要好好记录下,等待多年后再回头看现在的抉择是否正确。 回忆两年半乐趣与辛酸 当初10月份校招中拿到个做linux c/c++的offer欣喜异常
2013-03-10 22:44:20
4955
原创 通过修改源码来更改nginx的日期格式
前言 群里有朋友想切换nginx 0.7的版本到1.2+的版本,在0.7的版本中他们改了源码,使得访问日志输出的时间格式从[08/Mar/2013:09:30:58 +0800]变成了2013-03-08 12:21:03。说是在修改1.2+版本的时候格式就变乱了,格式一直不对,刚好有人@我,我说就帮忙看下。须知 nginx log日志格式的话,无非是在src/core/n
2013-03-08 13:12:59
7676
原创 两个apache第三方模块冲突
冲突情景 有两个模块分别是mod_city和mod_pfadurl,两者编译成so,如果在http.conf中使用loadmodule 都单独挂到apache中,那么不论是挂哪个到apache中都是可以正常运行,但是如果两者一起挂进apache中则就出现进程fork之后就down掉。apache 动态加载apache mod_so中 dlopen时指定了RTLD_NO
2013-03-05 21:20:25
3549
原创 linux下zeromq write函数变更
文件tcp_socket.cpp中write函数发生变更,可以去github上看master版本的src/tcp_socket.cpp 点这里前往github说下影响,在之前2.2.0版本,其实write函数是这样的int zmq::tcp_socket_t::write (const void *data, int size){ ssize_t nbytes = send
2013-02-04 17:11:08
3194
原创 位图简单实现
/* * ===================================================================================== * * Filename: bitset.c * * Description: * * Version: 1.0 * Created: 02/04
2013-02-04 13:43:29
1192
1
转载 kerberos认证过程
一、 基本原理Authentication解决的是“如何证明某个人确确实实就是他或她所声称的那个人”的问题。对于如何进行Authentication,我们采用这样的方法:如果一个秘密(secret)仅仅存在于A和B,那么有个人对B声称自己就是A,B通过让A提供这个秘密来证明这个人就是他或她所声称的A。这个过程实际上涉及到3个重要的关于Authentication的方面:
2013-01-08 11:37:00
6754
1
原创 hadoop几个版本区别
做个mark,以后有空再详细写写0.20.x是历史稳定版0.23.x是根据0.20.x的稳定版引入了federation和yarn,但缺少NN和HA1.0.x是当前稳定版,但和0.20.x系列差不多,只不过有些优化改进1.1.x是beta版2.0.x 现在是alpha版,有yarn和federation的引入这点是和0.23.x是一样,且有NN和HA,但是它是基于1.x的稳定版
2013-01-08 10:04:14
10515
原创 const ptr与ptr const比较
其实只要注意从右向左读取,这样就很好识别了可以参考下这关于const的faq举个例子 const * int p 有些时候会忽悠进int const * 和 int *const之类的当中来迷惑You have to read pointer declarations right-to-left.Fred const* p means "p points to a consta
2013-01-06 21:48:23
3413
原创 nginx日志切割和记录cookie
#!/bin/bash#日志文件存放目录logs_path="/data/Service/nginx/logs"# 日志文件的名字,多个需要空格隔开logs_names=(dm_access)mkdir -p ${logs_path}/$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/num=${#logs_names
2013-01-05 11:45:18
2764
原创 libevent-2.0.21笔记
参看http://www.wangafu.net/~nickm/libevent-book/ 和libevent-2.0.21源码其中有部分我认为比较简单的,就没有记录在这里了。关于源码,可以主要关注,evutil.c evbuffer.c event.c bufferevent.c bufferevent_sock.c 这几个文件。-----------------------
2013-01-02 11:31:57
15802
原创 我的2012-分享我的四个项目经验
前言 一看标题就俗套,一时也想不到各种华丽的名字了,直接copy去年的标题,只是将2011改成了2012。还好今年也没有末日,活着就是幸福。在12年最后一天的工作日,刚好可以花点时间回顾下今年的工作情况以及稍微规划下明年吧,希望慢慢的按着自己的规划往前走。 如果有看过去年的朋友,可能会发现与去年的巧合就是都是在最后一天来写。。尴尬。。 本文大致会分两部分,一个是今
2012-12-29 19:30:14
19709
8
原创 C&lua生成新配置
这篇是说c调用lua的。会通过代码来展示如何在配置文件里面配置记录,并让c调用去执行。有一个配置文件名称是“config”用来记录配置的另外有个.c程序来载入config,并调用config中函数来生成新的记录。编译:gcc -g -Wall configbylua.c -o cblua -ldl -llua -lm下面看代码:configmax = 3default
2012-12-28 16:43:49
1699
原创 lua 编码转码url
local url={parsed={}} --存储decode出来的key-value--privatelocal function escape(w) pattern="[^%w%d%._%-%* ]" s=string.gsub(w,pattern,function(c) local c=string.format("%%%02X",string.byte(c)) retu
2012-12-26 21:25:20
12691
原创 lua 类与继承
试试lua中的对象与继承,多说句,多继承我写c++也没用过,直接上组合就ok,因此lua的多继承如果非必须也同样可用用其他方法来实现--lua 类与继承的实验local Str={str="",num=0}function Str:new(s) s = s or {} --为对象绑定metatable为Str setmetatable(s,{__index=self}) retur
2012-12-25 16:20:25
12852
转载 Calling C++ Functions From Lua(lua调用c/c++)
Calling C++ Functions From LuaMy second tutorial dealt with calling Lua functions from C++. This one deals with just the opposite situation – calling C++ functions from Lua. I couldn’t think o
2012-12-25 15:12:45
1747
原创 lua模块几种形式
刚学,如果有问题看manual,不多说两个文件说明下testlib.lua在当前目录下,maxmin.lua在当前目录的子目录lualibs下。即./testlib.lua,./lualibs/maxmin.lua测试过没有问题,大致可以清楚的阐述lua中的模块是怎么个样子,下面上代码:testlib.lualocal maxmin = require "lualibs.m
2012-12-25 15:00:14
5773
1
原创 我的开源[不断扩充中]
前言:这篇转么记录发布了哪些项目,地址都在github.com/iamwljiang。如果其中某个项目没有注释之类的,那么这个项目可能有些不好的影响,我会忽略过去1.guahao一个挂号的东西,这个要低调2.logger这个是一个跨平台的logger记录库,可以编译成库也可以直接将代码嵌入到你的项目中目前支持多线程,日志切割,支持linux权限,所有者更改,linu
2012-12-04 22:08:11
1536
转载 error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCR...
转自:http://blog.youkuaiyun.com/playstudy/article/details/6661868很久没搞win上东西了,最近将代码导入工程第一次ok,隔了几天重新编译就出现下面的问题了,下面的说的也可以解决。不过我自己是将工程清掉重新导入一次就可以了需要注意的是:通过现有代码导入到工程里面,预定义了_WINDOWS,链接器->系统面板的子系统也是默认定义为 “窗口 (
2012-11-26 12:05:29
7955
原创 tigase 安装后出现登陆错误原因
原帖在这里http://www.tigase.org/content/tigase-db-errorclient-cant-logintigase db error,client can't loginPost Reply5 replies [Last post]Mon, 2012-10-15 03:12
2012-10-16 10:19:36
5481
翻译 安装clojure编译工具leiningen
Edit: Leiningen 1.3.1 got better Windows support and you don't need to follow these instructions anymore. Get the Windows distribution from here:http://github.com/technomancy/leiningen/downloads, un
2012-09-01 16:56:51
7171
1
原创 boost filesystem v2 与 v3的区别
这篇文章会慢慢记录我碰到的使用不同版本boost 的filesystem库发现的一些不同的地方。1.在最近改个项目bug的过程中发现了v2(boost1.42) 的path对象取filename()的时候和v3(boost1.47)的path对象取filename()的结果不一样v2的结果是没有引号的文件名,v3是有引号的“文件名”,因此v3需要这么用path.filename().str
2012-08-18 00:29:53
2102
转载 Beej's Quick Guide to GDB
Beej's Quick Guide to GDBRelease 2 (2009 Jun 14)This is a very quick-and-dirty guide meant to get you started with the GNU Debugger, gdb, from the command line in a terminal. Often times gdb is
2012-08-18 00:21:25
1858
原创 libeio性能测试
前言: 之前搜了一下,貌似没有关于libeio的读写性能测试的数据,因此直接写了个测试程序去测试下。写的没去试,接口都有,有需要可以自己去填下。关于libeio: 这个是库Marc Lehmann写的,关于这个大牛,有兴趣的可以去搜搜。关于测试: 测试环境我分别用ABC表示,采用随机读取文件中的某个位置开始的一定长度
2012-07-10 15:18:03
3067
原创 小心使用zeromq
1.关于介绍zeromq的就不说了,可以自己去看官方guide很详细2.主要说下在使用过程中需要注意的地方1)使用如果使用c++的接口的时候,在你自己的类中或者apache模块中需要将zmq::context_t 对象定义在zmq::socket_t对象的前面,这样可以保证销毁的顺序2)使用sub-pub时候,如果sub没有调用setsockopt设置过滤项(设置NULL则
2012-07-04 17:44:39
9755
个人文件加密工具-1.0
2011-09-25
exceptional c++系列
2008-10-21
effectiveC++ More Effective C++(中文)c++库函数(中文)
2008-05-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人