??xml version="1.0" encoding="utf-8" standalone="yes"?>日韩十八禁一区二区久久,久久久久久夜精品精品免费啦,久久亚洲精品无码AV红樱桃http://m.shnenglu.com/dawnbreak/category/8919.htmlPearLi's Blogzh-cnThu, 03 Sep 2009 03:12:46 GMTThu, 03 Sep 2009 03:12:46 GMT60Hadoop学习W记一 要介l?http://m.shnenglu.com/dawnbreak/articles/95178.htmlpear_lipear_liThu, 03 Sep 2009 02:58:00 GMThttp://m.shnenglu.com/dawnbreak/articles/95178.htmlhttp://m.shnenglu.com/dawnbreak/comments/95178.htmlhttp://m.shnenglu.com/dawnbreak/articles/95178.html#Feedback0http://m.shnenglu.com/dawnbreak/comments/commentRss/95178.htmlhttp://m.shnenglu.com/dawnbreak/services/trackbacks/95178.html    q里先大致介l一下Hadoop.
    本文大部分内定w是从官网Hadoop上来的。其中有一?/span>介绍HDFS的pdf文档Q里面对Hadoop介绍的比较全面了。我的这一个系列的Hadoop学习W记也是?/span>q里一步一步进行下来的Q同时又参考了|上的很多文章,对学习Hadoop中遇到的问题q行了归Uxȝ?br>    a归正传,先说一下Hadoop的来龙去脉。谈到Hadoop׃得不提到Lucene?/span>Nutch。首先,Luceneq不是一个应用程序,而是提供了一个纯Java的高性能全文索引引擎工具?/span>Q它可以方便的嵌入到各种实际应用中实现全文搜?索引功能?span style="COLOR: #0000ff">Nutch是一个应用程序,是一个以Lucene为基实现的搜索引擎应?/span>QLucene为Nutch提供了文本搜索和索引的APIQNutch不光有搜索的功能Q还有数据抓取的功能。在nutch0.8.0版本之前QHadoopq属于Nutch的一部分Q而从nutch0.8.0开始,其中实现的NDFS和MapReduce剥离出来成立一个新的开源项目,q就是HadoopQ而nutch0.8.0版本较之以前的Nutch在架构上有了Ҏ性的变化Q那是完全构徏在Hadoop的基之上了。在Hadoop中实CGoogle的GFS和MapReduce法QHadoop成ؓ了一个分布式的计^台?br>   其实QHadoopq不仅仅是一个用于存储的分布式文件系l,而是设计用来在由通用计算讑֤l成的大型集上执行分布式应用的框架?br>
   Hadoop包含两个部分Q?/span>

   1、HDFS

      即Hadoop Distributed File System (Hadoop分布式文件系l?
      HDFSh高容错性,q且可以被部|在低h的硬件设备之上。HDFS很适合那些有大数据集的应用Qƈ且提供了Ҏ据读写的高吞吐率。HDFS是一个master/slave的结构,通常的部|来_在master上只q行一个NamenodeQ而在每一个slave上运行一个Datanode?br>      HDFS支持传统的层ơ文件组l结构,同现有的一些文件系l在操作上很cMQ比如你可以创徏和删除一个文Ӟ把一个文件从一个目录移到另一个目录,重命名等{操作。Namenode理着整个分布式文件系l,Ҏ件系l的操作Q如建立、删除文件和文g夹)都是通过Namenode来控制?nbsp;
     下面是HDFS的结构:


      从上面的图中可以看出QNamenodeQDatanodeQClient之间的通信都是建立在TCP/IP的基之上的。当Client要执行一个写入的操作的时候,命o不是马上发送到NamenodeQClient首先在本Z临时文g夹中~存q些数据Q当临时文g夹中的数据块辑ֈ了设定的Block的|默认?4MQ时QClient便会通知NamenodeQNamenode便响应Client的RPChQ将文g名插入文件系l层ơ中q且在Datanode中找C块存放该数据的blockQ同时将该Datanode及对应的数据块信息告诉ClientQClient便这些本C时文件夹中的数据块写入指定的数据节点?br>      HDFS采取了副本策略,其目的是Z提高pȝ的可靠性,可用性。HDFS的副本放|策略是三个副本Q一个放在本节点上,一个放在同一机架中的另一个节点上Q还有一个副本放在另一个不同的机架中的一个节点上。当前版本的hadoop0.12.0中还没有实现Q但是正在进行中Q相信不久就可以出来了?br>
   2、MapReduce的实?br>
      
MapReduce是Google 的一w要技术,它是一个编E模型,用以q行大数据量的计。对于大数据量的计算Q通常采用的处理手法就是ƈ行计。至现阶段而言Q对许多开发h员来_q行计算q是一个比较遥q的东西。MapReduce是一U简化ƈ行计的~程模型Q它让那些没有多ƈ行计经验的开发h员也可以开发ƈ行应用?br>      MapReduce的名字源于这个模型中的两Ҏ心操作:Map?Reduce。也许熟悉Functional ProgrammingQ?/span>函数式编E?/font>Q的到这两个词会倍感亲切。简单的说来QMap是把一l数据一对一的映ؓ另外的一l数据,其映的规则׃个函数来指定Q比如对[1, 2, 3, 4]q行?的映就变成了[2, 4, 6, 8]。Reduce是对一l数据进行归U,q个归约的规则由一个函数指定,比如对[1, 2, 3, 4]q行求和的归U得到结果是10Q而对它进行求U的归约l果?4?br>      关于MapReduce的内容,看看孟岩的这?/span>MapReduce:The Free Lunch Is Not Over!

   好了Q作个系列的W一就写这么多了,我也是刚开始接触HadoopQ下一就是讲Hadoop的部|Ԍ谈谈我在部vHadoop旉到的问题Q也l大家一个参考,走点弯路?/span>
 


pear_li 2009-09-03 10:58 发表评论
]]>
Map Reduce - the Free Lunch is not over?http://m.shnenglu.com/dawnbreak/articles/95176.htmlpear_lipear_liThu, 03 Sep 2009 02:43:00 GMThttp://m.shnenglu.com/dawnbreak/articles/95176.htmlhttp://m.shnenglu.com/dawnbreak/comments/95176.htmlhttp://m.shnenglu.com/dawnbreak/articles/95176.html#Feedback0http://m.shnenglu.com/dawnbreak/comments/commentRss/95176.htmlhttp://m.shnenglu.com/dawnbreak/services/trackbacks/95176.html

Map Reduce - the Free Lunch is not over?

by Meng Yan on Nov.15, 2006, under Other

微Y著名的C++大师Herb Sutter?005q初的时候曾l写q一重量的文章:”The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software“Q预aOO之后软g开发将要面临的又一ơ重大变?q行计算?/p>

摩尔定律l制下的软g开发时代有一个非常有意思的现象Q?#8221;Andy giveth, and Bill taketh away.”。不CPU的主频有多快Q我们始l有办法来利用它Q而我们也陉在机器升U带来的E序性能提高中?/p>

我记着我大二的时候曾l做q一个五子棋的程序,当时的算法就是预先设计一些棋型(有优先Q,然后扫描盘Q对形势q行分析Q看看当前走哪部对自己最重要。当然下还要堵别hQ这需要互换双方的型再计。如果只一步,很可能被狡猾的对手欺骗,所以ؓ了多惛_步,q需要递归和回朔。在当时的机器上Q算3步就基本上需?U左右的旉了。后来大学毕业收拾东西的时候找到这个程序,试了一下,发现?0步需要的旉也基本上感觉不出来了?/p>

不知道你是否有同Ll历Q我们不知不觉的一直在享受着q样的免费午。可是,随着摩尔定律的提前终l,免费的午终I要q回厅R虽然硬件设计师q在努力QHyper Threading CPUQ多Z套寄存器Q相当于一个逻辑CPUQ得Pipeline可能满负荷Q多个Thread的操作有可能q行Q得多U程E序的性能?%-15%的提升;增加Cache定w也得包括Single-Thread和Multi-ThreadE序都能受益。也许这些还能帮助你一D|_但问题是Q我们必d出改变,面对q个卛_到来的变革,你准备好了么Q?/p>

Concurrency Programming != Multi-Thread Programming。很多h都会说MultiThreading谁不会,问题是,你是Z么?如何使用多线E的Q我从前做过一个类似AcdSee一L囑փ查看/处理E序Q我通常用它来处理我的数码照片。我在里面用了大量的多线E,不过主要目的是在囑փ处理的时候不要Block住UIQ所以将CPU Intensive的计部分用后台U程q行处理。而ƈ没有把对囑փ矩阵的运ƈ行分开?/p>

我觉得Concurrency Programming真正的挑战在于Programming Model的改变,在程序员的脑子里面要对自qE序怎样q行化有很清楚的认识Q更重要的是Q如何去实现Q包括架构、容错、实时监控等{)q种q行化,如何?strong>调试Q如何去?/p>

在GoogleQ每天有量的数据需要在有限的时间内q行处理Q其实每个互联网公司都会到q样的问题)Q每个程序员都需要进行分布式的程序开发,q其中包括如何分布、调度、监控以及容错等{。Google?a >MapReduce正是把分布式的业务逻辑从这些复杂的l节中抽象出来,使得没有或者很ƈ行开发经验的E序员也能进行ƈ行应用程序的开发?/p>

MapReduce中最重要的两个词是MapQ映)和ReduceQ规U)。初看Map/Reduceq两个词Q熟悉Function Language的h一定感觉很熟悉。FP把这L函数UCؓ”higher order function”Q?#8221;High order function”被成为Function Programming的利器之一哦)Q也是_q些函数是编写来被与其它函数相结合(或者说被其它函数调用的Q。如果说要比的化,可以把它惌成C里面的CallBack函数Q或者STL里面的Functor。比如你要对一个STL的容器进行查找,需要制定每两个元素相比较的FunctorQComparatorQ,q个Comparator在遍历容器的时候就会被调用?/p>

拿前面说q图像处理程序来举例Q其实大多数的图像处理操作都是对囑փ矩阵q行某种q算。这里的q算通常有两U,一U是映射Q一U是规约。拿两种效果来说Q?#8221;老照?#8221;效果通常是强化照片的G/B|然后Ҏ个象素加一些随机的偏移Q这些操作在二维矩阵上的每一个元素都是独立的Q是Map操作。?#8221;雕刻”效果需要提取图像边~,需要元素之间的q算了,是一UReduce操作。再举个单的例子Q一个一l矩阵(数组Q[0,1,2,3,4]可以映射为[0,2,3,6,8]Q乘2Q,也可以映ؓ[1,2,3,4,5]Q加1Q。它可以规约?Q元素求U)也可以规Uؓ10Q元素求和)?/p>

面对复杂问题Q古人教导我们要“?/strong>?strong>?/strong>?#8221;Q英文中对应的词?#8221;Divide and Conquer“。Map/Reduce其实是Divide/Conquer的过E,通过把问题DivideQɘq些Divide后的Mapq算高度q行Q再Map后的l果ReduceQ根据某一个KeyQ,得到最l的l果?/p>

Googler发现q是问题的核心,其它都是共性问题。因此,他们把MapReduce抽象分离出来。这PGoogle的程序员可以只关心应用逻辑Q关心根据哪些Key把问题进行分解,哪些操作是Map操作Q哪些操作是Reduce操作。其它ƈ行计中的复杂问题诸如分布、工作调度、容错、机器间通信都交lMap/Reduce FrameworkdQ很大程度上化了整个~程模型?/p>

MapReduce的另一个特ҎQMap和Reduce?strong>输入和输出都是中间时文?/strong>QMapReduce利用Google文gpȝ来管理和讉Kq些文gQ,而不是不同进E间或者不同机器间的其它通信方式。我觉得Q这是Google一贯的风格Q化JؓQ返璞归真?/p>

接下来就放下其它Q研I一下Map/Reduce操作。(其它比如定w、备份Q务也有很l典的经验和实现Q论文里面都有详qͼ

Map的定义:

Map, written by the user, takes an input pair and produces a set of intermediate key/value pairs. The MapReduce library groups together all intermediate values associated with the same intermediate key I and passes them to the Reduce function.

Reduce的定义:

The Reduce function, also written by the user, accepts an intermediate key I and a set of values for that key. It merges together these values to form a possibly smaller set of values. Typically just zero or one output value is produced per Reduce invocation. The intermediate values are supplied to the user’s reduce function via an iterator. This allows us to handle lists of values that are too large to fit in memory.

MapReduce论文中给Zq样一个例子:在一个文档集合中l计每个单词出现的次数?/p>

Map操作的输入是每一文档,输入文档中每一个单词的出现输出C间文件中厅R?/p>

map(String key, String value):
    // key: document name
    // value: document contents
    for each word w in value:
        EmitIntermediate(w, “1″);

比如我们有两文档,内容分别?/p>

A Q?“I love programming”

B Q?“I am a blogger, you are also a blogger”?/p>

B文档l过Mapq算后输出的中间文g会是:

	I,1
am,1
a,1
blogger,1
you,1
are,1
a,1
blogger,1

Reduce操作的输入是单词和出现次数的序列。用上面的例子来_是 (”I”, [1, 1]), (”love”, [1]), (”programming”, [1]), (”am”, [1]), (”a”, [1,1]) {。然后根据每个单词,出ȝ出现ơ数?/p>

reduce(String key, Iterator values):
    // key: a word
    // values: a list of counts
    int result = 0;
    for each v in values:
        result += ParseInt(v);
    Emit(AsString(result));

最后输出的最l结果就会是Q?”I”, 2″), (”a”, 2″)……

实际的执行顺序是Q?/p>

  1. MapReduce LibraryInput分成M份。这里的Input Splitter也可以是多台机器q行Split?
  2. MasterM份Job分给Idle状态的M个worker来处理;
  3. 对于输入中的每一?lt;key, value> pair q行Map操作Q将中间l果Buffer在Memory里;
  4. 定期的(或者根据内存状态)Q将Buffer中的中间信息Dump?strong>本地盘上,q且把文件信息传回给MasterQMaster需要把q些信息发送给Reduce workerQ。这里最重要的一ҎQ?strong>在写盘的时候,需要将中间文g做PartitionQ比如R个)。拿上面的例子来举例Q如果把所有的信息存到一个文ӞReduce worker又会变成瓉。我们只需要保?strong>相同Key能出现在同一个Partition里面可以把q个问题分解?
  5. R个Reduce worker开始工作,从不同的Map worker的Partition那里拿到数据Q?strong>read the buffered data from the local disks of the map workersQ,用keyq行排序Q如果内存中放不下需要用到外部排?- external sortQ。很昄Q排序(或者说GroupQ是Reduce函数之前必须做的一步?q里面很关键的是Q每个Reduce worker会去从很多Map worker那里拿到X(0<X<R) Partition的中间结果,q样Q所有属于这个Key的信息已l都在这个worker上了?
  6. Reduce worker遍历中间数据Q对每一个唯一KeyQ执行Reduce函数Q参数是q个key以及相对应的一pdValueQ?
  7. 执行完毕后,唤醒用户E序Q返回结果(最后应该有R份OutputQ每个Reduce Worker一个)?

可见Q这里的分(DivideQ体现在两步Q分别是输入分成M份,以及Map的中间结果分成R份。将输入分开通常很简单,Map的中间结果通常?#8221;hash(key) mod R”q个l果作ؓ标准Q保证相同的Key出现在同一个Partition里面。当Ӟ使用者也可以指定自己的Partition FunctionQ比如,对于Url KeyQ如果希望同一个Host的URL出现在同一个PartitionQ可以用”hash(Hostname(urlkey)) mod R”作ؓPartition Function?/p>

对于上面的例子来_每个文档中都可能会出现成千上万的 (”the”, 1)q样的中间结果,琐碎的中间文件必然导致传输上的损失。因此,MapReduceq支持用h供Combiner Function。这个函数通常与Reduce Function有相同的实现Q不同点在于Reduce函数的输出是最l结果,而Combiner函数的输出是Reduce函数的某一个输入的中间文g?/p>

Tom Whitel出了Nutch[2]中另一个很直观的例子,分布式Grep。我一直觉得,Pipe中的很多操作Q比如More、Grep、Cat都类g一UMap操作Q而Sort、Uniq、wc{都相当于某UReduce操作?/p>

加上前两天Google刚刚发布?a >BigTable论文Q现在Google有了自己的集?- Googel ClusterQ分布式文gpȝ - GFSQ分布式计算环境 - MapReduceQ分布式l构化存?- BigTableQ再加上Lock Service。我真的能感觉的到Google著名的免Ҏ之外的对于E序员的另一U免费的晚餐Q那个由大量的commodity PCl成的large clusters。我觉得q些才真正是Google的核心h值所在?/p>

呵呵Q就像微软老兵Joel SpolskyQ你应该看过他的”Joel on Software”吧?Q曾l说q,对于微Y来说最可怕的是[1]Q微软还在苦苦追赶Google来完善Search功能的时候,Google已经在部|下一代的计算Z?/p>

The very fact that Google invented MapReduce, and Microsoft didn’t, says something about why Microsoft is still playing catch up trying to get basic search features to work, while Google has moved on to the next problem: building Skynet^H^H^H^H^H^H the world’s largest massively parallel supercomputer. I don’t think Microsoft completely understands just how far behind they are on that wave.

?Q其实,微Y也有自己的方?- DryAd。问题是Q大公司里,要想重新部vq样一个底层的InfraStructureQ无论是技术的原因Q还是政ȝ原因Q将是如何的难?/p>

?Q?a >Lucene之父Doug Cutting的又一力作QProject Hadoop - 由Hadoop分布式文件系l和一个Map/Reduce的实现组成,Lucene/Nutch的成产线也够齐全的了?/p>



pear_li 2009-09-03 10:43 发表评论
]]>
Ʒþþþþ| 91ƷۺϾþþƷ| 91þþþþۺ| Ʒ԰״̼þþ| ƷۺϾþþþþ888ѿ| VۺVŷþ| Ʒþþþþ| 97þóƷɰ| ھƷþþþþþþ| þ99Ʒþþþþ벥| պľþ| þAVӰ| þþƷĻþ| þĻר| þþþø߳ۺӰԺ| þ޸ۿ| ҹƷþþþþapp| ҹþþӰԺ| þùƷ| ƷþþĻһ| 뾫ƷþþӰ| 99þ777ɫ| ĻþþƷ| 7777þĻ| vĻþ| þùѾƷ| ޹Ʒ˾þ| MM131޹Ůþ| ɫԭһþۺ| þ99ëƬѹۿ| 97þþþ| ھƷ99þ| 뾫Ʒþþþ..| ձձȾþþƷ| 99þþþ| 2021ƷۺϾþ| þþþ뾫Ʒ| ˾þþƷһ | ҹƷþþþþëƬ| ɫۺϾþĻ| þþþƷ2019ѹۿ|