
技术分析
文章平均质量分 69
chlaws
希望身体健康
展开
-
MapReduce源码分析之MapTask分析
前言 MapReduce的源码分析是基于Hadoop1.2.1基础上进行的代码分析。 该章节会分析在MapTask端的详细处理流程以及MapOutputCollector是如何处理map之后的collect输出的数据。 map端的主要处理流程图1 MapTask处理流程 图1所示为MapTask的主要代码执行流程,在MapTask启动后会进入入口run函数,根据是否使用原创 2014-07-13 20:55:13 · 6931 阅读 · 1 评论 -
storm-0.8.2源码分析之topology启动
topology启动 一个topology的启动包括了三个步骤 1)创建TopologyBuilder,设置输入源,输出源 2)获取config 3)提交topology(这里不考虑LocalCluster本地模式) 以storm.starter的ExclamationTopology为例:原创 2013-08-29 22:44:31 · 7906 阅读 · 0 评论 -
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 · 6946 阅读 · 0 评论 -
简述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 · 10068 阅读 · 0 评论 -
多线程删除注册的事件
1.多线程删除注册的事件,因为事件响应总是会调用回调的,因此,在这通过注册和删除回调函数来阐述2.由于多线程环境去处理,那么需要注意事件增删的接口,会在任何地方调用,因此,需要处理好,即保证无递归产生死锁也要保证互斥性3.代码是伪代码,处理流程参考了libevent,libevent对于event的删除就是这么做的4.有可能描述不太清晰,具体可以去看libevent代码cl原创 2013-06-02 22:53:48 · 3375 阅读 · 0 评论 -
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 阅读 · 0 评论 -
通过修改源码来更改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 · 7677 阅读 · 1 评论 -
两个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 · 3550 阅读 · 0 评论 -
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 阅读 · 0 评论 -
kerberos认证过程
一、 基本原理Authentication解决的是“如何证明某个人确确实实就是他或她所声称的那个人”的问题。对于如何进行Authentication,我们采用这样的方法:如果一个秘密(secret)仅仅存在于A和B,那么有个人对B声称自己就是A,B通过让A提供这个秘密来证明这个人就是他或她所声称的A。这个过程实际上涉及到3个重要的关于Authentication的方面:转载 2013-01-08 11:37:00 · 6755 阅读 · 1 评论 -
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 · 3414 阅读 · 0 评论 -
clucene创建IndexSearcher时失败的原因
正在做的搜索改版项目中,使用clucene做全文检索,通过apache接受用户搜索请求,解析后交给clucene去检索,取得结果后,反馈给用户。 在前两天,发现,启动apache时,进行对clucene的初始化都是失败的,用更简单的测试代码去试了下,还是不成功。重建索引到一个新的目录之后,再去尝试,就可以。如果,mv 新的索引目录到为原来失败的索引目录再去尝试,这种情况还是不行的原创 2012-05-17 23:19:44 · 2134 阅读 · 0 评论 -
解决hadoop抛出的Task process exit with nonzero status of 134异常(转载)
首先,我说说碰到这个问题的原因造成在tasktracker的log中出现错误:2012-01-04 13:49:27,734 INFO org.apache.hadoop.mapred.TaskTracker: JVM with ID: jvm_201112211104_0002_m_1605380604 given task: attempt_201112211104_0002_m_00转载 2012-01-04 17:24:16 · 5788 阅读 · 3 评论 -
MapReduce源码分析之MapTask分析(二)
MapReduce源码分析之MapTask详解的后半段文章。在分析过程中我们知道了MapTask是如何使用循环缓存区管理数据,知道了数据在缓存不下是如何做spill处理的,spill输出的数据格式,combiner如何处理,如何将多一个文件merge为一个等等。也希望通过阅读这部分源码能学习到部分设计思路,能在未来的设计中提供多一种思路。原创 2014-08-04 22:21:17 · 6471 阅读 · 3 评论 -
scala 语法要点
前段时间看了下scala做了下笔记,为后续看spark做点准备,笔记内容见图片。原创 2014-05-31 22:54:30 · 3355 阅读 · 0 评论 -
MapReduce源码分析之InputSplit分析
前言MapReduce的源码分析是基于Hadoop1.2.1基础上进行的代码分析。什么是InputSplit InputSplit是指分片,在MapReduce当中作业中,作为map task最小输入单位。分片是基于文件基础上出来的而来的概念,通俗的理解一个文件可以切分为多少个片段,每个片段包括了等信息。在MapTask拿到这些分片后,会知道从哪开始读取数据。Job原创 2014-04-03 23:15:55 · 13781 阅读 · 2 评论 -
MapReduce源码分析之架构分析1
前言 MapReduce的源码分析是基于Hadoop1.2.1基础上进行的代码分析。 本篇,将不会涉及代码部分的分析,只是简单分析map的整体架构,并介绍map与reduce的运行过程,主要是为后续的分析做一个铺垫。至于MapTask/ReduceTask的原理分析,JobTracker部分,以及TaskTracker如何启动一个Task这些都将在后续章节给出。MR编程模型原创 2014-04-14 22:24:54 · 5234 阅读 · 2 评论 -
迟到的2013年总结
前言 有近两个月没有写blog了,找个不算借口的借口吧,一直因为工作忙的缘故只剩上班和下班了。。特别是放假前加了一次到第二天两点,缓了几天感觉还是精气神仍旧有点没回过神来。。这可以说是工作以来加的最凶猛的一次,估计以后不太会有这样的场景了。 总的来说,在13年换了份工作,换了个行业,从技术角度来说属于开始从广度转向了深度,让自己更加专注于底层技术。同时,在13年让自己的原创 2014-01-28 22:14:46 · 3466 阅读 · 1 评论 -
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 阅读 · 0 评论 -
我的2011-分享我的四个项目经验
请勿抄袭,转载请注明出处 http://blog.youkuaiyun.com/chlaws前言2010-11-01入职到现在有一年多了,这一年来,也做了比较多的事。也学到很多东西,基本来说这期间一直在忙碌着,没有停过。有些时候也会挺有压力的。11月底的时候就开始计划准备写个总结,既能回顾下这一年自己在哪些地方成长了,也能加深下自己的所做过项目的印象。之后的内容会按所做的项目进行大致的描述,小项目之类原创 2012-01-01 00:36:37 · 13396 阅读 · 19 评论 -
libeio性能测试
前言: 之前搜了一下,貌似没有关于libeio的读写性能测试的数据,因此直接写了个测试程序去测试下。写的没去试,接口都有,有需要可以自己去填下。关于libeio: 这个是库Marc Lehmann写的,关于这个大牛,有兴趣的可以去搜搜。关于测试: 测试环境我分别用ABC表示,采用随机读取文件中的某个位置开始的一定长度原创 2012-07-10 15:18:03 · 3067 阅读 · 0 评论 -
安装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 阅读 · 2 评论 -
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 · 4149 阅读 · 0 评论 -
我的2012-分享我的四个项目经验
前言 一看标题就俗套,一时也想不到各种华丽的名字了,直接copy去年的标题,只是将2011改成了2012。还好今年也没有末日,活着就是幸福。在12年最后一天的工作日,刚好可以花点时间回顾下今年的工作情况以及稍微规划下明年吧,希望慢慢的按着自己的规划往前走。 如果有看过去年的朋友,可能会发现与去年的巧合就是都是在最后一天来写。。尴尬。。 本文大致会分两部分,一个是今原创 2012-12-29 19:30:14 · 19711 阅读 · 11 评论 -
小心使用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 阅读 · 3 评论 -
分享一个字节序方面的知识
分享一个字节序方面的知识在项目中进行通信时遇到这样的问题,对于包的长度和类型在传输中商定为大端(网络字节序),但是在转换后读取到的数据显示出来却是小端(主机字节序)的数据。下面将具体的过程进行描述,便于大家能对数据在内存中的分布情况,数据读取,大端小端等方面的问题能够一目原创 2011-10-14 13:59:01 · 1105 阅读 · 0 评论 -
关于完成广告系统后的个人总结
在7.11回来到8月中了,广告系统基本完成。在这过程之中碰到了很多的问题,很多细节方面没有处理好。因此做个总结,做个备忘,避免以后遇到相同或者类似的问题能快速正确的解决。1.关于知识面,及新事物吸收(1)库的使用开源库:一个是google的ctemplate,另一个是原创 2011-08-15 17:26:48 · 1063 阅读 · 2 评论 -
使用curl静态库-http下载功能
下载 curl-7.19.0 http://curl.haxx.se/download/curl-7.19.0.tar.bz2打开DSW项目文件,作如下设定定义宏 HTTP_ONLY (否则会出现LDAP没有类库的问题)Build 就会生成出来curllib.lib (可在属性中原创 2011-07-15 11:58:27 · 2797 阅读 · 0 评论 -
字符编码-理解跨平台中文乱码
字符编码,理解跨平台中文乱码,windows-linux文件中文乱码原因原创 2011-05-26 17:29:00 · 4888 阅读 · 0 评论 -
栈与递归的实现:n阶Hanoi塔的算法分析与源码
很郁闷的一件事情,本来已经写好了,不只怎么网页跳走了,白写了这就随便说下.栈是有"先进后出"的原则,而嵌套函数也一样有一个原则是:"后调用先返回" 这就和栈的进出相符合了.这里拿Hanoi塔的问题来分析(不画图了,要看图的翻 数据结构的那本书看下) //下面是算法./**************n阶Hanoi塔的问题*********************/#in原创 2007-12-10 21:05:00 · 4569 阅读 · 1 评论 -
typedef用法小结
typedef用法小结- - 虽然写代码的时候会遇到,但没有精心的挑出来好好研究一下,每次碰到都有说懂也懂说不懂也不懂的味道?????? typedef用法小结- -Typedef 声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法。不管怎样,使用 typedef 能为代码带来意想不转载 2008-02-26 19:55:00 · 948 阅读 · 2 评论 -
指针与数组经典知识
※※※※※※※※※※※※※※※※※※※指针与数组※※※※※※※※※※※※※※※※※※※※※※※※※※※ 12:49 2008-1-25 BY:CHLAWS数组在内存中的分配并不是以表格形式排列。 单个元素的存储和引用实际上是以线性形式排列在内存中的。指针数组就是一个lliffe变量。*********************************************原创 2008-02-03 20:02:00 · 831 阅读 · 1 评论 -
数组与指针的不同点
※※※※※※※※※※※※※※※※数组与指针的不同※※※※※※※※※※※※※※※※※※※※※※※※※※17:26 2008-1-24 BY:CHLAWS·区分定义和声明定义是一种特殊的声明,它创建了一个对象;声明简单地说明了在其他地方创建的对象的名字,它允许你使用这个名字.声明相当于普通的声明:它所说明的并非本身,而是描述其他地方的创建对象.定义相当于特殊的声明:它为对象原创 2008-02-03 19:55:00 · 689 阅读 · 0 评论 -
数组与指针的不同点
///////////////////////////////////////BY:CHLAW //////////////////////////////////////※※※※※※※※※※※※※※※※数组与指针的相同点※※※※※※※※※※※※※※※※※※※15:09 2008-1-24相同点就是可以互换的情形。主要在于"声明"和"使用"声明本身还可以分成3种情况.·外部数组的声原创 2008-02-03 19:46:00 · 821 阅读 · 0 评论 -
Endian(大端小端分析)
·Endian的意思是"数据在内存中的字节排列顺序",表示一个字在内存中或传送过程中的字节顺序.在微处理器中,像long/DWORD(32bit)0x12345678这样的数据总是按照高位优先(BIG ENDIAN)方式存放的.但在内存中,数据存放顺序则因微处理器厂商的不同而不同.一种顺序称为big-endian,即把最高位字节放在最前面;另一种顺序就称为little-endian,即把最低位字节原创 2008-02-03 19:30:00 · 1120 阅读 · 0 评论 -
VMware两个奇葩的错误
错误1:The parent virtual disk has been modified since the child was created错误2:One of the disks in this virtual machine is already in use by a virtual machine or by a snapshot.首先说下产生这两个错误的原因:原创 2011-10-24 19:57:38 · 7329 阅读 · 1 评论 -
hadoop secondary namenode 部署出错所产生的错误及解决方法
只叙述secondary namenode部署出错所产生的错误及解决方法环境:suse 10.1namenode 单独部署在cloud1secondary namenode 单独部署在 cloud3集群部署完成后使用Jps查看进程,发现该有的进程都有,hdfs也能上传下载文件 查看secondary name 上的log,发现在doCheckpoint都失败20原创 2011-11-17 14:38:39 · 13671 阅读 · 3 评论 -
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 阅读 · 0 评论 -
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 · 2105 阅读 · 0 评论 -
转一篇Linux下通过Java Jni调用C,C++库的文章
PS:试过了,按着这篇文章的步骤,是可以正确的让Java调用c,c++的代码另外要注意的一点就是,操作过程要小心,别搞混淆了,否则很容易出错在 Linux 平台下使用 JNI张翼翔 李庆明,简介: 本文简要介绍了 JNI 调用规范,及常用函数。并通过具体示例程序展示了实现一个本地调用的基本步骤。本文的标签: best_p转载 2012-06-10 18:14:44 · 6989 阅读 · 4 评论