My Github
摘要: (1)经典之王:单词计数-这个是MapReduce的经典案例,经典的不能再经典了!(2)数据去重-"数据去重"主要是为了掌握和利用并行化思想来对数据进行有意义的筛选。统计大数据集上的数据种类个数、从网站日志中计算访问地等这些看似庞杂的任务都会涉及数据去重。(3)排序:按某个Key进行升序或降序排列 阅读全文
posted @ 2015-02-25 18:18 EdisonZhou 阅读(10322) 评论(3) 推荐(3) 编辑
摘要: 首先,我们回顾一下在MapReduce中,排序和分组在哪里被执行;从上图中可以清楚地看出,在Step1.4也就是第四步中,需要对不同分区中的数据进行排序和分组,默认情况下,是按照key进行排序和分组。在一些特定的数据文件中,不一定都是类似于WordCount单次统计这种规范的数据,比如下面这类数据,它虽然只有两列,但是却有一定的实践意义。 阅读全文
posted @ 2015-02-25 01:22 EdisonZhou 阅读(25640) 评论(2) 推荐(9) 编辑
摘要: 在第四篇博文《初识MapReduce》中,我们认识了MapReduce的八大步凑,其中在Reduce阶段总共三个步凑。其中,Step2.1就是一个Shuffle操作,它针对多个map任务的输出按照不同的分区(Partition)通过网络复制到不同的reduce任务节点上,这个过程就称作为Shuffle。Hadoop的shuffle过程就是从map端输出到reduce端输入之间的过程,这一段应该是Hadoop中最核心的部分,因为涉及到Hadoop中最珍贵的网络资源,所以shuffle过程中会有很多可以调节的参数,也有很多策略可以研究,这方面可以看看大神董西成的相关文章或他写的MapReduce相关书籍。 阅读全文
posted @ 2015-02-24 01:42 EdisonZhou 阅读(8887) 评论(1) 推荐(8) 编辑
摘要: 在第四篇博文《初识MapReduce》中,我们认识了MapReduce的八大步骤,其中在Map阶段总共五个步骤。其中,step1.3就是一个分区操作。通过前面的学习我们知道Mapper最终处理的键值对,是需要送到Reducer去合并的,合并的时候,有相同key的键/值对会送到同一个Reducer节点中进行归并。哪个key到哪个Reducer的分配过程,是由Partitioner规定的。在一些集群应用中,例如分布式缓存集群中,缓存的数据大多都是靠哈希函数来进行数据的均匀分布的,在Hadoop中也不例外。MapReduce的使用者通常会指定Reduce任务和Reduce任务输出文件的数量(R)。 阅读全文
posted @ 2015-02-23 00:32 EdisonZhou 阅读(12966) 评论(5) 推荐(6) 编辑
摘要: 在第四篇博文《初识MapReduce》中,我们认识了MapReduce的八大步骤,其中在Map阶段总共五个步骤。我们可以发现,其中有两个计数器:Combine output records和Combine input records,他们的计数都是0,这是因为我们在代码中没有进行Map阶段的规约操作。在MapReduce编程模型中,在Mapper和Reducer之间有一个非常重要的组件,它解决了上述的性能瓶颈问题,它就是Combiner。 阅读全文
posted @ 2015-02-23 00:29 EdisonZhou 阅读(14662) 评论(2) 推荐(10) 编辑
摘要: 计数器:计数器是用来记录job的执行进度和状态的。它的作用可以理解为日志。我们通常可以在程序的某个位置插入计数器,用来记录数据或者进度的变化情况,它比日志更便利进行分析。在上图所示中,计数器有19个,分为四个组:File Output Format Counters、FileSystemCounters、File Input Format Counters和Map-Reduce Framkework。分组File Input Format Counters包括一个计数器Bytes Read,表示job执行结束后输出文件的内容包括19个字节(空格、换行都是字符),如下所示。 阅读全文
posted @ 2015-02-22 17:47 EdisonZhou 阅读(6748) 评论(0) 推荐(2) 编辑
摘要: Hadoop是一个强大的并行软件开发框架,它可以让任务在分布式集群上并行处理,从而提高执行效率。但是,它也有一些缺点,如编码、调试Hadoop程序的难度较大,这样的缺点直接导致开发人员入门门槛高,开发难度大。因此,Hadop的开发者为了降低Hadoop的难度,开发出了Hadoop Eclipse插件,它可以直接嵌入到Hadoop开发环境中,从而实现了开发环境的图形界面化,降低了编程的难度。总而言之,Hadoop Eclipse插件不仅安装简单,使用起来也很方便。它的功能强大,特别在Hadoop编程方面为开发者降低了很大的难度,是Hadoop入门和开发的好帮手! 阅读全文
posted @ 2015-02-22 17:01 EdisonZhou 阅读(11814) 评论(1) 推荐(11) 编辑
摘要: 假设我们如下一个日志文件,这个文件的内容是来自某个电信运营商的手机上网日志,文件的内容已经经过了优化,格式比较规整,便于学习研究。有了上面的测试数据—手机上网日志,那么问题来了,如何通过map-reduce实现统计不同手机号用户的上网流量信息?通过上表可知,第6~9个字段是关于流量的信息,也就是说我们需要为每个用户统计其upPackNum、downPackNum、upPayLoad以及downPayLoad这个四个字段的数量和,达到以下的显示结果: 阅读全文
posted @ 2015-02-13 01:03 EdisonZhou 阅读(3347) 评论(2) 推荐(3) 编辑
摘要: MapReduce是Google的一项重要技术,它首先是一个编程模型,用以进行大数据量的计算。对于大数据量的计算,通常采用的处理手法就是并行计算。但对许多开发者来说,自己完完全全实现一个并行计算程序难度太大,而MapReduce就是一种简化并行计算的编程模型,它使得那些没有多有多少并行计算经验的开发人员也可以开发并行应用程序。这也就是MapReduce的价值所在,通过简化编程模型,降低了开发并行应用的入门门槛。Hadoop MapReduce是一个软件框架,基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具有容错能力的方式并行地处理上TB级别的海量数据集。这个定义里面有着这些关键词,一是软件框架,二是并行处理,三是可靠且容错,四是大规模集群,五是 阅读全文
posted @ 2015-02-12 15:26 EdisonZhou 阅读(32685) 评论(2) 推荐(37) 编辑
摘要: RPC,即Remote Procdure Call,中文名:远程过程调用;(1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网络通信细节,对我们来说是透明的。因此,它经常用于分布式网络通信中。(2)Hadoop的进程间交互都是通过RPC来进行的,比如Namenode与Datanode直接,Jobtracker与Tasktracker之间等。因此,可以说:Hadoop的运行就是建立在RPC基础之上的。 阅读全文
posted @ 2015-02-11 14:18 EdisonZhou 阅读(19325) 评论(2) 推荐(14) 编辑
摘要: load balance当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务器集群,也可以是数据库服务器集群,还可以是分布式缓存服务器集群等等。在实际应用中,在Web服务器集群之前总会有一台负载均衡服务器,负载均衡设备的任务就是作为Web服务器流量的入口,挑选最合适的一台Web服务器,将客户端的请求转发给它处理,实现客户端到真实服务端的透明转发。最近几年很火的「云计算」以及分布式架构,本质上也是将后端服务器作为计算资源、存储资源,由某台管理服务器封装成一个服务对外提供,客户端不需要关心真正提供服务的是哪台机器,在它看来,就好像它面对的是一台拥有近乎无限能力的服务器,而本质上,真正提供服务的,是后端的集群。 阅读全文
posted @ 2015-02-10 00:37 EdisonZhou 阅读(75612) 评论(63) 推荐(160) 编辑
摘要: (1)通过选择以XML方式打开edmx文件,我们可以可以清楚地看到,edmx模型文件本质就是一个XML文件;(2)可以清楚地看到,edmx模型文件是一个XML文件,其中定义了三大组成部分,这三大组成部分构成了所谓的ORM(对象关系映射);(3)再通过解决方案管理器分析edmx模型文件,其包含了三个子文件:①第一个是xxx.Context.tt,这个首先是一个T4的模板文件,它生成了我们这个模型的上下文类;②第二个是设计器部分,它定义了模型关系图的元数据,比如每个类图的宽度多少,在图中的坐标(X、Y轴)等;③第三个就是数据库表中所对应的实体类对象,它也是一个T4模板文件,对应了所有选择的数据库表: 阅读全文
posted @ 2015-02-06 15:39 EdisonZhou 阅读(3783) 评论(10) 推荐(7) 编辑
摘要: 每当我们将开发好的ASP.NET网站部署到IIS服务器中,在浏览器正常浏览页面时,可曾想过Web服务器是怎么工作的,其原理是什么?“纸上得来终觉浅,绝知此事要躬行”,于是我们自己模拟一个简单的Web服务器来体会一下。本次模拟的一个超级简单的Web服务器软件,实现了静态文件和动态文件(通过模拟aspx页面对象)的处理和响应。但是,还有很多的功能并未实现。不过,对于一个最基本的Web服务器所需要了解的最基本的原理:Socket的监听和连接、基于TCP协议的HTTP协议、动态文件类的反射与调用等,模拟开发本次的DEMO的过程是可以达到的。 阅读全文
posted @ 2015-02-01 22:45 EdisonZhou 阅读(27326) 评论(7) 推荐(26) 编辑
摘要: 当我们需要对一个网页上的某个按钮进行多次点击以求得某种“好处”的时候,例如天猫的抢红包活动,我们可能需要点击N次之后才有可能获得一个红包,但是这个N是一个未知数,有可能我们要不停地点击半个小时甚至一个小时都还无法获得,自己估计也会点鼠标点得醉了。因此,针对这种情况,我们希望自己写一个小工具来让计算机帮我们做这件事。既然是让计算机模拟我们的点击操作,其思路自然是找到指定的按钮或图片,循环对其执行click事件。于是,我们开始对其做一个最简单的实现来看看其基本思路。首先,我们准备一个网站,这里我是用ASP.NET开发了一个网页,其中有一张图片作为抢红包的按钮图片,然后写了一个一般处理程序。 阅读全文
posted @ 2015-01-28 22:21 EdisonZhou 阅读(63069) 评论(4) 推荐(10) 编辑
摘要: 要说微信中最火爆的小游戏是哪款,可能既不是精心打造的3D大作,也不是《植物大战僵尸2》,而是微信5.0刚开启时的《飞机大战》。就是这样一款铅笔手绘风格的简单到不能再简单的“打飞机”游戏,让国内的微信用户一次又一次地尝试,并表示似乎又找回了童年时玩电子游戏的那份单纯的快乐。至于游戏的玩法都不用加以介绍,就是简单的“打飞机”。 阅读全文
posted @ 2015-01-25 22:44 EdisonZhou 阅读(14450) 评论(4) 推荐(12) 编辑
摘要: 上一篇我们了解了在WebForm模式下一个Page页面的生命周期,它经历了初始化Init、加载Load以及呈现Render三个重要阶段,其中构造了页面控件树,并对页面控件树进行了大量的递归操作,最后将与模板结合生成的HTML返回给了浏览器。那么,在ASP.NET MVC模式下,一个页面的生命周期又经历了哪些步凑呢?别急,本篇漫漫道来!2009年,Microsoft推出了ASP.NET MVC,也将ASP.NET MVC项目作为开源项目推送到了开源社区中,至今时间也过去快6年了,ASP.NET MVC已经到了5.0的版本阶段了。我们看到ASP.NET MVC从一个不完整的小孩长成一个日渐成熟的巨人,我们可以从开源社区找到ASP.NET MVC的源码,相比之前我们需要Reflector进行反编 阅读全文
posted @ 2015-01-19 22:04 EdisonZhou 阅读(14891) 评论(28) 推荐(78) 编辑
摘要: 在前面对于请求处理管道的介绍中,我们已经了解了一个ASP.NET WebForm页面请求事件的整体流程。那么,在其中一个最重要的部分就是ASP.NET Page页面,但是我们并没有对其进行详细讨论。因此,我们在此深入地了解一下ASP.NET页面事件。每一个ASP.NET Page页都有2个部分:一个部分是在浏览器中进行显示的部分,它包含了HTML标签、viewstate形式的隐藏域 以及 在HTML input中的数据。当这个页面被提交到服务器时,这些HTML标签会被创建到ASP.NET控件,并且viewstate还会和表单数据绑定在一起。另一个部分是在xxx.cs文件中的进行业务逻辑操作的部分,一旦你在后置代码中得到所有的服务器控件,你可以执行和写入你自己的逻辑并呈现给客户浏览器。 阅读全文
posted @ 2015-01-14 14:55 EdisonZhou 阅读(7664) 评论(9) 推荐(36) 编辑
摘要: 转眼之间,2014就成为了过去,园子里的园友们纷纷发表了自己的年终总结以及新年规划。看到自己的园龄都快3年了,但自己真正活跃于园子却只有1年,但就在这一年里,博客园已经成为了我生活的一部分,我几乎每天都要在博客园首页逛逛,浏览一两篇文章,在空闲时间(经常都是凌晨)发表一些自己写的文章。在这个过程中,我收获了一些宝贵的东西,比如分享的精神,学习的态度,园友的鼓励,在此,十分感谢博客园,也对各位园友表示感激!于是,也就有了这篇总结性的随笔,对2014年的我做一个最真实的回顾,有收获也有失败,但那都是我最宝贵的回忆。 阅读全文
posted @ 2015-01-13 15:10 EdisonZhou 阅读(2594) 评论(9) 推荐(3) 编辑
摘要: 上一篇我们了解了一个ASP.Net页面请求的核心处理入口,它经历了三个重要的入口,分别是:ISAPIRuntime.ProcessRequest()、HttpRuntime.ProcessRequest()以及HttpApplication.Init()。其中,在HttpApplication的Init()方法中触发了请求处理管道事件的执行,本篇我们就来看看所谓的请求处理管道。HttpApplication对象是ASP.NET中处理请求的重要对象,但是,这种类型的对象实例不是由程序员来创建的,而是由ASP.NET帮助我们创建的。为了便于扩展处理工作,HttpApplication采用处理管道的方法进行处理,将处理的过程分为多个步骤,每个步骤通过事件的形式暴露给程序员,这些事件按照固定的处理 阅读全文
posted @ 2015-01-06 00:46 EdisonZhou 阅读(11090) 评论(37) 推荐(61) 编辑
摘要: 上一篇我们了解了一个请求从客户端发出到服务端接收并转到ASP.Net处理入口的过程,这篇我们开始探索ASP.Net的核心处理部分,借助强大的反编译工具,我们会看到几个熟悉又陌生的名词(类):HttpRuntime、HttpWorkerRequest、HttpContext、HttpApplication等。ISAPIRuntime是进入NET托管环境的入口,它在方法中通过一个ecb句柄指向了当前请求报文体的内存地址,将HTTP请求报文简单封装为一个HttpWorkerRequest对象,然后就是各种我们经常听到的PR(ProcessRequest)方法了。 阅读全文
posted @ 2014-12-31 20:21 EdisonZhou 阅读(7460) 评论(16) 推荐(33) 编辑