Hadoop介绍

Hadoop一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高传输率(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以流的形式访问(streaming access)文件系统中的数据。 Hadoop是一个能够对大量数据进行分布式处理的软件框架。但是 Hadoop 是以一种可靠、高效、可伸缩的方式进行处理的。Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。Hadoop 还是可伸缩的,能够处理 PB 级数据。此外,Hadoop 依赖于社区服务器,因此它的成本比较低,任何人都可以使用。 Hadoop带有用 Java 语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写,比如 C++。 Hadoop主要包括如下子项目 Hadoop Common: 在0.20及以前的版本中,包含HDFS、MapReduce和其他项目公共内容,从0.21开始HDFS和MapReduce被分离为独立的子项目,其余内容为Hadoop Common HDFS: Hadoop 分布式文件系统 (Distributed File System) - HDFS (Hadoop Distributed File System) MapReduce:并行计算框架,0.20前使用 org.apache.hadoop.mapred 旧接口,0.20版本开始引入org.apache.hadoop.mapreduce的新API HBase: 类似Google BigTable的分布式NoSQL列数据库。(HBase 和 Avro 已经于2010年5月成为顶级 Apache 项目) Hive:数据仓库工具,由Facebook贡献。 Zookeeper:分布式锁设施,提供类似Google Chubby的功能,由Facebook贡献。 Avro:新的数据序列化格式与传输工具,将逐步取代Hadoop原有的IPC机制。 要掌握hadoop,首先必须深入研究google的3篇论文:map-reduce、gfs和bigtable。

July 24, 2012

博客定居于此

博客搬家到此,dodoro的梦想天空,不会再变啦~

July 16, 2012

我们的五月,我们的三亚,我们的夏天

这一天,早在一年前就在规划,虽然这个月来经历了太多太多,但终于还是能放下所有的工作,轻松地踏上长达半个月的旅行,这一次我们的目标是:三亚和江南。 第一天,乘坐京沪高铁到上海虹桥,换成飞机飞往海南岛、飞往三亚。高铁是贵了点,但确实很舒服,安静、自由、舒适的环境,5个小时一晃就过去了,南航的飞机也还算不错,晚上9点我们终于登岛了。 5月底的三亚很闷热,在7天待了一晚,第二天就奔向亚龙湾,入住仙人掌。和预想中的差不多,酒店很舒适,游泳池、绿化都很美,而亚龙湾的环境更是一流。迫不及待地,我们坐电瓶车到酒店的沙滩浴场,亚龙湾的海水非常干净,一片蓝蓝的海洋,这才是儿时梦想中的海洋啊。今天,我们第一次穿着泳装在海里游泳了。晚餐,一份红薯叶、一份文昌白切鸡、一份回锅肉,吃得很饱。 第三天,丰盛的自助早点后,我们一起到海里游泳,沙滩太阳浴,一直在玩,睡,玩,度假的感觉真爽…晚餐,还是在仙人掌吃,晚饭后在酒店花园和泳池玩,也很开心。今天我还教会了小咪仰泳,喔~ 第四天,玩了一天,但是小咪开始不开心…是我太小气了(而明天我将被报应…)晚饭定了一个自助烧烤,一路慢慢走回来。目前不知道是不是因为这个自助烧烤埋下了明天的恶果… 第五天,早上小咪又闹情绪了,去海边回来后,吃那个梅菜扣肉…然后去市区买干粮,回来的路上肚子开始有些不舒服,进门后马上就稀稀了…而且很严重…晚饭也没有吃好,SPA后好多了,也许是老天注定,2012没有long… 第六天,肚子好多了,带小伤入住红树林。红树林,很贵,我们期待也很高。果然,升级了豪华园景房,并且整个红树林的环境太美了。进入房间,小咪说:我自己的家也要这样。确实,不愧是五星级酒店,房间的设计摆设都特别好,一切都弄好了,就等着客人享受。而我们没有想到的是,红树林的沙滩上亚龙湾最好的,沙滩的沙子细腻,海风平缓,海水清澈见底,最让我们想不到的是:我们看到了海鱼,这些小鱼就在我们附近游泳。晚餐吃泰菜,典型的热带感觉,点了很多菜,冬阴功汤好喝,马拉盏炒茄子好吃,我完全吃撑了,真的很撑很撑… 第七天,在亚龙湾的最后一天,在红树林的沙滩玩。没想到今天天气超好,沙滩、阳光和海水,还有快乐的两只熊。离开红树林前,小咪依依不舍,其实我也是…今天回到了三亚市区,午休后,去了免税店。小咪终于有了自己的channel香水。“用香水的女人有未来”,我跟小咪说:我们的未来不是梦~ 第八天,我们相约天涯海角,南天一柱。天气有些热,今天找到了吃好吃米粉的地方~港门粉、牛杂粉等等都吃。 第九天,今天是三亚待的最后一天啦。我们决定重返亚龙湾,去海洋天堂公园。本来期待还挺高的,只可惜成了过山车旅游了…还好,看到了很多热带植物,而且从山上看到前几天我们住的亚龙湾~ 第十天,乘坐城际列出驶往美兰,沿路见到了很多很多椰子树,这果然是三亚~中午的飞机,小咪一直期待能从天上看到大海。随着飞机慢慢起飞,再见,三亚~再见,亚龙湾~

June 26, 2012

HttpContext.Current用法,.ashx文件中使用Session,在非Web项目中使用HttpContext.Current

在类库项目(或者其他非Web项目中)有时候需要HttpContext.Current这个方法,我们发现在类里面添加了引用“using System.Web;”之后还是不行,其实解解这个问题很简单,只需要在该项目的“引用”中添加System.Web这个引用就可以了。 另外值得注意的是,在非Web项目中使用HttpContext.Current.Cache、HttpContext.Current.Session等的时候,最好进行判断HttpContext.Current是否为空: if (HttpContext.Current != null && HttpContext.Current.Session != null) { string test = HttpContext.Current.Session[“Session”].ToString(); } 这是因为有些情况下Session或者Cache等会被截断,比如在.ashx文件中,默认情况下就会截断Session。当然也可以通过设置在.ashx文件中使用Session,但是为了安全,最后进行判断。 如果要在.ashx文件中使用Session,那么要先引用“using System.Web.SessionState;”,然后继承接口“IRequiresSessionState”,下面是一个例子: using System; using System.Data; using System.Web; using System.Collections; using System.Web.Services; using System.Web.Services.Protocols; using System.Web.SessionState; namespace Lemon.Life.WebData {/// 演示“在.ashx中使用Session” [WebService(Namespace = “http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class Xml : IHttpHandler, IRequiresSessionState { public void ProcessRequest(HttpContext context) { context.Response.ContentType = “text/plain”; context.Session[“Test”] = “Test”; string test = context.Session[“Test”].ToString(); context.Response.Write(“Hello World”); } public bool IsReusable { get { return false;} } } }

May 21, 2012

面向对象必知:继承本质论

每个人开始学习面向对象的时候,基本上都感觉自己很能理解什么是“继承”,可是我相信没有多少个人是真正地理解了“继承的本质”。 继承,就是面向对象中的类与类直接的关系,继承的类叫做子类或者派生类,而被继承的泪叫做父类、基类或者超类。通过继承,子类可以拥有父类的属性、方法,同时子类也可以添加新的属性或者方法,还可以修改父类的方法和属性等。 在《你必须知道的.NET》中,作者列举了下面几个关于继承的要点: 1、继承是可以传递的,子类是对父类的扩展,必须继承父类方法,同时可以添加新方法; 2、子类可以调用父类的方法、属性和字段,但是父类不能够调用子类的方法、属性和字段; 3、虚方法如何实现覆写操作,使得父类指针可以指向子类对象成员; 4、子类不仅继承了父类公共成员,也继承了私有成员,只是在子类中不被访问; 5、new在虚方法继承中起阻断作用。 上面这五条几乎可以说是继承的本质,深刻理解了这些,基本可以说对继承掌握了,不过还有一个比较重要的地方需要注意,请看: #region 深入理解继承机制、多态、封装 public abstract class Animal { public abstract void ShowType(); public void Eat() { Console.WriteLine(“All Animals need eating!”); } } public class Bird : Animal { private string type = “Bird”; public override void ShowType() { Console.WriteLine(“Type is {0}”, type); } private string color; public string Color { get { return this.color; } set { this.color = value; } } } public class Chicken : Bird { private string type = “Chicken”; public override void ShowType() { Console.WriteLine(“Type is {0}”, type); } public void ShowColor() { Console.WriteLine(“Color is {0}”, Color); } } #endregion 上面是定义了一个抽象父类和两个子类,下面是调用方法: #region 深入理解OO思想 //Bird bird 创建的是一个Bird类型的引用,而new Bird()完成的是创建Bird对象,分配内存空间和初始化操作 Bird bird = new Bird(); Chicken chicken = new Chicken(); Bird bird2 = new Chicken();//请注意上面这里的区别 bird.ShowType(); chicken.ShowType(); bird2.ShowType(); #endregion 如果你能够了解为什么上面得到的结果,你就深刻理解了什么是继承了

May 21, 2012

Mono重生?Mono创始人成立新公司Xamarin

Miguel de Icaza已成立了一个新的独立公司Xamarin,给Mono一个继续奋斗的机会。 最近的消息称Attachmate公司对Mono框架不再感兴趣,这个消息已经北证实。Mono都创始人Miguel de Icaza终于打破了长久的沉默,透露他已经成立了Xamarin公司来继续支持Mono项目。 Mono团队被Attachmate公司解雇,使Miguel de Icaza非常难过: 一年以来我们一直都想把mono从Novell分离出来,大家一直认为独立成立一个公司将给Mono能带来更光明都未来。 长话短说,分离 Mono都计划没被执行,反而在5月2日加拿大和美国都团队被遣散了,几天后欧洲、巴西和日本团队也不能幸免.这包括MonoTouch和 MonoDroid工程师以及其他主要Mono开发人员。虽然Attachmate公司解散了我们,但只要我们在Novell都一天我们会继续给我们都用 户提供技术支持。 Mono项目有良好的前景,它为Linux以及IOS和Andriod提供C#以及框架支持。然而所有的实现都不是完善的。所以对开发人员都又局限 性。你不能简单快速的把.NET程序移植到Mono,因为缺失相应都框架类以及其它实现,尤其是WPF。同样的,如果使用Mono为iOS或 Andriod写个应用需要学习很多知识,它和在Windows Phone 7建立应用程序的关系不大。 还有在Mono中使用都微软的专利和知识产权问题,微软声称将来可能由于专利和知识产权而导致使用Mono的产生一系列的问题,现在不会对Mono有动作,但将来不见得。很多使用Mono做项目的开源支持者都视之为是个不定时炸-弹。 除了Mono和Moonlight,Xamarin还计划商业产品,既定目标是: 为iOS建立一个新都商业.NET; 为Andriod建立一个新都商业.NET; 继续为Mono和Moonlight贡献和开发; 为Moonlight在移动领域以及苹果Appstore寻求机会; 这两个商业项目需要更多都开发来为潜在的用户提供服务,需要更认真的工作。而且在移动领域以及苹果Appsotre来探索Moonlight的发展 也是件非常有趣的事情。Silerlight并没有成为微软声称的伟大的跨平台的统一者,目前来看貌似微软已经对其失去了兴趣。如果Mono能成为跨平台 的浏览器插件,可能会进一步触发微软的不定时炸-弹爆炸。这当然也不会被苹果所接受,因为这无疑是另一个Flash。 当然一切都归结于资金,如果又足够的资金这个项目或许会有所成就,博客声称已经得到一些资金,而且还有在合同期的工程师们。这听起来比较危险,他们没有足够都资金,只能寄希望于一些勇敢都基金了。 目前看来,Mono的用户都非常支持Miguel de Icaza和他的新公司。在他的博客评论中很多个人表示想投资,但前提是如果自己有钱。但这并不能对这事起到真正都改善作用。关键是.NET社区的反应以及微软的回应。 如果你想帮助Mono,可用访问Xamarin的网站:Xamarin website

July 10, 2011

.NET的Windows模拟身份验证,远程网络传输文件

在开发过程中,常常遇到这样的问题:文件,包括图片和文件上传到服务器,而Web服务器和文件服务器不是同一个,而且不在同一个域里面,那么针对于.NET应该如何处理这样的问题呢? 可能很多高手一下子就知道如何解决,但是我确实是经过了一番努力才弄明白,下面就结束如何使用.NET的Windows模拟身份验证。 1、首先引用两个名称空间 using System.Security.Principal; using System.Runtime.InteropServices; 2、其次定义好模拟权限的调用方法 region 权限模拟 public const int LOGON32_LOGON_INTERACTIVE = 2; public const int LOGON32_PROVIDER_DEFAULT = 0; [DllImport("advapi32.dll", CharSet = CharSet.Auto)] public static extern int LogonUser(String lpszUserName, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken); [DllImport("advapi32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = true)] public static extern int DuplicateToken(IntPtr hToken, int impersonationLevel, ref IntPtr hNewToken);<summary>/// 验证用户,并生成WindowsIdentity 实例 </summary>private static WindowsIdentity GetIdentity(String userName, String domain, String password) { IntPtr token = IntPtr.Zero; IntPtr tokenDuplicate = IntPtr.Zero; if (LogonUser(userName, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token) == 0) return null; else if (DuplicateToken(token, 2, ref tokenDuplicate) == 0) return null; else return new WindowsIdentity(tokenDuplicate); } public WindowsImpersonationContext GetContext() { WindowsIdentity identity = null; WindowsImpersonationContext impersonationContext = null; identity = string.IsNullOrEmpty(user) ? null : GetIdentity(user, null, pwd); // 使用用户凭证进行用户模拟 impersonationContext = (identity == null) ? null : identity.Impersonate(); return impersonationContext; } #endregion 3、在调用身份模拟的函数中使用 ...

May 21, 2011

Js实现Cookie操作,JavaScript的Cookie操作,源代码

Js实现Cookie操作,JavaScript的Cookie操作,源代码 在JavaScript中如何实现Cookie操作呢,下面给出源代码实现: function SetCookie(name,value,days) { if(days == null) days = 30; var exp = new Date; exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + "="+ escape(value) +";expires="+ exp.toGMTString() + "; path=/"; } function GetCookie(name) { var arr = document.cookie.match(new RegExp("(^ )"+name+"=([^;]*)(;$)")); if(arr != null) return unescape(arr[2]); return null; }

May 21, 2011

js弹出层,效果代码,鼠标移动消失

这两天要做一个JavaScript的弹出层效果,就是鼠标移动上面的时候弹出一个效果层,移开的时候就消失,网上搜索了一下,得到下面的一段实现代码: 1、JavaScript部分 function $(){return document.getElementById?document.getElementById(arguments[0]):eval(arguments[0]);} var OverH,OverW,ChangeDesc,ChangeH=50,ChangeW=50; function OpenDiv(_Dw,_Dh,_Desc) { $("BigBearLoading").innerHTML=""; OverH=_Dh;OverW=_Dw;ChangeDesc=_Desc; $("BigBearLoading").style.display=''; if(_Dw>_Dh){ChangeH=Math.ceil((_Dh-10)/((_Dw-10)/50))}else if(_Dw<_dh){changew=math.ceil((_dw-10)/((_dh-10)/50))} top="(document.documentElement.clientHeight-10)/2+" left="(document.documentElement.clientWidth-10)/2+" nw="10,Nh=">OverW-ChangeW)ChangeW=2; if (Nh>OverH-ChangeH)ChangeH=2; Nw=Nw+ChangeW;Nh=Nh+ChangeH; if(OverW>NwOverH>Nh) { if(OverW>Nw) { $("BigBearLoading").style.width=Nw+"px"; $("BigBearLoading").style.left=(document.documentElement.clientWidth-Nw)/2+"px"; } if(OverH>Nh) { $("BigBearLoading").style.height=Nh+"px"; $("BigBearLoading").style.top=(document.documentElement.clientHeight-Nh)/2+"px" } window.setTimeout("OpenNow()",10) }else{ Nw=10;Nh=10;ChangeH=50;ChangeW=50; $("BigBearLoading").innerHTML=ChangeDesc; } } function CloseDiv() { $("BigBearLoading").style.display="none"; } 2、css部分 body {margin:0px} #BigBearLoading {position:absolute;z-index:10;left:10px;top:10px;border:1px #666666 solid;background:#eeeeee;width:10px;height:10px} 3、div部分 创建一个span,包含下面的内容: onmouseover=“javascript:OpenDiv(500,300,‘有时间请经常来看看大熊工作室噢’)” onmouseout=“javascript:CloseDiv()” 请用鼠标移动到这里 创建一个div,设置为: id=“BigBearLoading” ondblclick=“this.style.display=‘none’” style=“DISPLAY: none”

May 21, 2011

设置Session永不过期,Session不过期

很多时候为了需要,必须使用Session,但是Session过期问题一直困扰很多人,我也是。通过网上的搜索,发现了可以通过两种方式了设置,但是只有一个可以永不过期。 保持Session的方法: (1)、设Session.timeout=-1,或小于0的数。这种方法肯定是不行的,session计算时间以分钟为单位,必须是大于等于1的整数。 (2)、设Session.timeout=99999。这种同样不行,Session有最大时间限制。 其实,Session最大值为24小时,也就是说你最大可以Session.timeout=1440,1441都是不可以有。 所以想通过设Session.timeout的过期时间让Session永不过期是不可能的。写到Cookies里是比较好的方法,但是Cookie非常的危险,如果在外面的电脑很容易被别人劫持,不安全! 那么有没有一种方法可以保持Session呢,可以使用一种办法,就是在要保持session的页里设隐藏iframe 这个Iframe每隔一段时间刷新一次这个Iframe页面就可以了。

May 21, 2011