本文只为这本书提供勘误,如过你有发现新的错误,请联系我:send me an email,我会把它更新在本文中。
1、P2,+6,成高解析度图片之后 ===》 成高清晰度图片之后
2、P2,-3,星和银河系等 ===》 星或银河系等
3、P3,-11,系统保存数据的冗余复本 ===》 系统保存数据的冗余副本
4、P3,-10,可以是有数据的另一可用复本 ===》 可以使用数据的另一可用副本
5、P4,+11,针对整个数据集的即时(ad hoc)查 ===》 针对真个数据集的即席(ad hoc)查
6、P4,+4,而只有这两部分提供对外的接口 ===》 这也是数据发生混合的地方的接口(本人自己理解翻译的,原文:and it's the interface between the two where the "mixing" occurs.
7、P5,+7,受限于寻址的比例 ===》并且关系数据库受限于B树执行寻址的速率
8、P7,+4,这种排列方式 ===》 这种安排
9、P9,+12,好的描述性(也因此更俗) ===》 好的描述性(也因此更通俗)
10、P12,+16,2009年4月---赢得每分钟排序,59秒内排序500GB(在1400个节点上)和173分钟内排序100TB数据(在3400各节点上) ===》 2009年4月---因为在59秒内排序500GB(在1400个节点上)和173分钟内排序100TB数据(在3400各节点上),赢得the minute sort
11、P21,+4,供一套可优化网络序列化传输的基本类型 ===》 供一套为网络序列化而优化的基本类型
12、P25,+5,出,然后5个reduce输入产生2个reduce输出 ===》 出,然后在两个组中的5个reduce输入产生2个reduce输出
13、P25,+18,新的API倾向于使用虚类 ===》 新的API倾向于使用抽象类
14、P25,+19,需修改类的实现而在虚类 ===》 需修改类的实现而在抽象类
15、P25,+20,mapper和reducer现在都是虚类 ===》 mapper和reducer现在都是抽象类
16、P26,+2,该对象是Hadoop配置对象的一个扩展(用于配置守护进程,详情请参见地130页的”API配置“小节)===》 该对象是Hadoop配置对象(用户配置守护进程,详情请参见地130页的”API配置“小节)的一个扩展
17、P26,+8,其中nnnnn表示分块序号===》其中nnnnn表示编号(原文是part number,也就是零件编号的意思)
18、P29,+6,第一个复本存储在本地节点上,其他复本存储在 ===》 第一个副本存储在本地节点上,其他副本存储在
19、P29,-2,通过哈希函数来分区,这种方法很高效 ===》通过对键运用哈希函数来分区,这种方法很有效
20、P30,+2,数据流称为shuffle(混洗) ===》 数据流称为shuffle(洗牌)
21、P33,+13,它有一个数据的行视图 ===》 它有一个面向行的数据视图
22、P35、+19,我们需要在指定Streaming JAR文件流与jar选项时指定 ===》我们需要在指定jar选项时指定Streaming JAR文件
23、P37,+9,出来实现map代码和reduce代码之间的Streaming ===》 出来与map和reduce代码通信的Streaming
24、P38,+19,因为开发人员必须来回封送(marshall)字符串与特定应用领域内使用的具体类型 ===》原文是:This makes the interface simpler, although it does put a slightly greater burden on the application developer, who has to convert to and from richer domain-level types.再说了,那个英文单词应该是marshal,还有意思解释成:整理,打包,可能比较容易理解。
25、P41,+10,但实际上Hadoop是 ===》 但实际上Hadoop有
26、Declaration:以后但凡是在书中看到”复本“两个字,就默默的改成”副本“,然后在心里默念一遍:fuck
27、P46,-1,因为本例中没有使用复本的概念 ===》 因为副本的概念不适用于目录
28、P50,+9,Fuse-DFS使用C语言实现的,调用libhdfs并作为访问HDFS的接口 ===》Fuse-DFS是C语言通过调用libhdfs访问HDFS的接口来实现的。
29、P50,+10,src/contrib./fuse- ===》 src/contrib/fuse
30、P51,+1,因为该接口可以将任意 ===》 因为FTPFileSystem可以将任意
31、P51,-15,通过FsUrlStreamHandlerFactory实例调用URL中的setURLStreamHandlerFactory方法。 ===》通过一个FsUrlStreamHandlerFactory实例对URL调用setURLStreamHandlerFactory方法
32、P51,-13,因此通常在静态方法中调用上述方法 ===》 因此通常在静态块中调用上述方法
33、P52,-12,已经声明了一个URLStreamhandlerFactory实例 ===》 已经调用了URLStreamHandlerFactory
34、P52,+15,因而System.out不关闭输入流 ===》 因而System.out不必被关闭
35、P52,-5,通过设置配置文件读取类路径来实现(如conf/core-site.xml) ===》通过读取类路径中的配置文件(如conf/core-site.xml)来设置
36、P62,+15,通配符模式和正则表达式同样无法对文件属性进行匹配。 ===》属性可以得到比通配符模式和正则表达式更好的匹配
37、P65,-1,想客户端 ===》向客户端
38、P73,-4,3,2,InputFormat类并不知道文件已经存档,尽管该类可以将多个文件打包成一个MapReduce分片 ===》 没有能识别HAR存档的InputFormat,因此InputFormat不能讲多个文件打包到一个单独的MapReduce分片中
39、P75,+6,在盘(on-disk)数据结构 ===》基于硬盘(外存)的数据结构(on-disk,……,怎么说,应该都能理解,但是就是书上写的那个“在盘”太让人纠结了,你是来耍我的吧。
40、P77,+8,9,10,要想在一个应用中实现全局校验和验证,需要将fs.file.impl属性设置为org.apache.hadoop.fs.RawLocalFileSystem进而对文件URI实现重新映射 ===》要想在一个应用中全局禁用校验和,需要通过将fs.file.impl属性设置为org.apache.hadoop.fs.RawLocalFileSystem实现对文件URI的重新映射
41、P83,+20,21,22,问题在于从每个块的起始位置进行读取郁葱数据流的任意位置开始读取时一致并接着往后读取下一个数据块, ===》 问题是每个压缩块的起点并没有通过任何方法进行区分,而这些方法允许在数据流任意一点的reader可以到达下一个数据块的起点。
42、P85,-5,但如果对map阶段的中间输入进 ===》 但如果对map阶段的中间输出进
43、P86,-6,所以在控制客户端和服务器的过程中,需要直接引进相应的协议 ===》所以对于客户端和服务器需要在一种可控的方式下引入协议
44、P66,+2,对象负责处理databode和namenode之间的通信 ===》 对象负责处理与datanode和namenode之间的通信
45、P66,+5,责任是根据datanode列表来要求namenode分配 ===》责任是通过提取一个合适datanode列表来分配
46、P66,-6,这对与 ===》 这对于
47、P67,+14,同时,单一机架上的读取带 ===》 同时,off-rack上的读取带
48、P67,-9,与第一个不同且随机另外选择的机架中节点上 ===》与第一个不同且随机另外选择的机架中的节点上
49、P73,+12,但是由hdfs指定基础文件系统方案的权限===》但是autority(我也不清楚怎么翻译,各自意会吧)指定hdfs作为底层的文件系统
50、P73,-4,InputFormat类并不知道文件已经存档,尽管该类可以将多个文件打包成一个MapReduce分片 ===》没有能识别HAR存档文件的InputFormat,因此,InputFormat不能将多个文件打包到一个单独的MapReduce分片
51、P76,+1,由io.bytes.per.checksum指定字节的数据计算校验和 ===》为每io.bytes.per.checksum个字节的数据计算校验和
52、P76,-3,文件系统客户端会明确地 ===》 文件系统客户端会透明地
53、P76,-8,使用-ignoreCrc和-get选项或等价的-copyToLocal命令 ===》为-get或等价的-copyToLocal命令使用-ignoreCrc选项
54、P77,-12,称为“源”(raw) ===》 称为“原始”(raw)
55、P79,-9,对于某些将部分数据流(session of data stream)压缩为单独数据块(block)的应用 ===》数据流的段(sessions of data stream)压缩为不同数据块(block)的应用
56、P80,+9,实现的完全合格名称 ===》 实现的完全限定名
57、P81,+17,下面的程序压缩为 ===》 下面的程序解压缩为
58、P82,-19,允许你反复使用 ===》 允许你重复使用
59、P84,+14,但增加了许多编程语言 ===》 但增加了可以被许多编程语言
60、P87,+1,初始数据永久存储时,为它选择的数据格式需要有来自序列化框架的不同需求 ===》数据持久化存储选择的数据格式与一个序列化框架有不同的要求
61、P89,+10,对继承自WritableComparable类的===》为WritableComparatable类定义的
62、P91,+14,Text替代了UTF8类,这并不是一个很好的替代,===》Text替代了标记为deprecated的UTF8类,UTF8类不是很好,
63、P91,+16,###这里丢了一段原文###Text类使用一个int类型的值(变长编码)来存储字符串编码中的字节数,所以最大长度是2GB,Text使用标准UTF-8,这使得与其它能够理解标准UTF-8的工具的写作更简单
64、P91,+19,也不是Java Char的编码单元(如String)===》或者Java Char的代码单元(就像是String中的一样)
65、以后看到“编码单元”就改成“代码单元”,看到“编码位置”、“编码点”就改成“代码点”,因为实在是太多了。
66、P92,+15,LETTER SHARPS ===》LETTER SHARP S
67、P93,-12,更加相似(相较名称而言)===》而不是同名的charAt()函数
68、P94,-12,对String重新排序===》重新按String存储
69、P95,+12,如果希望存储……SequenceFile中的键===》当你需要在SequenceFile中存储一个值列表的时候,NullWritable可以作为一个键,而不是作为键值对存储
70、P95,-10,并使用……提高性能===》使用对数组的索引作为对类型的序列化引用
71、P95,-9,可以在继承的子类中指定需要支持的类型===》提交需要支持的类型
72、P96,+1,如果……静态类型===》在通过类型定义Writable的context(自己看着翻译)中,例如SequenceFile的键或值,或更平常的作为MapReduce的输入,需要提交给ArrayWritable(或相应的TwoDArrayWritable类)并静态地设置类型。
73、P89,-10,###这一段建议大家去翻译下英文的相关段落。因为我都不知知道该怎么改了。
74、P101,-8,由句点分隔===》由逗号分隔
75、P102,+13,###这一段建议大家阅读英文原版
76、P102,+24,序列化图对象===》序列化对象图(可能翻译的也有问题,原文:serializing graphs of objects)
77、