??xml version="1.0" encoding="utf-8" standalone="yes"?>国内精品九九久久久精品,日本精品久久久久中文字幕8,久久九九亚洲精品http://www.shnenglu.com/jack-wang/archive/2010/04/01/111246.htmlThu, 01 Apr 2010 01:47:00 GMThttp://www.shnenglu.com/jack-wang/archive/2010/04/01/111246.htmlhttp://www.shnenglu.com/jack-wang/comments/111246.htmlhttp://www.shnenglu.com/jack-wang/archive/2010/04/01/111246.html#Feedback2http://www.shnenglu.com/jack-wang/comments/commentRss/111246.htmlhttp://www.shnenglu.com/jack-wang/services/trackbacks/111246.html来自startup的垂直搜索引?a title=http://www.kosmix.com/ >http://www.kosmix.com/的开源项目,又一个开源的cMgoogle mapreduce 的分布式文gpȝQ可以应用在诸如囄存储、搜索引擎、网D、数据挖掘这样需要处理大数据量的|络应用中。与hadoop集成得也比较好,q样可以充分利用了hadoop一些现成的功能Q基于C++?/p>
Introduction

Applications that process large volumes of data (such as, search engines, grid computing applications, data mining applications, etc.) require a backend infrastructure for storing data. Such infrastructure is required to support applications whose workload could be characterized as:

  • Primarily write-once/read-many workloads
  • Few millions of large files, where each file is on the order of a few tens of MB to a few tens of GB in size
  • Mostly sequential access

We have developed the Kosmos Distributed File System (KFS), a high performance distributed file system to meet this infrastructure need.

The system consists of 3 components:

  1. Meta-data server: a single meta-data server that provides a global namespace
  2. Block server: Files are split into blocks orchunksand stored on block servers. Blocks are also known as chunk servers. Chunkserver store the chunks as files in the underlying file system (such as, XFS on Linux)
  3. Client library: that provides the file system API to allow applications to interface with KFS. To integrate applications to use KFS, applications will need to be modified and relinked with the KFS client library.

KFS is implemented in C++. It is built using standard system components such as, TCP sockets, aio (for disk I/O), STL, and boost libraries. It has been tested on 64-bit x86 architectures running Linux FC5.

While KFS can be accessed natively from C++ applications, support is also provided for Java applications. JNI glue code is included in the release to allow Java applications to access the KFS client library APIs.

Features
  • Incremental scalability: New chunkserver nodes can be added as storage needs increase; the system automatically adapts to the new nodes.
  • Availability: Replication is used to provide availability due to chunk server failures. Typically, files are replicated 3-way.
  • Per file degree of replication: The degree of replication is configurable on a per file basis, with a max. limit of 64.
  • Re-replication: Whenever the degree of replication for a file drops below the configured amount (such as, due to an extended chunkserver outage), the metaserver forces the block to be re-replicated on the remaining chunk servers. Re-replication is done in the background without overwhelming the system.
  • Re-balancing: Periodically, the meta-server may rebalance the chunks amongst chunkservers. This is done to help with balancing disk space utilization amongst nodes.
  • Data integrity: To handle disk corruptions to data blocks, data blocks are checksummed. Checksum verification is done on each read; whenever there is a checksum mismatch, re-replication is used to recover the corrupted chunk.
  • File writes: The system follows the standard model. When an application creates a file, the filename becomes part of the filesystem namespace. For performance, writes are cached at the KFS client library. Periodically, the cache is flushed and data is pushed out to the chunkservers. Also, applications can force data to be flushed to the chunkservers. In either case, once data is flushed to the server, it is available for reading.
  • Leases: KFS client library uses caching to improve performance. Leases are used to support cache consistency.
  • Chunk versioning: Versioning is used to detect stale chunks.
  • Client side fail-over: The client library is resilient to chunksever failures. During reads, if the client library determines that the chunkserver it is communicating with is unreachable, the client library will fail-over to another chunkserver and continue the read. This fail-over is transparent to the application.
  • Language support: KFS client library can be accessed from C++, Java, and Python.
  • FUSE support on Linux: By mounting KFS via FUSE, this support allows existing linux utilities (such as, ls) to interface with KFS.
  • Tools: A shell binary is included in the set of tools. This allows users to navigate the filesystem tree using utilities such as, cp, ls, mkdir, rmdir, rm, mv. Tools to also monitor the chunk/meta-servers are provided.
  • Deploy scrīpts: To simplify launching KFS servers, a set of scrīpts to (1) install KFS binaries on a set of nodes, (2) start/stop KFS servers on a set of nodes are also provided.
  • Job placement support: The KFS client library exports an API to determine the location of a byte range of a file. Job placement systems built on top of KFS can leverage this API to schedule jobs appropriately.
  • Local read optimization: When applications are run on the same nodes as chunkservers, the KFS client library contains an optimization for reading data locally. That is, if the chunk is stored on the same node as the one on which the application is executing, data is read from the local node.
KFS with Hadoop

KFS has been integrated with Hadoop using Hadoop’s filesystem interfaces. This allows existing Hadoop applications to use KFS seamlessly. The integration code has been submitted as a patch to Hadoop-JIRA-1963 (this will enable distribution of the integration code with Hadoop). In addition, the code as well as instructions will also be available for download from the KFS project page shortly. As part of the integration, there is job placement support for Hadoop. That is, the Hadoop Map/Reduce job placement system can schedule jobs on the nodes where the chunks are stored.

参考资料:

  • distribute file system

http://lucene.apache.org/hadoop/

http://www.danga.com/mogilefs/

http://www.lustre.org/

http://oss.sgi.com/projects/xfs/

 

http://www.megite.com/discover/filesystem

http://swik.net/distributed+cluster

  • cluster&high availability

http://www.gluster.org/index.php

http://www.linux-ha.org/

http://openssi.org

http://kerrighed.org/

http://openmosix.sourceforge.net/

 

http://www.linux.com/article.pl?sid=06/09/12/1459204

http://labs.google.com/papers/mapreduce.html



2010-04-01 09:47 发表评论
]]>
h技术“三宝”之一的Google文gpȝ和Kosmos 文gpȝhttp://www.shnenglu.com/jack-wang/archive/2010/02/26/108503.htmlFri, 26 Feb 2010 09:17:00 GMThttp://www.shnenglu.com/jack-wang/archive/2010/02/26/108503.htmlhttp://www.shnenglu.com/jack-wang/comments/108503.htmlhttp://www.shnenglu.com/jack-wang/archive/2010/02/26/108503.html#Feedback0http://www.shnenglu.com/jack-wang/comments/commentRss/108503.htmlhttp://www.shnenglu.com/jack-wang/services/trackbacks/108503.html转:http://blog.csdn.net/boyplayee/archive/2010/02/22/5318092.aspx

h技?#8220;三宝”之一的Google文gpȝ和Kosmos 文gpȝ 收藏
    虽然针对大规模分布式存储pȝQGoogle推陈出斎ͼ推新的理由有很多Q如"single-master design,…… but it was certainly unacceptable for latency-sensitive applications, such as video serving."。参考《Google File System II: Dawn of the Multiplying Master Nodes》和《GFS:Evolution on Fast-forward》。但是GFS毕竟为其服务?0q时_q李开复博士也宣称每个计算机学生都有必要学学这套系l?/p>

      本篇也一赯谈Kosmos文gpȝQ传闻Google的两个共同创始h佩奇和布林有两个大学同窗Q是两个印度?名叫Anand Rajaraman和Venky HarinarayanQ看到Google获得巨大成功之后Q就动手做了个一个新的搜索引擎CloudStore (原先一直叫Kosmos filesystemQ现在搭上了云计的风车改了头?。在做这个搜索引擎的q程中,他们实现了一个类似GFS的文件系lKFS(很多理念都从GFS那里搬过来,比如constant monitoring, error detection, fault tolerance, and automatic recovery)。因为GFS的论文只是设计,而KFS是开源的Q两者结合看效果可能比较好?/p>

     首先Q看q谷歌工E师写地q篇《The Google File System》的能不能做下面q道证明题:考虑一个拥?000个节点的GFS集群Q定?不定?证明Q在?00个节点失效的情况下,剩下?00个节点仍然能够完成工作,即performance下降的情况下Qscalability,reliability,availability{保持良好?/p>

 

本文想阐释谷歌文件系l的一些设计理c?/p>

一 架构Q?/p>

下图歌文件系l的l构图,一个GFS集群包含一个主服务器和多个块服务器, q是一个单一L务器模型Q?/p>

 

      概括一下块(chunk)的一些信息:块尺寸是64MBQ文件被分割成固定尺寸的块,在每个块创徏的时候,服务器分配给它一个不变的、唯一?4位的块句柄对它进行标识;每个块都会复制到多个块服务器上?/p>

      L务器保存三种主要cd的metadataQ文件和块的命名I间Q文件到块的映射Q以及每个块副本的位|,它通过全局的信息精确定块的位|以及进行复制决定。主服务器的主要工作有:L务器在后台周期扫猫自q整个状态,用来在块服务器间实现块的垃圾攉的功能,用来实现块服务器失效的时复制新副本的功能Q用来实现负载均衡的块移动的功能Q以及用来实现统计硬盘用情늚功能{?/p>

      块服务器保存着块,q根据指定的块句柄和字节区间来读写块数据?/p>

      客户端不通过L务器d数据。反之,客户端向L务器询问它应该联pȝ块服务器。客L短期~存q些信息Q后l的操作直接跟块服务器进行?/p>

      d程:首先Q利用固定的块尺寸,客户端把文g名和E序指定的字节偏U{换成文g的块索引。然后,它把文g名和块烦引发送给L务器。主服务器回{相应的块句柄和副本们的位置。客L用文件名和块索引作ؓ键值缓存这些信息?/p>

      此系l可靠性方面相关的一些设计,下面概要叙述一下,后面会有详细描述Q?/p>

      1L务器不持久化保存块的位置信息。主服务器在自己启动以及块服务器加入集群的时候,询问块服务器它所包含的块的信息,然后定期的心跳信息监控块服务器的状态?/p>

      2 名称I间和文件块映射的metadataQ会用log的方式保存在L务器的硬盘上的操作日志内Qƈ在远E的机器内复制一个副本。用logQ可以更C服务器的状态,而且不用担心服务器崩溃带来的数据不一致的风险?/p>

      3. L务器通过重放operation log恢复其文件系l。operation log是metadata唯一的持久化存储记录QvC定义同步操作序的逻辑旉U的作用。文件和块及其版本都是唯一和持久地׃们创建时的逻辑旉标识的。进行恢复仅需要最新的checkpoint和相应的日志文g。日志增长到一个特定尺寸的时候,L务器汇ȝ状态ؓ一个checkpoint?/p>

4文g命名I间的修改(例如Q文件创建)是原子性的。他们仅受主服务器的控制Q命名空间锁定保证了原子性和正确性;L务器的操作日志定义了q些操作的全局总顺序。在修改操作成功后,部g故障仍可以数据受到破坏。GFS通过master和chunkserver间定期的handshakeQ借助校验和来对数据的破坏。一旦检到Q就从一个有效的副本快重新存储。只有在GFS前Q所有的副本都失效,q个块才会丢失?/p>

5…………….

 

?pȝ交互

q一节讨论客hQ服务器和块服务器三者如何交互以实现数据操作Q原子化的记录追加及快照?/p>

2.1 leases and mutation order

Mutations是一个会改变块内Ҏ(gu)者元数据的操作,例如写入或者记录追加。每个变更执行在块的所有副本上。用leases来保持多个副本间变更序的一致性,leases机制的设计是Z最化L务器的管理负载。由于Master首先grants一个主块(卛_本中的一个块leaseQ,所以全局的mutation orderŞ成了Q首先由L务器选择的lease生成序军_Q然后由lease中主块分配的序列号决定。再用图来说明写入操作的控制程Q?/p>

 

      1客户机向L务器询问哪一个块服务器保存了当前的leaseQ以及其它副本的位置。如果没有一个块服务器有leaseQ主服务器就选择一个副本给它一个leaseQ没有被昄出来Q?/p>

      2L务器回复d的标识符以及其他副本的位|。客hZ后箋的操作缓存这个数据。只有主块不可用Q或者主块回复说它已l不再拥有lease的时候,客户机才需要重新跟L务器联络?/p>

      3客户机把数据推送到所有的副本上。客h可以用Q意的序推送。每个块服务器会把这些数据保存在它的内部LRU~冲内,直到数据被用或者过期。通过把数据流和控制流分离Q我们可以基于网l负载状况对昂贵的数据流q行规划Q以提高性能Q而不用去哪个块服务器是d?/p>

      4所有的副本都被认已经得到数据后,客户机发送写hC块。这个请求标识了早前推送到所有副本的数据。主块ؓ收到的所有操作分配连l的序列Pq些可能来自不同的客h。它依照序列L序把这些操作应用到它自q本地状态中?/p>

      5d把写h传递到所有的二副本。每个二U副本依照主块分配的序列L序应用q些操作?/p>

      6所有二U副本回复主块说明他们已l完成操作?/p>

      7d回复客户机。Q何副本生的错误都会报告l客h。错误的情况下,d和一些二U副本可能成功的写入了数据。(如果d写入p|Q操作就不会被分配序列号Q也不会被传递。)客户端请求被认为失败,已经修改的区域保持不一致的状态。我们的客户Z码通过重复p|的操作来处理q样的错误。在完全从头开始写入之前,可能会先从步?到步?q行几次试?/p>

 2.2 数据?/p>

      数据和控制分开。控制流从客hC块然后再到所有二U副本的同时Q数据顺序推送到一个精心选择的管道Ş式的块服务器链。特点:用IP地址可以计出节点的远q;用在TCPq接上管道化数据传输来最化延迟?/p>

2.3 原子性的记录q加

      GFS提供了一个原子性的d操作Qrecord append。在传统的写操作中,client指定被写数据的偏UM|,向同一个区间的q发的写操作是不q箋的:区间有可能包含来自多个client的数据碎片。在record append中, client只是指定数据。GFS在其选定的偏Ud数据至原子性的加入文g一ơ,q将偏移q回lclient?/p>

在分布式的应用中Q不同机器上的许多client可能会同时向一个文件执行添加操作,d操作被频J用。如果用传统的write操作Q可能需要额外的、复杂的、开销较大的同步,例如通过分布式锁理。在我们的工作量中,q些文g通常以多个生产者单个消费者队列的方式或包含从多个不同 client的综合结果?/p>

      Record append和前面讲的write操作的控制流差不多,只是在primary上多了一些逻辑判断。首先,client数据发送到文g最后一块的所有副本上。然后向primary发送请求。Primary查添加操作是否会D该块过最大的规模Q?4MQ。如果这P它将该块扩充到最大规模,q告诉其它副本做同样的事Q同旉知client该操作需要在下一个块上重新尝试。如果记录满x大规模的要求Qprimary׃数据添加到它的副本上,q告诉其它的副本在同L偏移处写数据Q最后primary向client报告写操作成功。如果在M一个副本上record append操作p|Qclient重新尝试该操作。这时候,同一个块的副本可能包含不同的数据Q因为有的可能复制了全部的数据,有的可能只复制了部分。GFS不能保证所有的副本每个字节都是一L。它只保证每个数据作Z个原子单元被写过臛_一ơ。这个是q样得出的:操作要是成功Q数据必d所有的副本上的同样的偏Ud被写q。进一步,从这以后Q所有的副本臛_和记录一样长Q所以后l的记录被指定到更高的偏移处或者一个不同的块上Q即使另一个副本成了primary。根据一致性保证,成功的record append操作的区间是已定义的。而受到干扰的区间是不一致的?/p>

 2.4快照

      快照操作几乎在瞬间构造一个文件和目录树的副本Q同时将正在q行的其他修Ҏ(gu)作对它的影响减至最?/p>

我们使用copy-on-write技术来实现snapshot。当master受到一个snapshothӞ它首先要撤消要snapshot的文件上块上的lease。这使得M一个向q些块写数据的操作都必须和master交互以找到拥有lease的副本。这qmaster一个创个块的副本的Z?/p>

副本被撤销或终止后Qmaster在磁盘上登记执行的操作,然后复制源文件或目录树的metadata以对它的内存状态实施登记的操作。这个新创徏的snapshot文g和源文gQ其metadataQ指向相同的块(chunkQ?/p>

       Snapshot之后Q客L一ơ向chunk c写的时候,它发一个请求给master以找到拥有lease的副本。Master注意到chunk c的引用记数比1大,它gq对用户的响应,选择一个chunk handle C’,然后要求每一有chunk c的副本的chunkserver创徏一个块C’。每个chunkserver在本地创建chunk C’避免了网l开销。从q以后和对别的块的操作没有什么区别?/p>

 

3.Mast操作

MASTER执行所有名字空间的操作Q除此之外,他还在系l范围管理数据块的复Ӟ军_数据块的攄Ҏ(gu)Q生新数据块ƈ其备䆾Q和其他pȝ范围的操作协同来保数据备䆾的完整性,在所有的数据块服务器之间q负蝲q收回没有用的存储I间?/p>

3.1 名字I间理和加?/p>

      与传l文件系l不同的是,GFS没有与每个目录相关的能列出其所有文件的数据l构Q它也不支持别名Qunix中的连接或W号q接Q,不管是对文g或是目录。GFS的名字空间逻辑上是从文件元数据到\径名映射的一个查用表?/p>

MASTER在执行某个操作前都要获得一pd锁,例如Q它要对/d1/d2…/dn/leaf执行操作Q则它必获?d1Q?d1/d2Q?#8230;Q?/d1/d2/…/dn的读锁,/d1/d2…/dn/leaf的读锁或写锁Q其中leaf可以使文件也可以是目录)。MASTER操作的ƈ行性和数据的一致性就是通过q些锁来实现的?/p>

3.2 备䆾存储攄{略

一个GFS集群文gpȝ可能是多层分布的。一般情况下是成千上万个文g块服务器分布于不同的机架上,而这些文件块服务器又被分布于不同机架上的客户来访问。因此,不同机架上的两台机器之间的通信可能通过一个或多个交换机。数据块冗余配置{略要达到多个目的:最大的数据可靠性和可用性,最大的|络带宽利用率。因此,如果仅仅把数据的拯|于不同的机器上很难满q两个要求,必须在不同的机架上进行数据备份。这样即使整个机架被毁或是掉U,也能保数据的正怋用。这也数据传输Q尤其是L据,可以充分利用带宽Q访问到多个机架Q而写操作Q则不得不涉及到更多的机架?/p>

3.3 产生、重复制、重q数据?/p>

      当MASTER产生新的数据块时Q如何放|新数据块,要考虑如下几个因素Q(1Q尽量放|在盘利用率低的数据块服务器上Q这P慢慢地各服务器的盘利用率就会达到^衡。(2Q尽量控制在一个服务器上的“新创?#8221;的次数。(3Q由于上一节讨论的原因,我们需要把数据块放|于不同的机架上?/p>

      MASTER在可用的数据块备份低于用戯定的数目旉要进行重复制。这U情冉|于多U原因:服务器不可用Q数据被破坏Q磁盘被破坏Q或者备份数目被修改。每个被需要重复制的数据块的优先Ҏ(gu)以下几项定Q第一是现在的数目距目标的距离Q对于能d用户E序的数据块Q我们也提高它的优先U。最后, MASTER按照产生数据块的原则复制数据块,q把它们攑ֈ不同的机架内的服务器上?/p>

       MASTER周期性的q各服务器上的负蝲Q它查chunk分布和负载^衡,通过q种方式来填充一个新的服务器而不是把其他的内容统l放|到它上面带来大量的写数据。数据块攄的原则与上面讨论的相同,此外QMASTERq决定哪些数据块要被U除Q原则上它会清除那些I闲I间低于q_值的那些服务器?/p>

3.4 垃圾攉

      在一个文件被删除之后QGFSq不立即收回盘I间Q而是{到垃圾攉E序在文件和数据块的的查中收回?/p>

当一个文件被应用E序删除之后QMASTER会立卌录下q些变化Q但文g所占用的资源却不会被立x回,而是重新l文件命了一个隐藏的名字Qƈ附上了删除的旉戟뀂在MASTER定期查名字空间时Q它删除过三天Q可以设定)的隐藏的文g。在此之前,可以以一个新的名字来LӞq可以以前的名字恢复。当隐藏的文件在名字I间中被删除以后Q它在内存中的元数据卌擦除Q这有效地切断了他和所有数据块的联pR?/p>

在一个相似的定期的名字空间检查中QMASTER认孤儿数据块(不属于Q何文Ӟq擦除它的元数据Q在和MASTER的心跳信息交换中Q每个服务器报告他所拥有的数据块QMASTERq回元数据不在内存的数据块,服务器即可以删除q些数据块?/p>

3.5 q时数据的探?/p>

      在数据更新时如果服务器停ZQ那么他所保存的数据备份就会过时。对每个数据块,MASTER讄了一个版本号来区别更新过的数据块和过时的数据块?/p>

      当MASTER授权一个新的leaseӞ他会增加数据块的版本号ƈ会通知更新数据备䆾。MASTER和备份都会记录下当前的版本号Q如果一个备份当时不可用Q那么他的版本号不可能提高,当ChunkServer重新启动q向MASTER报告他的数据块集ӞMASTER׃发现q时的数据?/p>

      MASTER在定期的垃圾攉E序中清除过时的备䆾Q在此以前,处于效率考虑Q在各客户及英大使,他会认ؓҎ(gu)不存在过时的数据。作为另一个安全措施, MASTER在给客户及关于数据块的应{或是另外一个读取数据的服务器数据是都会带上版本信息Q在操作前客h和服务器会验证版本信息以保得到的是最新的数据?/p>

 

4、容错和诊断

4.1 高可靠?

4.1.1 快速恢?

不管如何l止服务QMASTER和数据块服务器都会在几秒钟内恢复状态和q行。实际上Q我们不Ҏ(gu)常终止和不正常终止进行区分,服务器进E都会被切断而终止。客h和其他的服务器会l历一个小的中断Q然后它们的特定h时Q重新连接重启的服务器,重新h?

4.1.2 数据块备?

如上文所讨论的,每个数据块都会被备䆾到放C同机架上的不同服务器上。对不同的名字空_用户可以讄不同的备份别。在数据块服务器掉线或是数据被破坏时QMASTER会按照需要来复制数据块?

4.1.3 MASTER备䆾

为确保可靠性,MASTER的状态、操作记录和查点都在多台机器上进行了备䆾。一个操作只有在数据块服务器盘上刷新ƈ被记录在MASTER和其备䆾的上之后才算是成功的。如果MASTER或是盘p|Q系l监视器会发现ƈ通过改变域名启动它的一个备份机Q而客h则仅仅是使用规范的名U来讉KQƈ不会发现MASTER的改变?

4.2 数据完整?

每个数据块服务器都利用校验和来检验存储数据的完整性。原因:每个服务器随旉有发生崩溃的可能性,q且在两个服务器间比较数据块也是不现实的Q同Ӟ在两台服务器间拷贝数据ƈ不能保证数据的一致性?

每个Chunk?4kB的大分成块Q每个块?2位的校验和,校验和和日志存储在一P和用h据分开?

在读数据Ӟ服务器首先检查与被读内容相关部分的校验和Q因此,服务器不会传播错误的数据。如果所查的内容和校验和不符Q服务器׃l数据请求者返回一个错误的信息Qƈ把这个情冉|告给MASTER。客h׃d他的服务器来获取数据Q而MASTER则会从其他的拯来复制数据,{到一个新的拷贝完成时QMASTER׃通知报告错误的服务器删除出错的数据块?

附加写数据时的校验和计算优化了,因ؓq是主要的写操作。我们只是更新增加部分的校验和,即末尾部分的校验和数据已被损坏而我们没有检查出来,新的校验和与数据会不相符Q这U冲H在下次使用时将会被查出来?

相反Q如果是覆盖现有数据的写Q在写以前,我们必须查第一和最后一个数据块Q然后才能执行写操作Q最后计和记录校验和。如果我们在覆盖以前不先查首位数据块Q计出的校验和则会因ؓ没被覆盖的数据而生错误?

在空闲时_服务器会查不z跃的数据块的校验和Q这样可以检查出不经常读的数据的错误。一旦错误被查出来,服务器会拯一个正的数据块来代替错误的?

4.3 诊断工具

q泛而细致的诊断日志以微的代h(hun)换取了在问题隔离、诊断、性能分析斚w起到了重大的作用。GFS服务器用日志来记录显著的事gQ例如服务器停机和启动)和远E的应答。远E日志记录机器之间的h和应{,通过攉不同机器上的日志记录Qƈ对它们进行分析恢复,我们可以完整地重现活动的场景Qƈ用此来进行错误分析?/p>

 

 

以下是Kosmos filesystem的一些特性:

自动存储扩充Q添加新的chunckserver,pȝ自动感知Q?/p>

有效性(复制机制保证文g有效性,一般文件会被以三种方式存储Q当其中一个chunkserver出现错误的时候,不会影响         数据的读取)

文g复制_度Q可以配|文件复制的_度Q最大可以被复制64?/p>

q原复制Q当其中一个Chunckserver出现故障的时候,Metaserver会强制用其他的chunckserver

负蝲qQ系l周期地查chunkservers的磁盘利用,q新^衡chunkservers的磁盘利用,HDFS现在q没有支持)

数据完整性(当要d数据时检查数据的完整性,如果验出错用另外的备䆾覆盖当前的数据)

文g写入Q当一个应用程序创Z一个文Ӟq个文g名会被立d入文件系l,但ؓ了性能Q写入的数据会被~存在kfs客户?q且周期性的从缓存中把数据更新到chunkserver中。当Ӟ应用E序也可以强制把数据更新到服务器上。一旦数据被更新到服务器Q就可以被有效的d了?/p>

契约Q用契U来保证Client~存的数据和文gpȝ中的文g保持一致性)

支持FUSEQ在linuxpȝ下,可以通过Fuse 映射一个文件夹Q从而可以很方便的读取kfs的文Ӟ

支持C++,Java,Python方式的调?/p>

提供了丰富的工具E序Q如kfsshell,cp2kfs{?/p>

提供了启动和停止服务的脚?/p>

 

 

 

 

本文来自CSDN博客Q{载请标明出处Q?a >http://blog.csdn.net/boyplayee/archive/2010/02/22/5318092.aspx



2010-02-26 17:17 发表评论
]]>
分布式文件系lMFS(moosefs)实现存储׃nhttp://www.shnenglu.com/jack-wang/archive/2010/02/08/107471.htmlMon, 08 Feb 2010 01:11:00 GMThttp://www.shnenglu.com/jack-wang/archive/2010/02/08/107471.htmlhttp://www.shnenglu.com/jack-wang/comments/107471.htmlhttp://www.shnenglu.com/jack-wang/archive/2010/02/08/107471.html#Feedback0http://www.shnenglu.com/jack-wang/comments/commentRss/107471.htmlhttp://www.shnenglu.com/jack-wang/services/trackbacks/107471.html分布式文件系lMFS(moosefs)实现存储׃n
作?田?sery@163.com) from: [url]http://net.it168.com/a2009/0403/270/000000270867.shtml[/url]
 
׃用户数量的不断攀?我对讉K量大的应用实C可扩展、高可靠的集部|Ԍ即lvs+keepalived的方式)Q但仍然有用户反馈访问慢的问题。通过排查个服务器的情况,发现问题的根源在于共享存储服务器NFS。在我这个网l环境里QN个服务器通过nfs方式׃n一个服务器的存储空_使得NFS服务器不堪重负。察看系l日志,全是nfs服务时之类的报错。一般情况下Q当nfs客户端数目较?yu)的时候,NFS性能不会出现问题Q一旦NFS服务器数目过多,q且是那U读写都比较频繁的操作,所得到的结果就不是我们所期待的。下面是某个集群使用nfs׃n的示意图Q?img onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" + this.src)' border=0 alt="" src="http://img1.51cto.com/attachment/200904/200904091239248490014.jpg">
q种架构除了性能问题而外Q还存在单点故障Q一旦这个NFS服务器发生故障,所有靠׃n提供数据的应用就不再可用Q尽用rsync方式同步数据到另外一个服务器上做nfs服务的备份,但这Ҏ(gu)高整个系l的性能毫无帮助。基于这样一U需求,我们需要对nfs服务器进行优化或采取别的解决Ҏ(gu)Q然而优化ƈ不能对应Ҏ(gu)益增多的客户端的性能要求Q因此唯一的选择只能是采取别的解x案了Q通过调研Q分布式文gpȝ是一个比较合适的选择。采用分布式文gpȝ后,服务器之间的数据讉K不再是一对多的关p(1个NFS服务器,多个NFS客户端)Q而是多对多的关系Q这样一来,性能大幅提升毫无问题?/div>
 
到目前ؓ止,有数十种以上的分布式文gpȝ解决Ҏ(gu)可供选择Q如lustre,hadoop,Pnfs{等。我试了PVFS,hadoop,moosefsq三U应用,参看了lustre、KFS{诸多技术实施方法,最后我选择了moosefsQ以下简UMFSQ这U分布式文gpȝ来作为我的共享存储服务器。ؓ什么要选它呢?我来说说我的一些看法:
1?nbsp; 实施h单。MFS的安装、部|Ӏ配|相对于其他几种工具来说Q要单和Ҏ(gu)得多。看看lustre 700多页的pdf文档Q让人头昏吧?/div>
2?nbsp; 不停服务扩容。MFS框架做好后,随时增加服务器扩充容量;扩充和减容量皆不会影响现有的服务。注Qhadoop也实Cq个功能?/div>
3?nbsp; 恢复服务Ҏ(gu)。除了MFS本n具备高可用特性外Q手动恢复服务也是非常快LQ原因参照第1条?/div>
4?nbsp; 我在实验q程中得C者的帮助Q这让我很是感激?/div>
MFS文gpȝ的组?/div>
1?nbsp;元数据服务器。在整个体系中负责管理管理文件系l,目前MFS只支持一个元数据服务器masterQ这是一个单Ҏ(gu)障,需要一个性能E_的服务器来充当。希望今后MFS能支持多个master服务器,q一步提高系l的可靠性?/div>
2?nbsp;数据存储服务器chunkserver。真正存储用h据的服务器。存储文件时Q首先把文g分成块,然后q些块在数据服务器chunkserver之间复制Q复制䆾数可以手工指定,讄副本Cؓ3Q。数据服务器可以是多个,q且数量多Q可使用?#8220;盘I间”大Q可靠性也高?/div>
3?nbsp;客户端。用MFS文gpȝ来存储和讉K的主机称为MFS的客LQ成功挂接MFS文gpȝ以后Q就可以像以前用NFS一样共享这个虚拟性的存储了?/div>
 
元数据服务器安装和配|?/div>
元数据服务器可以是linux,也可以是unix,你可以根据自q使用习惯选择操作pȝ,在我的环境里,我是用freebsd做ؓMFS元数据的q行q_。GNU源码Q在各种cunixq_的安装都基本一致?/div>
 
Q一Q?nbsp;  安装元数据服?/div>
2、解?tar zxvf mfs-1.5.12.tar.gz
3、切换目?cd mfs-1.5.12
4、创建用?useradd mfs –s /sbin/nologin 
5、配|?./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
6、编译安?make ; make install
 
Q二Q?nbsp;  配置元数据服?/div>
元数据服务器的配|文件是mfsmaster.cfg,我在安装MFS时指定了前缀Q因此这个文件的位置?usr/local/mfs/etc/mfsmaster.cfg.我们打开q个配置文gQ看看都有哪些内容:
管每行都被注释掉了Q但它们却是配置文g的默认|要改变这些|需要取消注释,然后明确指定其取倹{接下来说明一下其中一些项目的含义?/div>
?nbsp;    LOCK_FILE = /var/run/mfs/mfsmaster.pid 文g锁所在的位置Q它的功能是避免启动多次启动同一个守护进E。由于系l中本来不存在目?/var/run/mfsQ因此需要手动创?mkdir /var/run/mfsQ然后更改其属主 chown –R mfs:mfs /var/run/mfs q样MFS 服务p对这个目录有创徏/写入 mfsmaster.pid 文g的权限了?/div>
?nbsp;    DATA_PATH = /usr/local/mfs/var/mfs 数据存放路径Q只元数据的存放路径。那么这些数据都包括哪些呢?q目录看看,大致?U类型的文gQ?/div>
q些文g也同栯存储在其他数据存储服务器的相关目录?/div>
?nbsp;    MATOCS_LISTEN_PORT = 9420 MATOCS--master to chunkserverQ即元数据服务器使用9420q个监听端口来接受数据存储服务器chunkserver端的q接?/div>
?nbsp;    MATOCU_LISTEN_PORT = 9421 元数据服务器?421端口监听Q用以接受客L对MFSq行q程挂接Q客L以mfsmount挂接MFSQ?/div>
?nbsp;    其他部分看字面意思都不难理解。还有几个与旉有关的数|其单位是U?/div>
q个配置文gQ不必做修改p工作了?/div>
 
Q一Q?nbsp;  元数据服务器master启动
元数据服务器可以单独启动Q即使没有Q何数据存储服务器QchunkserverQ也是能正常工作的,因此当我们安装配|完MFS后,卛_启动它。执行命?/usr/local/mfs/sbin/mfsmaster start Q如果没有意外,元数据库服务器就应该作ؓ一个守护进E运行v来。现在我们可以通过3个方面来查一下MFS master的运行状况:
Q四Q、关闭元数据服务?/div>
关闭元数据服务器Q务必?/usr/local/mfs/sbin/mfsmaster –s q种方式Q如果直接用kill杀死进E,导致下ơ启动时出现找不到相xӞ而不能正常启动服务器。这个一定要谨慎。当Ӟ如果发生了这个事情,q是可以通过 mfsmetastore 来恢复的?/div>
 
数据存储chunkserver服务器的安装配置
数据存储服务器chunkserver也是可以q行在各U类unixq_的,因此不再多说。一个MFS环境到底能集多服务器Q作者的说法是上PB定wQ个人徏议,最?C上;q且专门用来做存储,不要把它跟master搞到一个机器(理论上没问题Q实C是可以的Q但q不是一个好{略Q。因为每个数据存储服务器的安装和配置都是相同的,所以只需按照一个服务器的操作就可以了?/div>
 
Q一Q、安装数据存储服务器 chunkserver
2、解?tar zxvf mfs-1.5.12.tar.gz
3、切换目?cd mfs-1.5.12
4、创建用?useradd mfs –s /sbin/nologin 
5、配|?./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
6、编译安?make ; make install
 
Q二Q配|数据存储服务器chunkserver
数据存储服务器有2个配|服务器需要修改,一个是主配|文?mfschunkserver.cfg ,另一个配|文件是 mfshdd.cfg。每个服务器用来分配l?MFS使用的空间最好是一个单独的盘或者一个raidP最低要求是一个分区。作者D的例子是创徏一个大文gQ然后挂接在本地Q这不好Q只能用来做实验了?/div>

1、修攚w|文?/usr/local/mfs/etc/mfschunkserver.cfg。下面是修改了的配置文gQ?

 
 
q个配置文g里,没有注释W号“#”是被修改过的项了,接下来是里面某些的含义说明Q?/div>
?nbsp;    MASTER_HOST = 192.168.0.19 元数据服务器的名U或地址Q可以是L名,也可以是ip地址Q只要数据存储服务器能访问到元数据服务器p?/div>
?nbsp;    LOCK_FILE = /var/run/mfs/mfschunkserver.pid 与元数据服务器master的处理完全相?
?nbsp;    CSSERV_LISTEN_PORT = 9422 CSSERV—chunkserver,q个监听端口用于与其它数据存储服务器间的q接Q通常是数据复制?/div>
?nbsp;    HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg 分配lMFS使用的磁盘空间配|文件的位置?/div>
2、修攚w|文?usr/local/mfs/etc/mfshdd.cfg。在我的服务器上Q只有一?T的SATA盘Q分了一?st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="800" UnitName="g">800G定w的分区来做ؓMFS存储服务的组成部分。ؓ了mfs拥有写目录的权限Q需要修改目录的属主。我的服务器的分区挂接点?/data , ?chown –R mfs:mfs /data 把属L变。因为我的每个服务器只需贡献一个分区做为MFS,因此配置文g只需要如下一行内容就可以了:
Q四Q?nbsp;  关闭数据存储服务?/div>
跟元数据服务器master怼Q执行命?/usr/local/mfs/sbin/mfschunkserver –s , chunkserver服务停下来了。ؓ了ɾpȝ重启q程能自动启动chunkserver 服务Q可以通过?etc/rc.local文gq加? /usr/local/mfs/sbin/mfschunkserver start 来达到这个目的(master的自动重启处理也可同样处理)?/div>

 

本文 “sery” 博客Q请务必保留此出?a >http://sery.blog.51cto.com/10037/147756



2010-02-08 09:11 发表评论
]]>用Hadoopq行分布式ƈ行编E?/title><link>http://www.shnenglu.com/jack-wang/archive/2010/01/28/106616.html</link><dc:creator>王</dc:creator><author>王</author><pubDate>Thu, 28 Jan 2010 05:50:00 GMT</pubDate><guid>http://www.shnenglu.com/jack-wang/archive/2010/01/28/106616.html</guid><wfw:comment>http://www.shnenglu.com/jack-wang/comments/106616.html</wfw:comment><comments>http://www.shnenglu.com/jack-wang/archive/2010/01/28/106616.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/jack-wang/comments/commentRss/106616.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/jack-wang/services/trackbacks/106616.html</trackback:ping><description><![CDATA[原帖Q?a >http://www.cnblogs.com/phinecos/</a><br><br>Hadoop <span>是一个实C</span><span> MapReduce </span><span>计算模型的开源分布式q行~程框架Q借助?/span><span> Hadoop, </span><span>E序员可以轻村֜~写分布式ƈ行程序,其q行于计机集群上,完成量数据的计。本文将介绍</span><span> MapReduce </span><span>计算模型Q分布式q行计算{基本概念,以及</span><span> Hadoop </span><span>的安装部|和基本q行Ҏ(gu)?/span><span> </span> <p align=left><a name=N10059><strong><span>Hadoop </span></strong></a><strong><span>?/span></strong><strong> </strong></p> <p align=left><span>Hadoop </span><span>是一个开源的可运行于大规模集上的分布式q行~程框架Q由于分布式存储对于分布式编E来说是必不可少的,q个框架中还包含了一个分布式文gpȝ</span><span> HDFS( Hadoop Distributed File System )</span><span>。也许到目前为止Q?/span><span>Hadoop </span><span>q不是那么广Zh知,其最新的版本号也仅仅?/span><span> 0.16</span><span>Q距?/span><span> 1.0 </span><span>g都还有很长的一D距,但提?/span><span> Hadoop </span><span>一脉相承的另外两个开源项?/span><span> Nutch </span><span>?/span><span> Lucene ( </span><span>三者的创始人都?/span><span> Doug Cutting ),</span><span>那绝Ҏ(gu)大名鼎鼎?/span><span>Lucene </span><span>是一个用</span><span> Java </span><span>开发的开源高性能全文索工具包Q它不是一个完整的应用E序Q而是一套简单易用的</span><span> API </span><span>。在全世界范围内Q已有无数的软gpȝQ?/span><span>Web </span><span>|站Z</span><span> Lucene </span><span>实现了全文检索功能,后来</span><span> Doug Cutting </span><span>又开创了W一个开源的</span><span> Web </span><span>搜烦引擎</span><span>(<a >http://www.nutch.org/</a>) Nutch, </span><span>它在</span><span> Lucene </span><span>的基上增加了|络爬虫和一些和</span><span> Web </span><span>相关的功能,一些解析各cL档格式的插g{,此外Q?/span><span>Nutch </span><span>中还包含了一个分布式文gpȝ用于存储数据。从</span><span> Nutch 0.8.0 </span><span>版本之后Q?/span><span>Doug Cutting </span><span>?/span><span> Nutch </span><span>中的分布式文件系l以及实?/span><span> MapReduce </span><span>法的代码独立出来Ş成了一个新的开源项</span><span> Hadoop</span><span>?/span><span>Nutch </span><span>也演化ؓZ</span><span> Lucene </span><span>全文索以?/span><span> Hadoop </span><span>分布式计^台的一个开源搜索引擎?/span></p> <p align=left><span>Z</span><span> Hadoop,</span><span>你可以轻村֜~写可处理v量数据的分布式ƈ行程序,q将其运行于由成百上千个l点l成的大规模计算机集上。从目前的情冉|</span> <span>看,</span><span>Hadoop </span><span>注定会有一个辉煌的未来Q?/span><span>"</span><span>云计?/span><span>"</span><span>是目前灸手可热的技术名词,全球各大</span><span> IT </span><span>公司都在投资和推q这U新一代的计算模式Q?/span><span> Hadoop </span><span>又被其中几家主要的公司用作其</span><span>"</span><span>云计?/span><span>"</span><span>环境中的重要基础软gQ如</span><span>:</span><span>雅虎正在借助</span><span> Hadoop </span><span>开源^台的力量Ҏ(gu)</span><span> Google, </span><span>除了资助</span><span> Hadoop </span><span>开发团队外Q还在开发基?/span><span> Hadoop </span><span>的开源项?/span><span> Pig, </span><span>q是一个专注于量数据集分析的分布式计程序?/span><span>Amazon </span><span>公司Z</span><span> Hadoop </span><span>推出?/span><span> Amazon S3 ( Amazon Simple Storage Service )</span><span>Q提供可靠,快速,可扩展的|络存储服务Q以及一个商用的云计^?/span><span> Amazon EC2 ( Amazon Elastic Compute Cloud )</span><span>。在</span><span> IBM </span><span>公司的云计算目</span><span>--"</span><span>蓝云计划</span><span>"</span><span>中,</span><span>Hadoop </span><span>也是其中重要的基软g?/span><span>Google </span><span>正在?/span><span>IBM</span><span>合作Q共同推q基?/span><span> Hadoop </span><span>的云计算?/span><span> </span></p> <p align=left><a name=N1006D><strong><span>q接~程方式的变?/span></strong></a> </p> <p align=left><span>在摩定律的作用下,以前E序员根本不用考虑计算机的性能会跟不上软g的发展,因ؓU每?/span><span> 18 </span><span>个月Q?/span><span>CPU </span><span>的主频就会增加一倍,性能也将提升一倍,软gҎ(gu)不用做Q何改变,可以n受免费的性能提升。然而,׃晶体电路已l逐渐接近其物理上的性能极限Q摩?/span> <span>定律?/span><span> 2005 </span><span>q左叛_始失效了Qhcd也不能期待单?/span><span> CPU </span><span>的速度每隔</span><span> 18 </span><span>个月q一倍,为我们提供越来越快的计算性能?/span><span>Intel, AMD, IBM </span><span>{芯片厂商开始从多核q个角度来挖?/span><span> CPU </span><span>的性能潜力Q多核时代以及互联网时代的到来,软g~程方式发生重大变革Q基于多核的多线Eƈ发编E以及基于大规模计算机集的分布式ƈ行编E是来?/span> <span>件性能提升的主要途径?/span><span> </span></p> <p align=left><span>许多U编E方式的重大变化带来一ơY件的q发危机Q因为我们传l的软g方式基本上是单指令单数据的序执行Q这U顺序执行十分符合hcȝ思?/span> <span>习惯Q却与ƈ发ƈ行编E格g入。基于集的分布式ƈ行编E能够让软g与数据同时运行在q成一个网l的许多台计机?/span><span>,</span><span>q里的每一台计机均可以是一台普</span> <span>通的</span><span> PC </span><span>机。这L分布式ƈ行环境的最大优Ҏ(gu)可以很容易的通过增加计算机来扩充新的计算l点Qƈ由此获得不可思议的v量计能?/span><span>, </span><span>同时又具有相当强的容错能力,一批计结点失效也不会影响计算的正常进行以及结果的正确性?/span><span>Google </span><span>是q么做的Q他们用了叫做</span><span> MapReduce </span><span>的ƈ行编E模型进行分布式q行~程Q运行在叫做</span><span> GFS ( Google File System )</span><span>的分布式文gpȝ上,为全球亿万用h供搜索服务?/span><span> </span></p> <p align=left><span>Hadoop </span><span>实现?/span><span> Google </span><span>?/span><span> MapReduce </span><span>~程模型Q提供了单易用的~程接口Q也提供了它自己的分布式文gpȝ</span><span> HDFS,</span><span>?/span><span> Google </span><span>不同的是Q?/span><span>Hadoop </span><span>是开源的QQ何h都可以用这个框架来q行q行~程。如果说分布式ƈ行编E的隑ֺ以让普通程序员望而生畏的话,开源的</span><span> Hadoop </span><span>的出现极大的降低了它的门槛,d本文Q你会发现基?/span><span> Hadoop </span><span>~程非常单,无须Mq行开发经验,你也可以L的开发出分布式的q行E序Qƈ让其令h难以|信地同时运行在数百台机器上Q然后在短时间内完成量数据</span> <span>的计。你可能会觉得你不可能会拥有数百台机器来q行你的q行E序Q而事实上Q随着</span><span>"</span><span>云计?/span><span>"</span><span>的普及,M人都可以L获得q样的v量计能力?/span> <span>例如现在</span><span> Amazon </span><span>公司的云计算q_</span><span> Amazon EC2 </span><span>已经提供了这U按需计算的租用服务,有兴的读者可以去了解一下,q篇pd文章的第三部分将有所介绍?/span><span> </span></p> <p align=left><span>掌握一点分布式q行~程的知识对来的程序员是必不可的Q?/span><span>Hadoop </span><span>是如此的便好用,何不试一下呢Q也怽已经急不可耐的惌一下基?/span><span> Hadoop </span><span>的编E是怎么回事了,但毕竟这U编E模型与传统的顺序程序大不相同,掌握一点基知识才能更好地理解基?/span><span> Hadoop </span><span>的分布式q行E序是如何编写和q行的。因此本文会先介l一?/span><span> MapReduce </span><span>的计模型,</span><span>Hadoop </span><span>中的分布式文件系l?/span><span> HDFS, Hadoop </span><span>是如何实现ƈ行计的Q然后才介绍如何安装和部|?/span><span> Hadoop </span><span>框架Q以及如何运?/span><span> Hadoop </span><span>E序?/span><span> </span></p> <p align=left><a name=N10083><strong><span>MapReduce </span></strong></a><strong><span>计算模型</span></strong> </p> <p align=left><span>MapReduce </span><span>?/span><span> Google </span><span>公司的核心计模型,它将复杂的运行于大规模集上的ƈ行计过E高度的抽象C两个函数Q?/span><span>Map </span><span>?/span><span> Reduce, </span><span>q是一个o人惊讶的单却又威力巨大的模型。适合?/span><span> MapReduce </span><span>来处理的数据?/span><span>(</span><span>或Q?/span><span>)</span><span>有一个基本要?/span><span>: </span><span>待处理的数据集可以分解成许多的数据集,而且每一个小数据集都可以完全q行地进行处理?/span><span> </span><span><br></span><a name=fig1><strong><span>?/span><span> 1. MapReduce </span><span>计算程</span></strong></a><span><br><br></span></p> <p><img alt="" src="http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop1/figure1.jpg"> </p> <p align=left><span>图一说明了用</span><span> MapReduce </span><span>来处理大数据集的q程</span><span>, </span><span>q个</span><span> MapReduce </span><span>的计过E简而言之,是大数据集分解ؓ成百上千的小数据集,每个</span><span>(</span><span>或若q个</span><span>)</span><span>数据集分别由集群中的一个结?/span><span>(</span><span>一般就是一台普通的计算?/span><span>)</span><span>q行处理q生</span> <span>成中间结果,然后q些中间l果又由大量的结点进行合q?/span><span>, </span><span>形成最l结果?/span><span> </span></p> <p align=left><span>计算模型的核心是</span><span> Map </span><span>?/span><span> Reduce </span><span>两个函数Q这两个函数q戯责实玎ͼ功能是按一定的映射规则输入的</span><span> <key, value> </span><span>对{换成另一个或一?/span><span> <key, value> </span><span>对输出?/span><span> <br></span><strong><span>表一</span></strong><strong><span> Map </span></strong><strong><span>?/span></strong><strong><span> Reduce </span></strong><strong><span>函数</span></strong></p> <p> <table border=0 cellSpacing=0 cellPadding=0 width="100%"> <tbody> <tr> <td> <p align=center><strong><span>函数</span></strong><strong></strong></p> </td> <td> <p align=center><strong><span>输入</span></strong><strong></strong></p> </td> <td> <p align=center><strong><span>输出</span></strong><strong></strong></p> </td> <td> <p align=center><strong><span>说明</span></strong><strong></strong></p> </td> </tr> <tr> <td> <p align=center><strong><span>Map</span></strong></p> </td> <td> <p align=left><span><k1, v1></span></p> </td> <td> <p align=left><span>List(<k2,v2>)</span></p> </td> <td> <p align=left><span>1. </span><span>小数据集进一步解析成一?/span><span> <key,value> </span><span>对,输入</span><span> Map </span><span>函数中进行处理?/span><span><br>2. </span><span>每一个输入的</span><span> <k1,v1> </span><span>会输Z?/span><span> <k2,v2></span><span>?/span><span> <k2,v2> </span><span>是计的中间l果?/span> </p> </td> </tr> <tr> <td> <p align=center><strong><span>Reduce</span></strong></p> </td> <td> <p align=left><span><k2,List(v2)></span></p> </td> <td> <p align=left><span><k3,v3></span></p> </td> <td> <p align=left><span>输入的中间结?/span><span> <k2,List(v2)> </span><span>中的</span><span> List(v2) </span><span>表示是一批属于同一?/span><span> k2 </span><span>?/span><span> value</span></p> </td> </tr> </tbody> </table> </p> <p align=left><span>以一个计文本文件中每个单词出现的次数的E序ZQ?/span><span><k1,v1> </span><span>可以?/span><span> <</span><span>行在文g中的偏移位置</span><span>, </span><span>文g中的一?/span><span>></span><span>Q经</span><span> Map </span><span>函数映射之后QŞ成一批中间结?/span><span> <</span><span>单词Q出现次?/span><span>>, </span><span>?/span><span> Reduce </span><span>函数则可以对中间l果q行处理Q将相同单词的出现次数进行篏加,得到每个单词的ȝ出现ơ数?/span><span> </span></p> <p align=left><span>Z</span><span> MapReduce </span><span>计算模型~写分布式ƈ行程序非常简单,E序员的主要~码工作是实现</span><span> Map </span><span>?/span><span> Reduce </span><span>函数Q其它的q行~程中的U种复杂问题Q如分布式存储,工作调度Q负载^衡,定w处理Q网l通信{,均由</span><span> MapReduce </span><span>框架</span><span>(</span><span>比如</span><span> Hadoop )</span><span>负责处理Q程序员完全不用操心?/span><span> </span></p> <p align=left><a name=N100F0><strong><span>?/span></strong></a><strong> </strong><strong><span>集群上的q行计算</span></strong> </p> <p align=left><span>MapReduce </span><span>计算模型非常适合在大量计机l成的大规模集群上ƈ行运行。图一中的每一?/span><span> Map </span><span>d和每一?/span><span> Reduce </span><span>d均可以同时运行于一个单独的计算l点上,可想而知其运效率是很高的,那么q样的ƈ行计是如何做到的呢Q?/span><span> </span></p> <p align=left><strong><span>数据分布存储</span></strong><strong></strong></p> <p align=left><span>Hadoop </span><span>中的分布式文件系l?/span><span> HDFS </span><span>׃个管理结?/span><span> ( NameNode )</span><span>?/span><span>N</span><span>个数据结?/span><span> ( DataNode )</span><span>l成Q每个结点均是一台普通的计算机。在使用上同我们熟?zhn)的单Z的文件系l非常类|一样可以徏目录Q创建,复制Q删除文Ӟ查看文g内容{。但其底</span> <span>层实C是把文g切割?/span><span> Block</span><span>Q然后这?/span><span> Block </span><span>分散地存储于不同?/span><span> DataNode </span><span>上,每个</span><span> Block </span><span>q可以复制数份存储于不同?/span><span> DataNode </span><span>上,辑ֈ定w容灾之目的?/span><span>NameNode </span><span>则是整个</span><span> HDFS </span><span>的核心,它通过l护一些数据结构,记录了每一个文件被切割成了多少?/span><span> Block</span><span>Q这?/span><span> Block </span><span>可以从哪?/span><span> DataNode </span><span>中获得,各个</span><span> DataNode </span><span>的状态等重要信息。如果你想了解更多的关于</span><span> HDFS </span><span>的信息,可进一步阅d考资料:</span><span><a > The Hadoop Distributed File System:Architecture and Design</a> </span></p> <p align=left><strong><span>分布式ƈ行计?/span></strong><strong></strong></p> <p align=left><span>Hadoop </span><span>中有一个作Z控的</span><span> JobTracker</span><span>Q用于调度和理其它?/span><span> TaskTracker, JobTracker </span><span>可以q行于集中M台计机上?/span><span>TaskTracker </span><span>负责执行dQ必运行于</span><span> DataNode </span><span>上,?/span><span> DataNode </span><span>既是数据存储l点Q也是计结炏V?/span><span> JobTracker </span><span>?/span><span> Map </span><span>d?/span><span> Reduce </span><span>d分发l空闲的</span><span> TaskTracker, </span><span>让这些Q务ƈ行运行,q负责监控Q务的q行情况。如果某一?/span><span> TaskTracker </span><span>出故障了Q?/span><span>JobTracker </span><span>会将其负责的d转交l另一个空闲的</span><span> TaskTracker </span><span>重新q行?/span><span> </span></p> <p align=left><strong><span>本地计算</span></strong><strong></strong></p> <p align=left><span>数据存储在哪一台计机上,qq台计算行这部分数据的计,q样可以减少数据在网l上的传输,降低对网l带宽的需求。在</span><span> Hadoop </span><span>q样的基于集的分布式ƈ行系l中Q计结点可以很方便地扩充,而因它所能够提供的计能力近乎是无限的,但是由是数据需要在不同的计机之间动Q故|?/span> <span>l带宽变成了瓉Q是非常宝贵的,</span><span>“</span><span>本地计算</span><span>”</span><span>是最有效的一U节U网l带宽的手段Q业界把qŞ容ؓ</span><span>“</span><span>Ud计算比移动数据更l济</span><span>”</span><span>?/span><span> </span><span><br></span><a name=fig2><strong><span>?/span><span> 2. </span><span>分布存储与ƈ行计?/span></strong></a><span><br><br></span></p> <p><img alt="" src="http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop1/figure2.jpg"> </p> <p><strong><span>d_度</span></strong><strong></strong></p> <p align=left><span>把原始大数据集切割成数据集Ӟ通常让小数据集小于或{于</span><span> HDFS </span><span>中一?/span><span> Block </span><span>的大?/span><span>(</span><span>~省?/span><span> 64M)</span><span>Q这栯够保证一个小数据集位于一台计机上,便于本地计算。有</span><span> M </span><span>个小数据集待处理Q就启动</span><span> M </span><span>?/span><span> Map </span><span>dQ注意这</span><span> M </span><span>?/span><span> Map </span><span>d分布?/span><span> N </span><span>台计机上ƈ行运行,</span><span>Reduce </span><span>d的数?/span><span> R </span><span>则可qh定?/span><span> </span></p> <p align=left><strong><span>Partition</span></strong></p> <p align=left><span>?/span><span>Map </span><span>d输出的中间结果按</span><span> key </span><span>的范围划分成</span><span> R </span><span>?/span><span>( R </span><span>是预先定义的</span><span> Reduce </span><span>d的个?/span><span>)</span><span>Q划分时通常使用</span><span> hash </span><span>函数?/span><span>: hash(key) mod R</span><span>Q这样可以保证某一D范围内?/span><span> key</span><span>Q一定是׃?/span><span> Reduce </span><span>d来处理,可以?/span><span> Reduce </span><span>的过E?/span><span> </span></p> <p align=left><strong><span>Combine</span></strong></p> <p align=left><span>?/span><span>partition </span><span>之前Q还可以对中间结果先?/span><span> combine</span><span>Q即中间结果中有相?/span><span> key</span><span>?/span><span> <key, value> </span><span>对合q成一寏V?/span><span>combine </span><span>的过E与</span><span> Reduce </span><span>的过E类|很多情况下就可以直接使用</span><span> Reduce </span><span>函数Q但</span><span> combine </span><span>是作?/span><span> Map </span><span>d的一部分Q在执行?/span><span> Map </span><span>函数后紧接着执行的?/span><span>Combine </span><span>能够减少中间l果?/span><span> <key, value> </span><span>对的数目Q从而减网l流量?/span><span> </span></p> <p align=left><strong><span>Reduce </span></strong><strong><span>d?/span></strong><strong><span> Map </span></strong><strong><span>dl点取中间结?/span></strong><strong></strong></p> <p align=left><span>Map</span><span>d的中间结果在做完</span><span> Combine </span><span>?/span><span> Partition </span><span>之后Q以文g形式存于本地盘。中间结果文件的位置会通知L</span><span> JobTracker, JobTracker </span><span>再通知</span><span> Reduce </span><span>d到哪一?/span><span> DataNode </span><span>上去取中间结果。注意所有的</span><span> Map </span><span>d产生中间l果均按?/span><span> Key </span><span>用同一?/span><span> Hash </span><span>函数划分成了</span><span> R </span><span>份,</span><span>R </span><span>?/span><span> Reduce </span><span>d各自负责一D?/span><span> Key </span><span>区间。每?/span><span> Reduce </span><span>需要向许多?/span><span> Map </span><span>dl点取得落在其负责的</span><span> Key </span><span>区间内的中间l果Q然后执?/span><span> Reduce </span><span>函数QŞ成一个最l的l果文g?/span><span> </span></p> <p align=left><strong><span>d道</span></strong><strong></strong></p> <p align=left><span>?/span><span> R </span><span>?/span><span> Reduce </span><span>dQ就会有</span><span> R </span><span>个最l结果,很多情况下这</span><span> R </span><span>个最l结果ƈ不需要合q成一个最l结果。因</span><span> R </span><span>个最l结果又可以做ؓ另一个计Q务的输入Q开始另一个ƈ行计Q务?/span><span> </span></p> <p align=left><a name=N10158><strong><span>?/span></strong></a><strong><span> Hadoop </span></strong><strong><span>初体?/span></strong> </p> <p align=left><span>Hadoop </span><span>支持</span><span> Linux </span><span>?/span><span> Windows </span><span>操作pȝ</span><span>, </span><span>但其官方|站声明</span><span> Hadoop </span><span>的分布式操作?/span><span> Windows </span><span>上未做严格测试,只把</span><span> Windows </span><span>作ؓ</span><span> Hadoop </span><span>的开发^台。在</span><span> Windows </span><span>环境上的安装步骤如下</span><span>( Linux </span><span>q_cMQ且更简单一?/span><span>): </span></p> <p align=left><span>(1)</span><span>?/span><span> Windows </span><span>下,需要先安装</span><span> Cgywin, </span><span>安装</span><span> Cgywin </span><span>时注意一定要选择安装</span><span> openssh (</span><span>?/span><span> Net category )</span><span>。安装完成之后,?/span><span> Cgywin </span><span>的安装目录如</span><span> c:"cygwin"bin </span><span>加到pȝ环境变量</span><span> PATH </span><span>中,q是因ؓq行</span><span> Hadoop </span><span>要执行一?/span><span> linux </span><span>环境下的脚本和命令?/span> </p> <p align=left><span>(2)</span><span>安装</span><span> Java 1.5.x</span><span>Qƈ?/span><span> JAVA_HOME </span><span>环境变量讄?/span><span> Java </span><span>的安装根目录?/span><span> C:"Program Files"Java"jdk1.5.0_01</span><span>?/span> </p> <p align=left><span>(3)</span><span>?/span><span> Hadoop </span><span>官方|站</span><span> <a >http://hadoop.apache.org/</a></span><span>下蝲</span><span>Hadoop Core, </span><span>最新的E_版本?/span><span> 0.16.0. </span><span>下载后的安装包解压C个目录,本文假定解压?/span><span> c:"hadoop-0.16.0</span><span>?/span> </p> <p align=left><span>4)</span><span>修改</span><span> conf/hadoop-env.sh </span><span>文gQ在其中讄</span><span> JAVA_HOME </span><span>环境变量Q?/span><span> export JAVA_HOME="C:"Program Files"Java"jdk1.5.0_01” (</span><span>因ؓ路径?/span><span> Program Files </span><span>中间有空|一定要用双引号\径引h</span><span>) </span></p> <p align=left><span>xQ一切就l,可以q行</span><span> Hadoop </span><span>了。以下的q行q程Q需要启?/span><span> cygwin, </span><span>q入模拟</span><span> Linux </span><span>环境。在下蝲?/span><span> Hadoop Core </span><span>包中Q带有几个示例程序ƈ且已l打包成?/span><span> hadoop-0.16.0-examples.jar</span><span>。其中有一?/span><span> WordCount </span><span>E序Q功能是l计一Ҏ(gu)本文件中各个单词出现的次敎ͼ我们先来看看怎么q行q个E序?/span><span>Hadoop </span><span>共有三种q行模式</span><span>: </span><span>单机</span><span>(</span><span>非分布式</span><span>)</span><span>模式Q伪分布式运行模式,分布式运行模式,其中前两U运行模式体C?/span><span> Hadoop </span><span>分布式计的优势Qƈ没有什么实际意义,但对E序的测试及调试很有帮助Q我们先从这两种模式入手Q了解基?/span><span> Hadoop </span><span>的分布式q行E序是如何编写和q行的?/span><span> </span></p> <p align=left><strong><span>单机</span></strong><strong><span>(</span></strong><strong><span>非分布式</span></strong><strong><span>)</span></strong><strong><span>模式</span></strong><strong></strong></p> <p align=left><span>q种模式在一台单Zq行Q没有分布式文gpȝQ而是直接d本地操作pȝ的文件系l?/span> <br><strong>代码清单1</strong></p> <div><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span>$</span> <span>cd</span> <span>/</span><span>cygdrive</span><span>/</span><span>c</span><span>/</span><span>hadoop-</span><span>0.16</span><span>.</span><span>0</span><span><br></span><span>$</span> <span>mkdir</span><span> test-in  <br></span><span>$</span> <span>cd</span><span> test-in<br></span><span>#</span><span>?nbsp;test-in 目录下创Z个文本文?/span><span>,</span><span> WordCount E序统计其中各个单词出现次?br></span><span>$</span> <span>echo</span> <span>"</span><span>hello world bye world</span><span>"</span> <span>></span><span>file1</span><span>.</span><span>txt   <br></span><span>$</span> <span>echo</span> <span>"</span><span>hello hadoop goodbye hadoop</span><span>"</span> <span>></span><span>file2</span><span>.</span><span>txt<br></span><span>$</span> <span>cd</span> <span>..</span><span><br></span><span>$</span><span> bin</span><span>/</span><span>hadoop jar hadoop-</span><span>0.16</span><span>.</span><span>0</span><span>-examples</span><span>.</span><span>jar wordcount test-in test-out<br></span><span>#</span><span>执行完毕Q下面查看执行结果:<br></span><span>$</span> <span>cd</span><span> test-out<br></span><span>$</span><span> cat part-</span><span>00000</span><span><br>bye     </span><span>1</span><span><br>goodbye  </span><span>1</span><span><br>hadoop  </span><span>2</span><span><br>hello    </span><span>2</span><span><br>world   </span><span>2</span><span><br></span></div> <p><span>     注意事项Q运?/span><span> bin/hadoop jar hadoop-0.16.0-examples.jar wordcount test-in test-out </span><span>Ӟ务必注意W一个参数是</span><span> jar, </span><span>不是</span><span> -jar, </span><span>当你?/span><span> -jar </span><span>Ӟ不会告诉你是参数错了Q报告出来的错误信息是:</span><span>Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/util/ProgramDriver, </span><span>W者当时以为是</span><span> classpath </span><span>的设|问题,费了不时间。通过分析</span><span> bin/hadoop </span><span>脚本可知Q?/span><span>-jar </span><span>q不?/span><span> bin/hadoop </span><span>脚本定义的参敎ͼ此脚本会?/span><span> -jar </span><span>作ؓ</span><span> Java </span><span>的参敎ͼ</span><span>Java </span><span>?/span><span>-jar </span><span>参数表示执行一?/span><span> Jar </span><span>文g</span><span>(</span><span>q个</span><span> Jar </span><span>文g必须是一个可执行?/span><span> Jar,</span><span>卛_</span><span> MANIFEST </span><span>中定义了ȝ</span><span>), </span><span>此时外部定义?/span><span> classpath </span><span>是不起作用的Q因而会抛出</span><span> java.lang.NoClassDefFoundError </span><span>异常。?/span><span> jar </span><span>?/span><span> bin/hadoop </span><span>脚本定义的参敎ͼ会调?/span><span> Hadoop </span><span>自己的一个工L</span><span> RunJar</span><span>Q这个工L也能够执行一?/span><span> Jar </span><span>文gQƈ且外部定义的</span><span> classpath </span><span>有效?/span><span> </span></p> <p align=left><strong><span>伪分布式q行模式</span></strong><strong></strong></p> <p align=left><span>q种模式也是在一台单Zq行Q但用不同的</span><span> Java </span><span>q程模仿分布式运行中的各cȝ?/span><span> ( NameNode, DataNode, JobTracker, TaskTracker, Secondary NameNode )</span><span>Q请注意分布式运行中的这几个l点的区别:</span><span> </span></p> <p align=left><span>从分布式存储的角度来_集群中的l点׃?/span><span> NameNode </span><span>和若q个</span><span> DataNode </span><span>l成</span><span>, </span><span>另有一?/span><span> Secondary NameNode </span><span>作ؓ</span><span> NameNode </span><span>的备份?/span> <span>从分布式应用的角度来_集群中的l点׃?/span><span> JobTracker </span><span>和若q个</span><span> TaskTracker </span><span>l成Q?/span><span>JobTracker </span><span>负责d的调度,</span><span>TaskTracker </span><span>负责q行执行d?/span><span>TaskTracker </span><span>必须q行?/span><span> DataNode </span><span>上,q样便于数据的本地计?/span><span>JobTracker </span><span>?/span><span> NameNode </span><span>则无d同一台机器上?/span><span> </span></p> <p align=left><span>(1) </span><span>按代码清?/span><span>2</span><span>修改</span><span> conf/hadoop-site.xml</span><span>。注?/span><span> conf/hadoop-default.xml </span><span>中是</span><span> Hadoop </span><span>~省的参敎ͼ你可以通过L文g了解</span><span> Hadoop </span><span>中有哪些参数可供配置Q但不要修改此文件。可通过修改</span><span> conf/hadoop-site.xml </span><span>改变~省参数|此文件中讄的参数g覆盖</span><span> conf/hadoop-default.xml </span><span>的同名参数?/span><span> <br></span><strong><span>代码清单</span></strong><strong><span> 2</span></strong></p> <div><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span><</span><span>configuration</span><span>></span><span><br>  </span><span><</span><span>property</span><span>></span><span><br>    </span><span><</span><span>name</span><span>></span><span>fs.default.name</span><span></</span><span>name</span><span>></span><span><br>    </span><span><</span><span>value</span><span>></span><span>localhost:9000</span><span></</span><span>value</span><span>></span><span><br>  </span><span></</span><span>property</span><span>></span><span><br>  </span><span><</span><span>property</span><span>></span><span><br>    </span><span><</span><span>name</span><span>></span><span>mapred.job.tracker</span><span></</span><span>name</span><span>></span><span><br>    </span><span><</span><span>value</span><span>></span><span>localhost:9001</span><span></</span><span>value</span><span>></span><span><br>  </span><span></</span><span>property</span><span>></span><span><br>  </span><span><</span><span>property</span><span>></span><span><br>    </span><span><</span><span>name</span><span>></span><span>dfs.replication</span><span></</span><span>name</span><span>></span><span><br>    </span><span><</span><span>value</span><span>></span><span>1</span><span></</span><span>value</span><span>></span><span><br>  </span><span></</span><span>property</span><span>></span><span><br></span><span></</span><span>configuration</span><span>></span><span><br></span></div> <p><span>     参数</span><span> fs.default.name </span><span>指定</span><span> NameNode </span><span>?/span><span> IP </span><span>地址和端口号。缺省值是</span><span> file:///, </span><span>表示使用本地文gpȝ</span><span>, </span><span>用于单机非分布式模式。此处我们指定用运行于本机</span><span> localhost </span><span>上的</span><span> NameNode</span><span>?/span><span> </span></p> <p align=left><span>参数</span><span> mapred.job.tracker </span><span>指定</span><span> JobTracker </span><span>?/span><span> IP </span><span>地址和端口号。缺省值是</span><span> local, </span><span>表示在本地同一</span><span> Java </span><span>q程内执?/span><span> JobTracker </span><span>?/span><span> TaskTracker, </span><span>用于单机非分布式模式。此处我们指定用运行于本机</span><span> localhost </span><span>上的</span><span> JobTracker ( </span><span>用一个单独的</span><span> Java </span><span>q程?/span><span> JobTracker )</span><span>?/span><span> </span></p> <p align=left><span>参数</span><span> dfs.replication </span><span>指定</span><span> HDFS </span><span>中每?/span><span> Block </span><span>被复制的ơ数Qv数据冗余备䆾的作用?/span><span> </span><span>在典型的生pȝ中,q个数常常设|ؓ</span><span>3</span><span>?/span><span> </span></p> <p align=left><span>(2)</span><span>配置</span><span> SSH,</span><span>如代码清?/span><span>3</span><span>所C?/span><span>: <br></span><strong><span>代码清单</span></strong><strong><span> 3</span></strong></p> <div><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span>$</span><span> ssh-keygen -t dsa -P '' -f ~</span><span>/.</span><span>ssh</span><span>/</span><span>id_dsa <br></span><span>$</span><span> cat ~</span><span>/.</span><span>ssh</span><span>/</span><span>id_dsa</span><span>.</span><span>pub </span><span>>></span><span> ~</span><span>/.</span><span>ssh</span><span>/</span><span>authorized_keys<br></span></div> <span>配置完后Q执行一?/span><span> ssh localhost, </span><span>认你的机器可以?/span><span> SSH </span><span>q接Qƈ且连接时不需要手工输入密码?/span> <p align=left><span>(3)</span><span>格式化一个新的分布式文gpȝ</span><span>, </span><span>如代码清?/span><span>4</span><span>所C?/span><span>:</span></p> <div><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span>$</span> <span>cd</span> <span>/</span><span>cygdrive</span><span>/</span><span>c</span><span>/</span><span>hadoop-</span><span>0.16</span><span>.</span><span>0</span><span><br></span><span>$</span><span> bin</span><span>/</span><span>hadoop namenode –</span><span>format</span><span> <br></span></div> <p><span>(4) </span><span>启动</span><span> hadoop </span><span>q程</span><span>, </span><span>如代码清?/span><span>5</span><span>所C。控制台上的输出信息应该昄启动?/span><span> namenode, datanode, secondary namenode, jobtracker, tasktracker</span><span>。启动完成之后,通过</span><span> ps –ef </span><span>应该可以看到启动?/span><span>5</span><span>个新?/span><span> java </span><span>q程?/span><br><strong>代码清单 5</strong></p> <div><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span>$</span><span> bin</span><span>/</span><span>start</span><span>-all</span><span>.</span><span>sh  <br></span><span>$</span><span> ps –ef<br></span></div> <span>(5) </span><span>q行</span><span> wordcount </span><span>应用</span><span>, </span><span>如代码清?/span><span>6</span><span>所C?/span><span>:</span> <div><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span>$</span><span> bin</span><span>/</span><span>hadoop dfs -put </span><span>./</span><span>test-in input  <br></span><span>#</span><span>本地文件系l上?nbsp;</span><span>./</span><span>test-in 目录拷到 HDFS 的根目录上,目录名改?nbsp;input<br></span><span>#</span><span>执行 bin</span><span>/</span><span>hadoop dfs –help 可以学习各种 HDFS 命o的用?br></span><span>$</span><span> bin</span><span>/</span><span>hadoop jar hadoop-</span><span>0.16</span><span>.</span><span>0</span><span>-examples</span><span>.</span><span>jar wordcount input output<br></span><span>#</span><span>查看执行l果:<br></span><span>#</span><span>文件从 HDFS 拷到本地文gpȝ中再查看Q?br></span><span>$</span><span> bin</span><span>/</span><span>hadoop dfs -get output output <br></span><span>$</span><span> cat output</span><span>/</span><span>*<br></span><span>#</span><span>也可以直接查?br></span><span>$</span><span> bin</span><span>/</span><span>hadoop dfs -cat output</span><span>/</span><span>*<br></span><span>$</span><span> bin</span><span>/</span><span>stop-all</span><span>.</span><span>sh </span><span>#</span><span>停止 hadoop q程<br></span></div> <p><strong><span>故障诊断</span></strong><strong></strong></p> <p align=left><span>(1) </span><span>执行</span><span> $ bin/start-all.sh </span><span>启动</span><span> Hadoop </span><span>q程后,会启?/span><span>5</span><span>?/span><span> java </span><span>q程</span><span>, </span><span>同时会在</span><span> /tmp </span><span>目录下创Z?/span><span> pid </span><span>文g记录q些q程</span><span> ID </span><span>受通过q五个文Ӟ可以得知</span><span> namenode, datanode, secondary namenode, jobtracker, tasktracker </span><span>分别对应于哪一?/span><span> Java </span><span>q程。当你觉?/span><span> Hadoop </span><span>工作不正常时Q可以首先查看这</span><span>5</span><span>?/span><span> java </span><span>q程是否在正常运行?/span> </p> <p align=left><span>(2) </span><span>使用</span><span> web </span><span>接口。访?/span><span> http://localhost:50030 </span><span>可以查看</span><span> JobTracker </span><span>的运行状态。访?/span><span> http://localhost:50060 </span><span>可以查看</span><span> TaskTracker </span><span>的运行状态。访?/span><span> http://localhost:50070 </span><span>可以查看</span><span> NameNode </span><span>以及整个分布式文件系l的状态,览分布式文件系l中的文件以?/span><span> log </span><span>{?/span> </p> <p align=left><span>(3) </span><span>查看</span><span> ${HADOOP_HOME}/logs </span><span>目录下的</span><span> log </span><span>文gQ?/span><span>namenode, datanode, secondary namenode, jobtracker, tasktracker </span><span>各有一个对应的</span><span> log </span><span>文gQ每一ơ运行的计算d也有对应?/span><span> log </span><span>文g。分析这?/span><span> log </span><span>文g有助于找到故障原因?/span> </p> <p align=left><a name=N101F6><strong><span>l束?/span></strong></a> </p> <p align=left><span>现在Q你已经了解?/span><span> MapReduce </span><span>计算模型Q分布式文gpȝ</span><span> HDFS</span><span>Q分布式q行计算{的基本原理</span><span>, </span><span>q且有了一个可以运行的</span><span> Hadoop </span><span>环境Q运行了一个基?/span><span> Hadoop </span><span>的ƈ行程序。在下一文章中Q你了解到如何针对一个具体的计算dQ基?/span><span> Hadoop </span><span>~写自己的分布式q行E序q将光|运行等内容?/span><span> </span></p> <p align=left><a name=resources><span>参考资?/span></a> </p> <p align=left><strong><span>学习</span></strong></p> <ul type=disc> <li><span>讉K</span><span> <a >Hadoop <span>官方|站</span></a>,</span><span>了解</span><span> Hadoop </span><span>及其子项?/span><span> HBase </span><span>的信息?/span> <li><span><a >Hadoop wiki</a> </span><span>?/span><span>, </span><span>有许?/span><span> Hadoop </span><span>的用h?/span><span>,</span><span>开发文?/span><span>,</span><span>CZE序{?/span> <li><span>阅读</span><span> Google Mapreduce </span><span>论文Q?/span><span> <a >MapReduce: Simplified Data Processing on Large Clusters</a>, </span><span>深入了解</span><span> Mapreduce </span><span>计算模型?/span> <li><span>学习</span><span> Hadoop </span><span>分布式文件系l?/span><span> HDFS</span><span>Q?/span><span> <a >The Hadoop Distributed File System:Architecture and Design</a> </span> <li><span>学习</span><span> Google </span><span>文gpȝ</span><span> GFS: <a >The Google File System</a>, Hadoop HDFS </span><span>实现了与</span><span> GFS </span><span>cM的功能?/span> </li> </ul> <div class="8w4ouwo" id=MySignature> </div> <img src ="http://www.shnenglu.com/jack-wang/aggbug/106616.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/jack-wang/" target="_blank">王</a> 2010-01-28 13:50 <a href="http://www.shnenglu.com/jack-wang/archive/2010/01/28/106616.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.117shop.cn" target="_blank">ĻƷþ</a>| <a href="http://www.vyfx.cn" target="_blank">þþƷwww</a>| <a href="http://www.5299.net.cn" target="_blank">ٸþþþþñŪ߳ </a>| <a href="http://www.122v.cn" target="_blank">þþƷɫ鶹</a>| <a href="http://www.apcu.cn" target="_blank">avþþþþòվ</a>| <a href="http://www.webfi.cn" target="_blank">ҹþþþþþþõӰ</a>| <a href="http://www.cooyu.cn" target="_blank">ɫʹþۺ</a>| <a href="http://www.ppzof.cn" target="_blank">þþþù˾Ʒҹ</a>| <a href="http://www.mizhewang.cn" target="_blank">˾Ʒһþþ</a>| <a href="http://www.hthotel.com.cn" target="_blank">þ99Ʒ99þ</a>| <a href="http://www.baiduotui.cn" target="_blank">Ʒþþþþۺձ</a>| <a href="http://www.mcyoyo.cn" target="_blank">þþƷwww</a>| <a href="http://www.anglein.cn" target="_blank">ƷŮþAV</a>| <a href="http://www.ndgbsz.cn" target="_blank">ձ޿һþ</a>| <a href="http://www.sunwebs.cn" target="_blank">ɫþùƷ12p</a>| <a href="http://www.fjzgh.cn" target="_blank">þþùƵ</a>| <a href="http://www.a88wx.cn" target="_blank">þùƷHDAV</a>| <a href="http://www.thelv.cn" target="_blank">91þþƷһëƬ</a>| <a href="http://www.vzas.cn" target="_blank">Ӱһþҹײ </a>| <a href="http://www.hjpz333.cn" target="_blank">޹ƷۺϾþһ</a>| <a href="http://www.jiademandu.cn" target="_blank">99þùۺϾƷ</a>| <a href="http://www.cs556.cn" target="_blank">AVպƷþþþþþ</a>| <a href="http://www.jswlgs.cn" target="_blank">þ99Ʒþþþ</a>| <a href="http://www.buchaqian.org.cn" target="_blank">ƷŮþþþ</a>| <a href="http://www.3lr9a.cn" target="_blank">þ99þóѲ</a>| <a href="http://www.jjzrhg.cn" target="_blank">þֻƷ99re66</a>| <a href="http://www.kydxx.cn" target="_blank">99ŷþþþƷѿ</a>| <a href="http://www.kottbac.cn" target="_blank">Ůaaaþþü</a>| <a href="http://www.rubiconworld.com.cn" target="_blank">޹ƷۺϾþ </a>| <a href="http://www.cdge.cn" target="_blank">޹뾫ƷŮ˾þþò</a>| <a href="http://www.czzhiyou.cn" target="_blank">޾Ʒרþͬ</a>| <a href="http://www.aamih.cn" target="_blank">ۺɫ77777þ</a>| <a href="http://www.lenglie.cn" target="_blank">999þþѹƷ</a>| <a href="http://www.xmgoogle.net.cn" target="_blank">һþۺ³³ŷһ </a>| <a href="http://www.7-go.cn" target="_blank">þþþƷ鶹 </a>| <a href="http://www.iyuhu.cn" target="_blank">þۺϺݺۺϾþۺ88 </a>| <a href="http://www.myloveshop.com.cn" target="_blank">þۺϾþۺ</a>| <a href="http://www.girls18.cn" target="_blank">Ʒþһ</a>| <a href="http://www.kunow.cn" target="_blank">þþƷһۺ</a>| <a href="http://www.zusang.cn" target="_blank">ѾþþƷ99þ</a>| <a href="http://www.girla.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>