【如果您在阅读《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》(购书链接地址: 当当购书网址京东购书网址卓越购书网址。)一书过程中,发现任何错误或者纰漏,欢迎发邮件到dongxicheng@yahoo.com】

每隔一个月,我会统计本月发现错误最多的三名读者,并给予以下奖励:赠送签名书一本,请吃饭(前提是在北京),并推荐工作。该活动暂时定为3个月,即评选3次。

以下是本书存在的各种错误和纰漏,感谢发现错误的各位读者:

  1. 第7页,步骤4 验证JDK是否安装成功。重启Shell终端,执行命令“java-version”。这里java与-version之间应该空格!即“java -version””
  2. 第7页:最后一句改为:“Hadoop 1.0.0可从Hadoop SVN 网址http://svn.apache.org/repos/asf/hadoop/common/branches/ 处下载(其中分支branch-1对应Hadoop 1.0.0)。”
  3. 第26页,介绍MRv1时,“规约“应是“归约”
  4. 第31页,脚注中Canbiner拼写错误,应为”Combiner“(由薛银涛发现)
  5. 第33页,图上面一句,Secondary和Namenode之间多了个顿号(由北京-张永杰发现)
  6. 第33页, “Client(代表用户)通过NameNode和DataNode交互访问HDFS中的文件。” 改为“Client(代表用户)通过NameNode和DataNode交互从而访问HDFS中的文件。”
  7. 第46页,介绍序列化时,应该是"Hadoop实现了自己的一套序列化框架“,不是"Java实现了自己的一套序列化框架“。(由网友北京-张永杰发现)
  8. 第54页, "同介绍InputFormat 实现的思路一样,我们先介绍基类FileOutputFormat,再介绍其派生类TextOutputFormat。"但在这一章,并没有介绍TextOutputFormat,遗漏了,不严谨(由网友McCoy发现)
  9. 第77页,图上面那一段 ”将结果返回给服务器端“应该”将结果返回给客户端“(由汪皓发现)
  10. 第182页,“7.4.4节 杀死作业”一节第一句,改为“杀死作业是通过JobTracker向TaskTracker发送KillTaskAction和KillJobAction命令完成的。”
  11. 第208页,kvoffsets = new int[recordCapacity]; kvindices = new int[recordCapacity * ACCTSIZE]; 图中的比例反了(由陈昱康发现)
  12. 第124页,注释说Map的数据结构是红黑树,实际上只有TreeMap和实现Set接口的TreeSet是红黑树,HashMap不是(由新浪微博网友@huang__huang发现)
  13. 第221页,最上说计数排序的复杂度是O(lgN),应该是O(n)(由新浪微博网友@huang__huang发现)
  14. 第219页,表8-4中,io.sort.spill.percent 的参数意义应该是缓冲区kvbuffer和kvoffsets内存使用率达到该比率后,会...(由QQ网友kk发现)
  15. 第269页,“授权类包括Policy、AuthPermission和PrivateCrtx]entialPermission三个”中的“PrivateCrtx]entialPermission”拼写错误,应为“PrivateCredentialPermission”
  16. 第288页 倒数第六行,“它从事任何与具体……”应该是“它不再从事任何与具体…..”
  17. 第156页 公式错误,“timeLeft=progressRate/(1-progress)”应该是“timeLeft=(1-progress)/progressRate”
  18. 第61页 “并将结果写到标准数据中”应该是“并将结果写到标准输出中”
  19. 第292页 描述resourcemanager包含的service时候,写了两个ApplicationMasterLauncher(由陈昱康发现)
  20. 第215页 图应该是“reduce task计算流程”,图描述写成了map task(由陈昱康发现)
  21. 第111页 “分别保存在job.split和job.splitmetainfo文件”,写反了,应该是“分别保存在job.splitmetainfo和job.split文件”
  22. 第210页,第四行的“kvbuffer表示最后写入的一个完整key/value结束的位置”,这里写的“kvbuffer”写错了,应该是上文提到的“bufmark”.
  23. 第208页的伪码部分,最后一行代码原文是“spillLock.lock()”,应该是“spillLock.unlock()”。

  1. 第7页,最后一句后面增加“本书也适合其他Hadoop 1.x版本,但细节之处可能稍有不同,此时以1.0.0版本为主。”
  2. 第22页,第一句“JobTracker”改为“TaskTracker”。
  3. 第49页,第5行,“InputSplit”改为“InputFormat”。
  4. 第59页,最下面,步骤1中,“IntercalSampler”改为“IntervalSampler”。
  5. 第91页,最后一行“服务器处理监听状态”改为“服务器处于监听状态”。
  6. 第143页,“(1)灰名单”一节中,“条件2”开头一行中,“#blacklists”改为“blacklist”。
  7. 第165页,倒数第四行“实现”改为“事先”。
  8. 第175页,倒数第7、6、5行中,“taskReport”改为“taskReports”。
  9. 第182页,第2行中,“KillTask”改为“killTask”;倒数第4行,“KillJob”改为“killJob”
  10. 第194页,第8行中,“mapred.job.{map|reduce}.memory.mb”改为“mapred.cluster.{map|reduce}.memory.mb”
  11. 第195页,“7.7 小结”中,第二个“TasTracker”改为“TaskTracker”,漏了一个“s”
  12. 第197页,8.2节开始第5行,“需要到磁盘上”改为“需要写到本地磁盘上”
  13. 第203页,"Java"一节中,第三行“可性读性很差”改为“可读性很差”。
  14. 第208页,伪代码部分,倒数第二行,“spillLock.lock()”改为“spillLock.unlock()”。
  15. 第243页,10.2.2节开始第2行“虚拟机群”改为“虚拟集群”
  16. 第247页,“capacity:”开头的一句中,“而如果每个队列作业较少”改为“而如果某个队列作业较少”。
  17. 第247页,去掉最下面三行
  18. 第248页,去掉最上面三行
  19. 第216页,图8-23上面一句,“分别对内存和磁盘....”改为“分为对磁盘和内存”
  20. 第218页,“(3)合并内存文件和磁盘文件”一节中,第三句,“分别对内存和磁盘....”改为“分为对磁盘和内存”
  21. 第255页,“10.5节”倒数第2句“小作业可以优化....”中的“优化”改为“优先”。
  22. 第269页,倒数第7句,第三个“Principal”改为“Subject”。
  23. 第297页,"如何确定Reduce Task启动时机"一节中,第一行“RedouceManager”改为“ResouceManager”。