??xml version="1.0" encoding="utf-8" standalone="yes"?>久久精品视频91,97久久久精品综合88久久,青青草原综合久久大伊人精品http://www.shnenglu.com/chenglong7997/category/19039.htmlzh-cnSun, 08 Apr 2012 21:30:08 GMTSun, 08 Apr 2012 21:30:08 GMT60HadoopQ从初出茅庐的小象变w行业巨?/title><link>http://www.shnenglu.com/chenglong7997/articles/170528.html</link><dc:creator>Snape</dc:creator><author>Snape</author><pubDate>Sun, 08 Apr 2012 17:53:00 GMT</pubDate><guid>http://www.shnenglu.com/chenglong7997/articles/170528.html</guid><wfw:comment>http://www.shnenglu.com/chenglong7997/comments/170528.html</wfw:comment><comments>http://www.shnenglu.com/chenglong7997/articles/170528.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/chenglong7997/comments/commentRss/170528.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/chenglong7997/services/trackbacks/170528.html</trackback:ping><description><![CDATA[<p style="line-height: 25px; text-align: center; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><img border="0" alt="" src="http://articles.csdn.net/uploads/allimg/120203/79_120203102044_1.jpg" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; cursor: pointer; width: 550px; height: 326px; " /></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">׃具备低成本和前所未有的高扩展性,Hadoop已被公认为是C代的大数据处理^台。就?0q前SQLQStructured Query LanguageQ出CPHadoop正带来了C轮的数据革命。如今Hadoop已从初出茅庐的小象变成了行业的巨人,但Hadoop仍需l箋完善?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">ZJava语言构徏的Hadoop框架实际上一U分布式处理大数据^収ͼ其包括Y件和众多子项目。在q十q中Hadoop已成为大数据革命的中心。MapReduce作ؓHadoop的核心是一U处理大型及大型数据集QTBU别的数据。包括网l点M生的数据、日志文件、社交网l等所带来的数据)q生成相关的执行的编E模型。其主要思想是从函数式编E语a借鉴而来的,同时也包含了从矢量编E语a借鉴的特性?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">互联|巨头YahooQ作为Hadoop框架的先qI者,?q时间已l将Hadoop塑造成了极为成功的技术。但相比于SQLQHadoop在某些方面仍然显得不够完善。这直接DC所有目光都集中在Hadoop供应商的w上。包括Amazon、Cloudera{公司带来众多的创新q提供强大的工具。Cloudera推出的CHD3包含众多的附加YӞ可以帮助理、运行Hadoop上的复杂dQ例如:Apache Mahout、Flume、Sqoop、Pig、Oozie、Hive、HBase、ZooKeeper、Whirr{。同时Cloudera也是目前最大的提供企业Hadoop技术支持和培训的厂商。而Amazon是较早在公共云中q行Hadoop的公司,其提供的ZMapReduce的弹性计可提供量的数据计服务?/p><p style="line-height: 25px; text-align: center; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><img border="0" alt="" src="http://articles.csdn.net/uploads/allimg/120203/79_120203102101_1.jpg" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; cursor: pointer; width: 550px; height: 269px; " /></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">但数据处理只是大数据处理的一部分Q组l最l想要得到的是经q分析后的有价值的数据。商业智能和数据分析厂商如Datameer、Hadapt以及Karmasphere显的不可或~?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">Hadoop?011q证明自w的价|最明显的迹象就是五大数据库理软g供应商EMC、IBM、Informatica、Microsoft以及Oracle都投入了Hadoop的怀抱。EMC与MapR展开合作Q而Microsoft和Oracle则分别与Hortonworks和Cloudera展开了合作。而EMC和Oracle已经推出了Hadoop专有讑֤。下面就让我们来看一下Hadoop在大数据领域都俘虏了那些公司的心?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong>AmazonZMapReduce的服?/strong></p><p style="line-height: 25px; text-align: center; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><img border="0" alt="" src="http://articles.csdn.net/uploads/allimg/120203/79_120203100157_1.jpg" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; cursor: pointer; width: 550px; height: 417px; " /></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">Amazon早在2009q就推出了基于Hadoop MapReduce的EC2QElastic Compute CloudQ服务。因此Amazon在应对用户应用和需求上昑־胸有成竹。无论是中小型企业还是超大型的组l,ZMapReduce的EC2服务都经受住了考验。同时AWSQ?a title="Powered by Text-Enhance" id="_GPLITA_0" in_rurl="http://www.textsrv.com/click?v=VVM6MTc4MjM6MzM2OmFtYXpvbjozNmU0MGEyNTkzY2Q2YjllMDhkOTg5ZjRhMGEzZWE0MDp6LTEwNDctMTQyMTI6Y2xvdWQuY3Nkbi5uZXQ%3D" style="color: #015fb6; ">Amazon</a> Web ServiceQ还包括Amazon S3QSimple storage ServiceQ。Amazon S3可提供高伸羃性、靠可靠性、高可用性以及极低的存储成本。利用AWS可高效的处理数据密集型的dQ如Web索引、数据挖掘、日志文件分析、机器学习以及科技和生物信息的学术研究?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong>Cloudera提供安全的Hadoopq_</strong></p><p style="line-height: 25px; text-align: center; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><img border="0" alt="" src="http://articles.csdn.net/uploads/allimg/120203/79_120203100228_1.jpg" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; cursor: pointer; width: 549px; height: 399px; " /></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">Cloudera也是比较早的大规模Hadoop软g和服务提供商。Cloudera一直专注于开源的Apache Hadoop完善成可靠的q_。Cloudera目前拥有100多家客户Qƈ且在本月q与Oracle展开合作Q共同进军大数据领域?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">在Cloudera提供了用于管理大数据的管理控制台和负责管理Hadoop部v的工具以及企业的支持。Cloudera的管理工h供基于向导式的Hadoop安装和配|菜单。同时提供相应的工具Q以帮助pȝ理员监控^台的健康状况、诊断问题、优化性能Qƈq行所需的配|和安全变更。而Cloudera的企业支持与服务包括配|检查、升U和与第三方pȝ集成以及其他技术资源。现今Cloudera理软g现在的h格是每节Ҏq?000元Q不包括gQ?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong>Datameer大数据与商业智能有机结?/strong></p><p style="line-height: 25px; text-align: center; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><img border="0" alt="" src="http://articles.csdn.net/uploads/allimg/120203/79_120203100537_1.jpg" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; cursor: pointer; width: 549px; height: 331px; " /></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">Datameer宣称其公司基于Hadoopq_的品方案DASQDatameer Analytics SolutionQ非帔R用于商业智能(BIQ。Datameer可通过JDBC、Hive、Httpq接M的数据源。同时包括一个向导驱动集成^収ͼ可安排负载ƈ从Q何结构化、半l构化和非结构化的大数据集。Datameer的大数据分析解决Ҏ通过表格接口整合Hadoop的数据挖掘能力。ƈ通过REST API在私有云和公׃中输入和输出数据?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong>EMC的统一数据分析q_</strong></p><p style="line-height: 25px; text-align: center; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><img border="0" alt="" src="http://articles.csdn.net/uploads/allimg/120203/79_120203100554_1.jpg" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; cursor: pointer; width: 549px; height: 346px; " /></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">EMC推出用于支持大数据分析的q_――EMC Greenpluml一分析q_(UAP)。Greenplum UAP是一个唯一的统一数据分析q_Q可扩展臛_他工P其独特之处在于,它将对大数据的认知和分n贯穿整个分析q程Q实现比以往更高的商业h倹{UAP包括EMC Greenplum 关系数据库、EMC Greenplum HD Hadoop以及EMC Greenplum Chorus。UAP好比一个数据分析团队,包括了从数据U学家和BI分析师到DBA和在U商业用户和理者。EMC针对g讑֤DCAQData Computing ApplianceQ,其以运行EMC Greenplum 关系数据库和EMC Greenplum HD节点。DCA提供控制理界面Q方便管理h员监视、管理Greenplum数据库和Hadooppȝ性能?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong>Hadapt与Hadoop环境无缝集成</strong></p><p style="line-height: 25px; text-align: center; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><img border="0" alt="" src="http://articles.csdn.net/uploads/allimg/120203/79_120203100612_1.jpg" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; cursor: pointer; width: 549px; height: 412px; " /></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">Hive作ؓq行在Hadoop上的数据仓库lgq不像Hadoop那样受hx。而Hadapt则提供集众多功能于一w的数据分析环境Q旨在处理存在于Hadoop和SQL环境中传l结构化的数据。Hadaptq_可运行在U有云和公共云之上,q提供从一个环境访问数据的能力。包括现有基于SQL的工具以及MapReduce处理和大数据分析。Hadapt自动分开执行Hadoop和关pL据库之间的查询,处分利用了Hadoop的高扩展性和关系数据库的高速性?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong>Hortonworksl承YahooQ?Hadoop衣钵</strong></p><p style="line-height: 25px; text-align: center; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><img border="0" alt="" src="http://articles.csdn.net/uploads/allimg/120203/79_120203100649_1.jpg" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; cursor: pointer; width: 550px; height: 413px; " /></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">Yahoo!在去q剥MHadoop业务Qƈ与硅谷风投公司Benchmark Capital合资l徏一家名为Hortonworks的公司。新公司包含在YahooQA献最大的50名工E师Q旨在l推动Hadoop的发展。Hortonworks高管断言q支以Yahoo!开发团队ؓ班底的公司将会A献更多的Hadoop代码Qƈ指引Hadoopq_未来的发展。Hortonworks已在d10月与微Y成ؓ合作伙伴关系。Hortonworks可帮助Microsoft推出Windowsq_之上的Hadoop。Hortonworks在去q?1月也推出了自qHDPQHortonworks Data PlatformQV1Q而结合了最?.23版Hadoop的HDP V2在2012q第一季度推出。Hortonworksq提供Hadoop的培训与支持Q加强在q方面与Cloudera和MapR的竞争?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong>IBM的Hadoop之\</strong></p><p style="line-height: 25px; text-align: center; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><img border="0" alt="" src="http://articles.csdn.net/uploads/allimg/120203/79_120203100707_1.jpg" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; cursor: pointer; width: 549px; height: 412px; " /></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">IBM在多q以前就开始研IHadoop。现今IBM提供Z云服务的量数据分析斚w多种Ҏ的选择Q但目前IBM的策略似乎主要是围绕Hadoop在发展。IBM?月推Z其SmartCloud云计^台。ƈ承诺改善Hadoop工作负蝲。IBM提供了基于Hadoop的InfoSphere BigInsightsQIBM InfoSphere BigInsights是用于分析和虚拟化v量数据的软g和服务,q款C品由 <a title="Powered by Text-Enhance" id="_GPLITA_2" in_rurl="http://www.textsrv.com/click?v=VVM6MTQyNTI6NjgwOmFwYWNoZTplYTk3YTYyZWU1YzE2MTRjNzAyYmVkNjljZmQ2ZDcyYTp6LTEwNDctMTQyMTI6Y2xvdWQuY3Nkbi5uZXQ%3D" style="color: #015fb6; ">Apache</a>Hadoop 提供技术支持。)基本版和企业版?InfoSphere BigInsights之前作ؓIBM试和开发的云品,现在被SmartCloud取代?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong>Informatica 向云更进一?/strong></p><p style="line-height: 25px; text-align: center; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><img border="0" alt="" src="http://articles.csdn.net/uploads/allimg/120203/79_120203100721_1.jpg" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; cursor: pointer; width: 550px; height: 414px; " /></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">大多数的数据理软g供应商(如IBM、Oracle、Syncsort、TalendQ都涉及到Hadoop。Informatica在去q?0月也推出了Hadoop环境下的数据~译转换解决Ҏ――HParser?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">该方案可以运行在几乎所有的Apache Hadoop分布式环境中Q与MapReduce架构qQ能高效率地把无l构的复杂数?#8213;―诸如|络记录、社交媒体数据、通话详细记录以及其他数据格式――转换为Hadoop中结构或半结构格式。当把数据{化ؓ更具l构性的格式后,便可以得到更快速的使用和生效,从而驱动业务发展、提高运营效率?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong>Karmasphere Hadoop数据分析利器</strong></p><p style="line-height: 25px; text-align: center; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><img border="0" alt="" src="http://articles.csdn.net/uploads/allimg/120203/79_120203100747_1.jpg" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; cursor: pointer; width: 549px; height: 412px; " /></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">Karmasphere提供了直接访问Hadoop中结构化和非l构化数据以及进一步分析查询的Ҏ,同时Karmasphereq提供的可视化工作空间。Karmasphere提供的可视化工具提供了SQL或其他特定查询语a分析位于Amazon S3、工作流以及本地文gpȝ上的l构化和非结构数据的Ҏ。企业还可以使用数据库或相关工具Q例如ExcelQ来提取分析得出的数据?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong>MapR带来更高性能的Hadoop</strong></p><p style="line-height: 25px; text-align: center; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><img border="0" alt="" src="http://articles.csdn.net/uploads/allimg/120203/79_120203100805_1.jpg" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; cursor: pointer; width: 549px; height: 393px; " /></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">MapR在Hadoop的舞C昑־格外耀|其提供Hadoop非常独特。MapRZ开源HadoopQ在只需有限g的环境中提供更快的Hadoop。同时Mapr配备了快照,q号UC会出现SPOF单节Ҏ障,且被认ؓ是与现有HDFS的API兼容。因此非常容易替换原有的pȝ。MapR最新的0.23版解册多开源Hadoop的缺陗而MapR与EMC的合作体现在了EMC Greenplum HD Enterprise Edition上,其就是基于MapR M5构徏的?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong>Microsoft全面拥抱Hadoop</strong></p><p style="line-height: 25px; text-align: center; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><img border="0" alt="" src="http://articles.csdn.net/uploads/allimg/120203/79_120203100832_1.jpg" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; cursor: pointer; width: 550px; height: 409px; " /></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">当EMC、IBM、Oracle都在2011q涉及HadoopӞMicrosoft全面拥抱Hadoop的D动就昑־不为奇了。而Hadoop的Windows Server在?012q推出,届时其还会与微Y现有的BI工具联合处理d。去q微软表C推出Windows Azure上的Hadoop预览版,微YqHadoop的数据通过部v在基于云的Windows Azure获取。ƈ使其能够与企业的商业工具一起分析数据。微软目前正与Hortonworks合作旨在努力化下载、安装和配置{几个Hadoop的相x术。包括HDFS、Hive、Pig。这有利于企业通过Hadoop拓宽自n的业务。微软将~写新的ODBC驱动E序q扩展自q有的查询pȝ到Hive。这样一来用户将能够直接从Excel、PowerView执行Hadoop查询?/p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><strong>Oracleq军云计?/strong></p><p style="line-height: 25px; text-align: center; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; "><img border="0" alt="" src="http://articles.csdn.net/uploads/allimg/120203/79_120203100852_1.jpg" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; cursor: pointer; width: 549px; height: 413px; " /></p><p style="line-height: 25px; text-align: left; font-family: Helvetica, Tahoma, Arial, sans-serif; background-color: #f8fafd; ">Oracle?011 Oracle全球大会上宣布推ZOracle Big Data Appliance。Big Data Appliance是一个集成了Hadoop、NoSQL Database、Oracle数据库Hadoop适配器、Oracle数据库Hadoop装蝲器及R语言的系l。Oracleq在今年1月与Cloudera成ؓ合作伙伴关系。Oracle现已Cloudera Distribution Including Apache HadoopQCDHQ和Cloudera Manager集成到Oracle大数据机之中。Oracle也将利用Cloudera在Hadoop领域的专业知识提供培训及咨询业务。Oracle大数据机中运行了Oracle Linux操作pȝQ?个机架中包含18个Oracle-Sun服务器,p216个核心,同时具备864GB的内存和648TB的存储能力,其售价ؓ45万美元。(李智/~译Q?/p><img src ="http://www.shnenglu.com/chenglong7997/aggbug/170528.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/chenglong7997/" target="_blank">Snape</a> 2012-04-09 01:53 <a href="http://www.shnenglu.com/chenglong7997/articles/170528.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hadoophttp://www.shnenglu.com/chenglong7997/articles/170527.htmlSnapeSnapeSun, 08 Apr 2012 17:49:00 GMThttp://www.shnenglu.com/chenglong7997/articles/170527.htmlhttp://www.shnenglu.com/chenglong7997/comments/170527.htmlhttp://www.shnenglu.com/chenglong7997/articles/170527.html#Feedback0http://www.shnenglu.com/chenglong7997/comments/commentRss/170527.htmlhttp://www.shnenglu.com/chenglong7997/services/trackbacks/170527.html

如今Apache Hadoop已成为大数据行业发展背后的驱动力。Hive和Pig{技术也l常被提刎ͼ但是他们都有什么功能,Z么会需要奇怪的名字Q如OozieQZooKeeper、FlumeQ?/p>

Hadoop带来了廉L处理大数据(大数据的数据定w通常?0-100GB或更多,同时数据U类多种多样Q包括结构化、非l构化等Q的能力。但q与之前有什么不同?

C企业数据仓库和关pd数据库擅长处理结构化数据Qƈ且可以存储大量的数据。但成本上有些昂c这U对数据的要求限制了可处理的数据U类Q同时这U惯性所带的~点q媄响到数据仓库在面Ҏv量异构数据时对于敏捷的探索。这通常意味着有h值的数据源在l织内从未被挖掘。这是Hadoop与传l数据处理方式最大的不同?/p>

本文重Ҏ讨了Hadooppȝ的组成部分,q解释各个组成部分的功能?/p>

MapReduce——Hadoop的核?/strong>

Google的网l搜索引擎在得益于算法发挥作用的同时QMapReduce在后台发挥了极大的作用。MapReduce框架成ؓ当今大数据处理背后的最具媄响力?#8220;发动?#8221;。除了HadoopQ你q会在MapReduce上发现MPPQSybase IQ推出了列C数据库Q和NoSQLQ如Vertica和MongoDBQ?/p>

MapReduce的重要创新是当处理一个大数据集查询时会将其Q务分解ƈ在运行的多个节点中处理。当数据量很大时无法在一台服务器上解决问题,此时分布式计优势就体现出来。将q种技术与Linux服务器结合可获得性h比极高的替代大规模计阵列的Ҏ。Yahoo?006q看CHadoop未来的潜力,q请Hadoop创始人Doug Cutting着手发展Hadoop技术,?008qHadoop已经形成一定的规模。Hadoop目再从初期发展的成熟的q程中同时吸U了一些其他的lgQ以便进一步提高自w的易用性和功能?/p>

HDFS和MapReduce

以上我们讨论了MapReduceQ务分发到多个服务器上处理大数据的能力。而对于分布式计算Q每个服务器必须具备Ҏ据的讉K能力Q这是HDFSQHadoop Distributed File SystemQ所起到的作用?/p>

HDFS与MapReduce的结合是强大的。在处理大数据的q程中,当Hadoop集群中的服务器出现错误时Q整个计过Eƈ不会l止。同时HFDS可保障在整个集群中发生故障错误时的数据冗余。当计算完成时将l果写入HFDS的一个节点之中。HDFS对存储的数据格式q无苛刻的要求,数据可以是非l构化或其它cd。相反关pL据库在存储数据之前需要将数据l构化ƈ定义架构?/p>

开发h员编写代码责L使数据有意义。Hadoop MapReduceU的~程利用Java APIsQƈ可手动加载数据文件到HDFS之中?/p>

Pig和Hive

对于开发h员,直接使用Java APIs可能是乏xҎ出错的,同时也限制了JavaE序员在Hadoop上编E的q用灉|性。于是Hadoop提供了两个解x案,使得Hadoop~程变得更加Ҏ?/p>

•Pig是一U编E语aQ它化了Hadoop常见的工作Q务。Pig可加载数据、表达{换数据以及存储最l结果。Pig内置的操作得半l构化数据变得有意义Q如日志文gQ。同时Pig可扩展用Java中添加的自定义数据类型ƈ支持数据转换?/p>

•Hive在Hadoop中扮演数据仓库的角色。Hived数据的结构在HDFSQhive superimposes structure on data in HDFSQ,q允怋用类gSQL语法q行数据查询。与Pig一PHive的核心功能是可扩展的?/p>

Pig和HiveL令h困惑的。Hive更适合于数据仓库的dQHive主要用于静态的l构以及需要经常分析的工作。Hive与SQL怼促其成为Hadoop与其他BI工具l合的理想交集。Pig赋予开发h员在大数据集领域更多的灵zL,q允许开发简z的脚本用于转换数据以便嵌入到较大的应用程序。Pig相比Hive相对轻量Q它主要的优势是相比于直接用Hadoop Java APIs可大q削减代码量。正因ؓ如此QPig仍然是吸引大量的软g开发h员?/p>

改善数据讉KQHBase、Sqoop以及Flume

Hadoop核心q是一套批处理pȝQ数据加载进HDFS、处理然后检索。对于计这或多或少有些倒退Q但通常互动和随机存取数据是有必要的。HBase作ؓ面向列的数据库运行在HDFS之上。HBase以Google BigTable本。项目的目标是快速在L内数十亿行数据中定位所需的数据ƈ讉K它。HBase利用MapReduce来处理内部的量数据。同时Hive和Pig都可以与HBasel合使用QHive和PigqؓHBase提供了高层语a支持Q得在HBase上进行数据统计处理变的非常简单?/p>

但ؓ了授权随机存储数据,HBase也做Z一些限Ӟ例如Hive与HBase的性能比原生在HDFS之上的Hive要慢4-5倍。同时HBase大约可存储PBU的数据Q与之相比HDFS的容量限制达?0PB。HBase不适合用于ad-hoc分析QHBase更适合整合大数据作为大型应用的一部分Q包括日志、计以及时间序列数据?/p>

获取数据与输出数?/strong>

Sqoop和Flume可改q数据的互操作性和其余部分。Sqoop功能主要是从关系数据库导入数据到HadoopQƈ可直接导入到HFDS或Hive。而Flume设计旨在直接流数据或日志数据导入HDFS?/p>

Hive具备的友好SQL查询是与J多数据库的理想l合点,数据库工具通过JDBC或ODBC数据库驱动程序连接?/p>

负责协调工作程的ZooKeeper和Oozie

随着来多的项目加入Hadoop大家庭ƈ成ؓ集群pȝq作的一部分Q大数据处理pȝ需要负责协调工作的的成员。随着计算节点的增多,集群成员需要彼此同步ƈ了解d里访问服务和如何配置QZooKeeper正是为此而生的?/p>

而在Hadoop执行的Q务有时候需要将多个Map/Reduce作业q接CP它们之间或许Ҏ依赖。Oozielg提供理工作程和依赖的功能Qƈ无需开发h员编写定制的解决Ҏ?/p>

Ambari是最新加入Hadoop的项目,Ambari目旨在监控和理{核心功能加入Hadoop目。Ambari可帮助系l管理员部v和配|HadoopQ升U集以及监控服务。还可通过API集成与其他的pȝ理工具?/p>

Apache Whirr是一套运行于云服务的cdQ包括HadoopQ,可提供高度的互补性。WhirrC相对中立Q当前支持Amazon EC2和Rackspace服务?/p>

机器学习QMahout 

各类l织需求的不同D相关的数据Ş形色Ԍ对这些数据的分析也需要多样化的方法。Mahout提供一些可扩展的机器学习领域经典算法的实现Q旨在帮助开发h员更加方便快捷地创徏应用E序。Mahout包含许多实现Q包括集、分cR推荐过滤、频J子Ҏ掘?/p>

使用Hadoop

通常情况下,Hadoop应用于分布式环境。就像之前Linux的状况一P厂商集成和测试Apache Hadoop生态系l的lgQƈd自己的工具和理功能。(李智/~译Q?/p>

Snape 2012-04-09 01:49 发表评论
]]>
函数式编E初?/title><link>http://www.shnenglu.com/chenglong7997/articles/170526.html</link><dc:creator>Snape</dc:creator><author>Snape</author><pubDate>Sun, 08 Apr 2012 17:48:00 GMT</pubDate><guid>http://www.shnenglu.com/chenglong7997/articles/170526.html</guid><wfw:comment>http://www.shnenglu.com/chenglong7997/comments/170526.html</wfw:comment><comments>http://www.shnenglu.com/chenglong7997/articles/170526.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/chenglong7997/comments/commentRss/170526.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/chenglong7997/services/trackbacks/170526.html</trackback:ping><description><![CDATA[<span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">诞生50多年之后Q?/span><a target="_blank" style="color: #006699; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; "><strong>函数式编E?/strong></a><strong style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">Qfunctional programmingQ开始获得越来越多的x</strong><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">不仅最古老的函数式语aLisp重获青春Q而且新的函数式语a也层ZIP比如Erlang、Clojure、Scala,、F#{等。目前最当红的Python、Ruby、JavascriptQ对函数式编E的支持都很强,p老牌的面向对象的Java、面向过E的PHPQ都忙不q地加入对匿名函数的支持。越来越多的q象表明Q?/span><strong style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">函数式编E已l不再只是学术界的最爱,也开始大t步地在业界投入使用</strong><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><strong style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">也许l?面向对象~程"之后Q?函数式编E?会成Z一个编E的L范式</strong><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">。未来的E序员恐怕或多或都必须懂一炏V?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">但是Q?函数式编E?看上L较难Q缺乏通俗的入门教E,各种介绍文章都充斥着数学W号和专用术语,让hM如坠云雾。就q最基本的问?什么是函数式编E?"Q网上都搜不到易懂的回答?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">下面是我Q指本文作?/span><a target="_blank" style="color: #006699; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">阮一?/a><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">Q的"函数式编E?学习W记Q分享出来,与大家一h讨。内容不涉及数学Q?/span><a target="_blank" style="color: #006699; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">Lambda Calculus</a><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">我也不懂Q,也不涉及高Ҏ(比如</span><a target="_blank" style="color: #006699; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">lazy evaluation</a><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">?/span><a target="_blank" style="color: #006699; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">currying</a><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">Q,只求量单通俗地整理和表达Q我现在所理解?函数式编E?以及它的意义?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">我主要参考了Slava Akhmechet?</span><a target="_blank" style="color: #006699; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">Functional Programming For The Rest of Us</a><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">"一文?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><strong style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">一、定?/strong> <br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">单说Q?/span><strong style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">"函数式编E?是一U?~程范式"Q也是如何~写E序的方法论</strong><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">它属?l构化编E?的一U,主要思想是把q算q程量写成一pd嵌套的函数调用。D例来_现在有这样一个数学表辑ּQ?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">(1 + 2) * 3 - 4 </span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">传统的过E式~程Q可能这样写Q?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><div style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; background-color: #f7f7f7; width: 665px; margin-left: 9px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; word-break: break-all; word-wrap: break-word; line-height: 25px; text-align: left; "><div><div style="padding-right: 3px; padding-bottom: 3px; padding-left: 3px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: bold; ">代码 <embed wmode="transparent" src="http://www.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=var%20a%20%3D%201%20%2B%202%EF%BC%9B%0A%0Avar%20b%20%3D%20a%20*%203%EF%BC%9B%0A%0Avar%20c%20%3D%20b%20-%204%EF%BC%9B%0A" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></div></div><ol start="1" style="font-size: 1em; line-height: 1.4em; margin-left: 0px; padding-top: 2px; padding-bottom: 2px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #d1d7dc; border-right-color: #d1d7dc; border-bottom-color: #d1d7dc; border-left-color: #d1d7dc; color: #2b91af; "><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">var a = <span style="color: #c00000; ">1</span> + <span style="color: #c00000; ">2</span>Q?nbsp; </li><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">  </li><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">var b = a * <span style="color: #c00000; ">3</span>Q?nbsp; </li><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">  </li><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">var c = b - <span style="color: #c00000; ">4</span>Q?nbsp; </li></ol></div><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">函数式编E要求用函敎ͼ我们可以把运过E定义ؓ不同的函敎ͼ然后写成下面q样Q?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><div style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; background-color: #f7f7f7; width: 665px; margin-left: 9px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; word-break: break-all; word-wrap: break-word; line-height: 25px; text-align: left; "><div><div style="padding-right: 3px; padding-bottom: 3px; padding-left: 3px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: bold; ">代码 <embed wmode="transparent" src="http://www.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=var%20result%20%3D%20subtract(multiply(add(1%2C2)%2C%203)%2C%204)%EF%BC%9B" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></div></div><ol start="1" style="font-size: 1em; line-height: 1.4em; margin-left: 0px; padding-top: 2px; padding-bottom: 2px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #d1d7dc; border-right-color: #d1d7dc; border-bottom-color: #d1d7dc; border-left-color: #d1d7dc; color: #2b91af; "><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">var result = subtract(multiply(add(<span style="color: #c00000; ">1</span>,<span style="color: #c00000; ">2</span>), <span style="color: #c00000; ">3</span>), <span style="color: #c00000; ">4</span>)Q?nbsp; </li></ol></div><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">q就是函数式~程?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><strong style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">二、特?/strong> <br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">函数式编E具有五个鲜明的特点?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><strong style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">1、函数是"W一{公?</strong> <br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">所?</span><a target="_blank" style="color: #006699; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">W一{公?/a><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">"Qfirst classQ,指的是函C其他数据cd一P处于q等CQ可以赋值给其他变量Q也可以作ؓ参数Q传入另一个函敎ͼ或者作为别的函数的q回倹{?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">举例来说Q下面代码中的print变量是一个函敎ͼ可以作ؓ另一个函数的参数?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><div style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; background-color: #f7f7f7; width: 665px; margin-left: 9px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; word-break: break-all; word-wrap: break-word; line-height: 25px; text-align: left; "><div><div style="padding-right: 3px; padding-bottom: 3px; padding-left: 3px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: bold; ">代码 <embed wmode="transparent" src="http://www.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=%0Avar%20print%20%3D%20function(i)%7B%20console.log(i)%3B%7D%EF%BC%9B%0A%0A%5B1%2C2%2C3%5D.forEach(print)%EF%BC%9B%0A" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></div></div><ol start="1" style="font-size: 1em; line-height: 1.4em; margin-left: 0px; padding-top: 2px; padding-bottom: 2px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #d1d7dc; border-right-color: #d1d7dc; border-bottom-color: #d1d7dc; border-left-color: #d1d7dc; color: #2b91af; "><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">var print = function(i){ console.log(i);}Q?nbsp; </li><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">  </li><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">[<span style="color: #c00000; ">1</span>,<span style="color: #c00000; ">2</span>,<span style="color: #c00000; ">3</span>].forEach(print)Q?nbsp; </li></ol></div><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><strong style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">2、只?表达?Q不?语句"</strong> <br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">"表达?是一个单U的q算q程QL有返回|"语句"是执行某U操作,没有q回倹{函数式~程要求Q只使用表达式,不用语句。也是_</span><strong style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">每一步都是单U的q算Q而且都有q回?/strong><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">原因是函数式~程的开发动机,一开始就是ؓ了处理运,不考虑pȝ的读写(I/OQ?语句"属于对系l的d操作Q所以就被排斥在外?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">当然Q实际应用中Q不做I/O是不可能的。因此,~程q程中,函数式编E只要求把I/O限制到最,不要有不必要的读写行为,保持计算q程的单U性?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><strong style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">3、没?副作?</strong> <br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">所?</span><a target="_blank" style="color: #006699; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">副作?/a><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">"Qside effectQ,指的是函数内部与外部互动Q最典型的情况,是修改全局变量的|Q生运以外的其他l果?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">函数式编E强调没?副作?Q?/span><strong style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">意味着函数要保持独立,所有功能就是返回一个新的|没有其他行ؓ</strong><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">Q尤其是不得修改外部变量的倹{?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><strong style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">4、不修改状?/strong> <br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">上一点已l提刎ͼ函数式编E只是返回新的|不修改系l变量。因此,不修改变量,也是它的一个重要特炏V?/span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">在其他类型的语言中,变量往往用来保存"状?。不修改变量Q意味着状态不能保存在变量中。函数式~程使用参数保存状态,最好的例子是递归。下面的代码是一个将字符串逆序排列的函敎ͼ它演CZ不同的参数如何决定了q算所处的"状??nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><div style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; background-color: #f7f7f7; width: 665px; margin-left: 9px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; word-break: break-all; word-wrap: break-word; line-height: 25px; text-align: left; "><div><div style="padding-right: 3px; padding-bottom: 3px; padding-left: 3px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: bold; ">代码 <embed wmode="transparent" src="http://www.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=%0Afunction%20reverse(string)%20%7B%0A%0A%E3%80%80%E3%80%80%E3%80%80%E3%80%80if(string.length%20%3D%3D%200)%0A%20%20%20%20%20%20%20%20%7B%0A%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80return%20string%3B%0A%E3%80%80%E3%80%80%E3%80%80%E3%80%80%7D%20%0A%20%20%20%20%20%20%20%20else%20%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20return%20reverse(string.substring(1%2C%20string.length))%20%2B%20string.substring(0%2C%201)%3B%0A%E3%80%80%E3%80%80%E3%80%80%E3%80%80%7D%0A%0A%E3%80%80%E3%80%80%7D%0A" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></div></div><ol start="1" style="font-size: 1em; line-height: 1.4em; margin-left: 0px; padding-top: 2px; padding-bottom: 2px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #d1d7dc; border-right-color: #d1d7dc; border-bottom-color: #d1d7dc; border-left-color: #d1d7dc; color: #2b91af; "><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">function reverse(string) {  </li><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">  </li><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">    if(string.length == <span style="color: #c00000; ">0</span>)  </li><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">        {  </li><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">      return string;  </li><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">    }   </li><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">        else   </li><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">        {  </li><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">           return reverse(string.substring(<span style="color: #c00000; ">1</span>, string.length)) + string.substring(<span style="color: #c00000; ">0</span>, <span style="color: #c00000; ">1</span>);  </li><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">    }  </li><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">  </li><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">  }  </li></ol></div><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><strong style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">׃使用了递归Q函数式语言的运行速度比较慢,q是它长期不能在业界推广的主要原?/strong><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><strong style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">5、引用透明</strong> <br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">引用透明QReferential transparencyQ,指的是函数的q行不依赖于外部变量?状?Q只依赖于输入的参数QQ何时候只要参数相同,引用函数所得到的返回值L相同的?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">有了前面的第三点和第四点Q这Ҏ很显然的。其他类型的语言Q函数的q回值往往与系l状态有养I不同的状态之下,q回值是不一L。这叫"引用不透明"Q很不利于观察和理解E序的行为?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><strong style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">三、意?/strong> <br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">函数式编E到底有什么好处,Z么会变得来流行? </span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><strong style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">1、代码简z,开发快?/strong> <br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">函数式编E大量用函敎ͼ减少了代码的重复Q因此程序比较短Q开发速度较快?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">Paul Graham在?/span><a target="_blank" style="color: #006699; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">黑客与画?/a><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">》一书中</span><a target="_blank" style="color: #006699; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">写道</a><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">Q同样功能的E序Q极端情况下QLisp代码的长度可能是C代码的二十分之一?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><strong style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">如果E序员每天所写的代码行数度基本相同,q就意味着</strong><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">Q?C语言需要一q时间完成开发某个功能,Lisp语言只需要不C星期。反q来_如果某个新功能,Lisp语言完成开发需要三个月QC语言需要写五年?当然Q这LҎ故意夸大了差异,但是"在一个高度竞争的市场中,即开发速度只相差两三倍,也以得你永远处在落后的位|? </span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><strong style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">2、接q自然语aQ易于理?/strong> <br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">函数式编E的自由度很高,可以写出很接q自然语a的代码?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">前文曄表辑ּ(1 + 2) * 3 - 4Q写成函数式语言Q?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><div style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; background-color: #f7f7f7; width: 665px; margin-left: 9px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; word-break: break-all; word-wrap: break-word; line-height: 25px; text-align: left; "><div><div style="padding-right: 3px; padding-bottom: 3px; padding-left: 3px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: bold; ">代码 <embed wmode="transparent" src="http://www.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=subtract(multiply(add(1%2C2)%2C%203)%2C%204)" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></div></div><ol start="1" style="font-size: 1em; line-height: 1.4em; margin-left: 0px; padding-top: 2px; padding-bottom: 2px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #d1d7dc; border-right-color: #d1d7dc; border-bottom-color: #d1d7dc; border-left-color: #d1d7dc; color: #2b91af; "><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">subtract(multiply(add(<span style="color: #c00000; ">1</span>,<span style="color: #c00000; ">2</span>), <span style="color: #c00000; ">3</span>), <span style="color: #c00000; ">4</span>)  </li></ol></div><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">对它q行变ŞQ不隑־到另一U写法: </span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><div style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; background-color: #f7f7f7; width: 665px; margin-left: 9px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; word-break: break-all; word-wrap: break-word; line-height: 25px; text-align: left; "><div><div style="padding-right: 3px; padding-bottom: 3px; padding-left: 3px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: bold; ">代码 <embed wmode="transparent" src="http://www.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=add(1%2C2).multiply(3).subtract(4)" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></div></div><ol start="1" style="font-size: 1em; line-height: 1.4em; margin-left: 0px; padding-top: 2px; padding-bottom: 2px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #d1d7dc; border-right-color: #d1d7dc; border-bottom-color: #d1d7dc; border-left-color: #d1d7dc; color: #2b91af; "><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">add(<span style="color: #c00000; ">1</span>,<span style="color: #c00000; ">2</span>).multiply(<span style="color: #c00000; ">3</span>).subtract(<span style="color: #c00000; ">4</span>)  </li></ol></div><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">q基本就是自然语a的表达了。再看下面的代码Q大家应该一眼就能明白它的意思吧Q?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><div style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; background-color: #f7f7f7; width: 665px; margin-left: 9px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; word-break: break-all; word-wrap: break-word; line-height: 25px; text-align: left; "><div><div style="padding-right: 3px; padding-bottom: 3px; padding-left: 3px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: bold; ">代码 <embed wmode="transparent" src="http://www.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=merge(%5B1%2C2%5D%2C%5B3%2C4%5D).sort().search(%222%22)" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></div></div><ol start="1" style="font-size: 1em; line-height: 1.4em; margin-left: 0px; padding-top: 2px; padding-bottom: 2px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #d1d7dc; border-right-color: #d1d7dc; border-bottom-color: #d1d7dc; border-left-color: #d1d7dc; color: #2b91af; "><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">merge([<span style="color: #c00000; ">1</span>,<span style="color: #c00000; ">2</span>],[<span style="color: #c00000; ">3</span>,<span style="color: #c00000; ">4</span>]).sort().search("2")  </li></ol></div><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><strong style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">3、更方便的代码管?/strong> <br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">函数式编E不依赖、也不会改变外界的状态,只要l定输入参数Q返回的l果必定相同。因此,每一个函数都可以被看做独立单元,很有利于q行单元试Qunit testingQ和除错QdebuggingQ,以及模块化组合?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><strong style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">4、易?q发~程"</strong> <br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">函数式编E不需要考虑"死锁"QdeadlockQ,因ؓ它不修改变量Q所以根本不存在"?U程的问题。不必担心一个线E的数据Q被另一个线E修改,所以可以很攑ֿ地把工作分摊到多个线E,部v"q发~程"QconcurrencyQ?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">L下面的代码: </span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><div style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; background-color: #f7f7f7; width: 665px; margin-left: 9px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; word-break: break-all; word-wrap: break-word; line-height: 25px; text-align: left; "><div><div style="padding-right: 3px; padding-bottom: 3px; padding-left: 3px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-weight: bold; ">代码 <embed wmode="transparent" src="http://www.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=%0Avar%20s1%20%3D%20Op1()%EF%BC%9B%0A%0Avar%20s2%20%3D%20Op2()%EF%BC%9B%0A%0Avar%20s3%20%3D%20concat(s1%2C%20s2)%EF%BC%9B%0A%0A" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></div></div><ol start="1" style="font-size: 1em; line-height: 1.4em; margin-left: 0px; padding-top: 2px; padding-bottom: 2px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #d1d7dc; border-right-color: #d1d7dc; border-bottom-color: #d1d7dc; border-left-color: #d1d7dc; color: #2b91af; "><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">var s1 = Op1()Q?nbsp; </li><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">  </li><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">var s2 = Op2()Q?nbsp; </li><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">  </li><li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; ">var s3 = concat(s1, s2)Q?nbsp; </li></ol></div><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">׃s1和s2互不q扰Q不会修改变量,谁先执行是无所谓的Q所以可以放心地增加U程Q把它们分配在两个线E上完成。其他类型的语言做不到q一 点,因ؓs1可能会修改系l状态,而s2可能会用到这些状态,所以必M证s2在s1之后q行Q自然也׃能部|到其他U程上了?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><strong style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">多核CPU是将来的潮流Q所以函数式~程的这个特性非帔R?/strong><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">?nbsp;</span><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><strong style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">5、代码的热升U?/strong> <br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><br style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; " /><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">函数式编E没有副作用Q只要保证接口不变,内部实现是外部无关的。所以,可以在运行状态下直接升代码Q不需要重启,也不需要停机?/span><a target="_blank" style="color: #006699; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">Erlang</a><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #f7f7f7; ">语言早就证明了这一点,它是瑞典q信公ؓ了管理电话系l而开发的Q电话系l的升当然是不能停机的?/span> <img src ="http://www.shnenglu.com/chenglong7997/aggbug/170526.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/chenglong7997/" target="_blank">Snape</a> 2012-04-09 01:48 <a href="http://www.shnenglu.com/chenglong7997/articles/170526.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.glhu.cn" target="_blank">޹Ʒþþž</a>| <a href="http://www.lntyyp.cn" target="_blank">þӰԺһ</a>| <a href="http://www.tafeemanager.cn" target="_blank">þҹӰԺѹۿ</a>| <a href="http://www.lenglie.cn" target="_blank">AAAþþþƷ</a>| <a href="http://www.ding-u.cn" target="_blank">þþƷƵһ</a>| <a href="http://www.glrsjk.cn" target="_blank">þþþþAŷAV</a>| <a href="http://www.tv81.cn" target="_blank">һƷþ</a>| <a href="http://www.ulcc.com.cn" target="_blank">þ㽶߿ۿƷyw</a>| <a href="http://www.jiujimenye.cn" target="_blank">72ŷþþþôƽ</a>| <a href="http://www.lnboxue.cn" target="_blank">þþƷѹۿ</a>| <a href="http://www.ahzyjlr.cn" target="_blank">þþþ97Һ</a>| <a href="http://www.hwumbrella.cn" target="_blank">ҹþþ</a>| <a href="http://www.ditiewang.com.cn" target="_blank">þþþƷҹѲ</a>| <a href="http://www.cnycql.cn" target="_blank">þ99ھƷ</a>| <a href="http://www.seasa.cn" target="_blank">þۺϾƷ</a>| <a href="http://www.henpu.cn" target="_blank">Ʒþþþ</a>| <a href="http://www.tengfangwang.cn" target="_blank">AVþþƷ</a>| <a href="http://www.zyxslswx.cn" target="_blank">99þѹƷػ</a>| <a href="http://www.bqtao.cn" target="_blank">ŷþþþþ</a>| <a href="http://www.qqtushu.cn" target="_blank">ۺϾþþþþ</a>| <a href="http://www.tingzei.cn" target="_blank">AVպƷþþþ</a>| <a href="http://www.idotime.cn" target="_blank">þԭƷ </a>| <a href="http://www.huameizc.cn" target="_blank">޹Ʒþþþþ</a>| <a href="http://www.tjjykj.com.cn" target="_blank">þþŷղ</a>| <a href="http://www.2nder.cn" target="_blank">þþþһvr</a>| <a href="http://www.dlucai.cn" target="_blank">һɫۺϾþ</a>| <a href="http://www.www008tt.cn" target="_blank">ƷѾþþþõӰ</a>| <a href="http://www.sme88.cn" target="_blank">ݺɫþþһ</a>| <a href="http://www.x247.cn" target="_blank">˾þþƷӰԺ</a>| <a href="http://www.hbxasn.cn" target="_blank">þѾƷav</a>| <a href="http://www.hnwjzd.com.cn" target="_blank">þþþþþƷͼƬ</a>| <a href="http://www.bolidianqi.cn" target="_blank">þþƷ18</a>| <a href="http://www.shairproperty.cn" target="_blank">þþWWW</a>| <a href="http://www.ghfsp.cn" target="_blank">þ</a>| <a href="http://www.softplat.cn" target="_blank">˾ҹվھƷþþþþþþ</a>| <a href="http://www.hdv1p7.cn" target="_blank">þþþƷ鶹</a>| <a href="http://www.lihengzhe.cn" target="_blank">޾Ʒһþþ </a>| <a href="http://www.hoolhooy.cn" target="_blank">˾þþƷ</a>| <a href="http://www.ncysjz.cn" target="_blank">þþþþþۺձ</a>| <a href="http://www.kq58.cn" target="_blank">99þþƷҹһ </a>| <a href="http://www.mianfeiwg.cn" target="_blank">ɫۺϾþþĻ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>