尘埃落定
每一个可以努力的日子,都是一份厚礼。
每一个可以努力的日子,都是一份厚礼。
2011 4 月 11th
MapReduce主要应用于大规模数据处理,特别是在搜索引擎中各种链接的访问统计,进而影响到页面关键词排名等等。今天这个例子却是讲的利用MapReduce来对圆周率Pi进行近似计算。考虑下面这张图:

我们知道,正方形的面积 As = (2r)2 也就是 4r2. 内嵌圆形的面积 Ac = pi * r2. 于是 更多 >
2011 4 月 7th
对于像我这样的小博客网站来说,日访问量仅百余,找个普通的主机托管完全可以满足需要,实在是不必过多考虑后端的问题。然而,腾讯网易这样的门户网站、淘宝这样的购物交易网站、人人网新浪微博等主要流行的社交网络应用,则不得不运用多种技术设计后端架构,才能支撑起百万甚至上亿级别的访问。
这里我在一个high level例举我所了解到的提升服务性能的相关技术,其中的每一项都可以展开讨论,有空我会专门详细整理一下和大家探讨。 更多 >
2011 3 月 31st
大家好,我搬到自己的新窝来了。
这里是我的个人博客,主要记录IT相关技术以及自己的成长历程。《深入浅出MFC》的作者侯俊杰曾经提到过“带艺术气息的软件创造行为”,颇有些理想主义。我是个追求完美的人,甚至在一些细枝末节的问题上思来想去,在写日志的时候我会一遍遍地检查以防出现错别字,在写代码的时候我会看变量命名是否规范代码缩进是否对齐。表面上看我很实在,实际骨子里是一个理想主义者。
Code is poetry. 在别人评价我闷骚的时候,我都会像周星驰那般严肃地纠正道:“其实,我是一个文学青年。”
本科的时候在一群大牛的布道下开始使用Linux,一开始沉溺于展现各种amazing的桌面特效和倒腾各种有趣的应用软件,随后顿悟,这些都是浮云,只是引导兴趣以及用于在mm们面前炫耀。于是开始务实地使用server版系统,学会vim、gcc、gdb并在它们的陪伴下完成了诸多课程设计。
大四应该是最充实的时候,我加入了Z教授的实验室,结识了一群来自五湖四海的研究生并和大家打得火热。在L老师和S老师的带领下完成了某军方软件(分布式系统)的研制,熟悉了整套软件开发流程。而后又参与了另一个J2EE项目的前期工作,随后因毕业不得不退出这个带给我成长和快乐的团队。毕业论文也在这个时期完成,最后居然还混了个省级优秀。
此时的我只能说才刚刚上道,很多技术泛而不精,我意识到一定要找一个自己感兴趣的方向深入研究。感谢Z教授给我写推荐信,使得我有机会在香港中文大学继续求学。来到香港,在经历了一番短暂的culture shock后,开始适应这边国际化的教育模式。全英文授课,全英文report & presentation,全英文考试。讲授的课程也都是云计算这类业界前沿领域,教授们都是大牛级别,不是ACM IEEE院士就是国际顶级学术会议审稿人。
其实我为是走学术路线还是工程路线踌躇犹豫了很久。在实验室的日子逐渐了解到国内复杂的学术生态环境,科研,早已成为功利主义下的牺牲品。我热爱我的祖国,IT的未来也在中国。身处墙外接受了很多技术熏陶,我开始迫不及待地想要大展拳脚。
了解更多个人信息,或者你有一份好的职位推荐,欢迎联系我。
欢迎订阅我的博客哦~
2011 3 月 21st
2年前去T公司面试,面试官给了我一张纸一支笔,说写个程序吧,输入一个字符串然后反序输出。我问输入输出是用函数参数呢还是系统I/O,面试官说随你便,写完了说说各有什么优缺点吧。当时我大三,没有参加过ACM没有实验室经历除了课程设计也没写过什么程序,完全小白。当然至今也仍然是菜鸟一只,不堪回首啊。
方法一:据说有库函数strrev()啊 更多 >
2011 2 月 9th
MapReduce是Google提出的一个编程框架,用于大规模海量数据处理,其主要思想就是分治(divide and conquer)。我们希望程序有并行处理能力,于是就可以使用多台机器同时处理加快速度。
然而,怎样分派任务给不同的计算机?如果任务单元的数量大于可执行任务的计算机的数量怎么办?计算需要使用到一些中间结果怎样处理?如果某些计算机在处理任务时中途死掉了呢?怎样才能知道任务已经处理完毕?问题主要来自于任务处理节点的交流(比如状态信息),以及对共享资源(数据)的访问。要解决这些棘手的问题,我们需要有一套完整的同步机制:同步锁信号量、条件变量(等待、通告、广播)等等。
现有的一些编程模型有共享内存(pthread)、消息传递(MPI)等,架构的设计模式有主从式(Master-Slaves)、生产者消费者流式(Producer-consumer flows)等。Map Reduce结合了函数式编程语言的思想,使用key-value对作为输入和输出。开发者只需要实现map(key, value)和reduce(key, value)两个功能。map()会产生中间结果作为输出,而这正是reduce()的输入。中间结果经过reduce()产生最终结果。类似以下模型:
map (in_key, in_value) ->
(out_key, intermediate_value) listreduce (out_key, intermediate_value list) ->
out_value list
具体的原理可以参看Google发表的关于MapReduce的论文。从应用开发的角度,本站的MapReduce分类下有一些python示例,可以作为初步入门学习。最简单的方法就是利用管道来进行代码测试,例如: 更多 >
2011 1 月 4th
Inverted Index (反向索引)是搜索引擎需要做的一件经常性工作。在Google提出Map Reduce分布式编程框架中,这是一件很容易完成的事情。下面就是一个python写的示例。 更多 >
2011 1 月 4th
在学习Map Reduce方法时,Word Count(单词统计)程序是最基础的入门训练。不同的写法会有不同的执行效率,下面是用python写的一个示例。 更多 >
2011 1 月 4th
EMR是Amazon亚马逊云计算平台提供的一项服务,用户可以在此平台使用亚马逊强大的计算资源执行Map Reduce程序。由于Map Reduce很多情况下都是做的海量数据文本统计类的并行计算任务,需要耗费很多时间,使用云计算则可以大大加快执行速度。
EMR建立在Amazon S3和Amazon EC2的基础上。用户提交一个map程序和一个reduce程序,同时提交需要处理的数据文件作为输入。这些都上传到Amazon S3云端存储平台,在EMR中指定相应的S3路径,就可以开始做数据处理了。EMR会根据用户指定的规模配置,开启一个EC2集群,在每个节点上运行Hadoop。运行结束后用户可以从S3获取结果数据。下面以word count单词统计任务为例,介绍具体操作过程。 更多 >
2011 1 月 4th
Amazon Simple Storage Service (S3) 是一个云端存储平台,这是现在蓬勃发展的云计算的典型应用之一。用户可以将自己的数据上传到云端服务器,便可以随时随地地访问到这些数据,灵活高效。它按需收费,也就是说使用相应容量的存储空间,就花相应的钱。这里有具体的资费标准。对于企业用户来说,使用这项服务实际上可以大大降低成本,这些成本不仅仅包括自己购置服务器硬件、软件成本,还包括电力、为IT设施维护而雇佣的人力成本等等。
在Amazon S3中有如下几个概念,通过分别介绍,我们可以大致理解云存储的基本原理。
Buckets:一个bucket是一个用于存储的容器,我们可以不太恰当地理解为就是云端的文件夹。文件夹要求一个独特唯一的名字,这和注册邮箱名差不多,可以加前缀或者后缀来避免重名。bucket使得我们在一个高层级上组织命名空间,并在数据的访问控制上扮演重要角色。下面举个例子,假设一个名为photos/puppy.jpg的文件对象存储在名为johnsmith的bucket里,那么我们就可以通过这样一个url访问到这个对象:http://johnsmith.s3.amazonaws.com/photos/puppy.jpg
更多 >
2011 1 月 4th
RSA是基于数论中大素数的乘积难分解理论上的非对称加密法。在此密码术中,使用公钥(public key)和私钥(private key)两个不同的密钥:公钥用于加密,它是向所有人公开的;私钥用于解密,只有密文的接收者持有。
举例:小红希望安全地发送一条消息给小明,消息明文为m,小明的公钥为K+,小明的私钥为K-。通信过程为,小红使用K+加密m,成为密文K+(m),传送给小明,小明收到后使用K-解密这个密文得到原始消息明文,即m = K-(K+(m))。
具体的密钥生成算法如下。随机选择两个大素数p和q(比如每个都是1024 bit),计算n = pq, n’ = (p-1)(q-1). 选择一个e (e小于n) 与n’互质。计算d使得ed = 1 mod n’.则公钥为(n, e),私钥为(n, d). 注意p和q都应该保密。
加密过程为c = m^e mod n
解密过程为m = c^d mod n
以上为原理简介。下面是openssl API编程应用读取密钥文件的示例源代码: 更多 >