logo资料库

从零开始学习Hadoop.pdf

第1页 / 共71页
第2页 / 共71页
第3页 / 共71页
第4页 / 共71页
第5页 / 共71页
第6页 / 共71页
第7页 / 共71页
第8页 / 共71页
资料共71页,剩余部分请下载后查看
前言
第1章 Hadoop的安装
1. 操作系统
2. Hadoop的版本
3. 下载Hadoop
4. 安装Java JDK
5. 安装hadoop
6. 安装rsync和ssh
7. 启动hadoop
8. 测试hadoop
9. 练习
第2章 第一个MapReduce程序
1. Hadoop从头说
1.1 Google是一家做搜索的公司
1.2 MapReduce和HDFS是如何工作的
1.3 API参考
2. 词频统计
3. 标准形式的MapReduce程序
3.1 目录和文件结构
3.2 TokenizerMapper .java文件的源代码
3.3 IntSumReducer.java文件的源代码
3.4 WordCount.java文件的源代码
3.5 编译
3.6 打包
3.7 执行
3.8 查看结果
4. 最简形式的MapReduce
4.1 目录和文件结构
4.2 WordCount.java文件的源代码
4.3 编译
4.4 打包
4.5 运行
4.6 查看结果
第3章 HDFS分布式文件系统
1. 文件系统从头说
2. Hadoop的文件系统
3. 如何将文件复制到HDFS
3.1 目录和文件结构
3.2 FileCopy.java文件的源代码
3.3 编译
3.4打包
3.5 运行
3.6 检查结果
4. 从HDFS删除文件
4.1 目录和文件结构
4.2 FileDelete.java文件的源代码
4.3 编译
4.4 打包
4.5 运行
4.6 检查结果
5. 读取HDFS的文件
5.1 目录和文件结构
5.2 FileCat.java文件的源代码
5.3 编译
5.4 打包
5.5 运行
6. 获取文件的属性信息
6.1 目录和文件结构
6.2 FileInfo.java文件的源代码
6.3 编译
6.4 打包
6.5 运行
7. 列出目录下所有文件
7.1 目录和文件结构
7.2 FileList.java文件的源代码
7.3 编译
7.4 打包
7.5 运行
第4章 序列化
1. 序列化从头说
2. Hadoop的序列化接口
3. IntWritable如何序列化
3.1 目录和文件结构
3.2 IntSer.jav文件的源代码
3.3 编译
3.4 打包
3.5 运行
第5章 压缩
1. 压缩从头说
2. 从文件到文件的压缩
2.1 文件和目录结构
2.2 CprsF2F.java 源文件的代码
2.3 编译
2.4 打包
2.5 执行
3. 从标准输入到文件的压缩
3.1 文件和目录结构
3.2 CprsIn2F.java 源文件的代码
3.3 编译
3.4 打包
3.5 执行
4 从文件到文件的解压缩
4.1 文件和目录结构
4.2 DcprsF2F.java 源文件的代码
4.3 编译
4.4 打包
4.5 执行
第6章 MapReduce的输入输出
1. InputFormat类
2. OutputFormat类
第7章 Hadoop MapReduce的运行机制
第8章 一个实际的例子
1. Pi值估算原理
2. 旧版API的Pi值估算MapReduce程序
3. 新版API的Pi值估算的MapReduce程序
3.1 NewPiEst.java文件的源代码
3.2 编译和运行
推荐书目
后记
未来的趋势是什么
为什么大数据很重要
如何学习大数据最快
最短路径系列 之一 从零开始学习 Hadoop 作者三个主站: csdn 主页:http://blog.csdn.net/lizhe_dashuju 豆瓣主页:http://www.douban.com/people/79049984/ 新浪博客:http://blog.sina.com.cn/u/2436144507 敬请关注,谢谢!
内容目录 第 2 前言.................................................................................................................................................................................................5 章 Hadoop 的安装..................................................................................................................................................................7 第 1 1. 操作系统...............................................................................................................................................................................7 2. Hadoop 的版本......................................................................................................................................................................7 3. 下载 Hadoop..........................................................................................................................................................................7 4. 安装 Java JDK.......................................................................................................................................................................8 5. 安装 hadoop..........................................................................................................................................................................9 6. 安装 rsync 和 ssh.................................................................................................................................................................10 7. 启动 hadoop........................................................................................................................................................................10 8. 测试 hadoop.........................................................................................................................................................................11 9. 练习.....................................................................................................................................................................................11 章 第一个 MapReduce 程序................................................................................................................................................12 1. Hadoop 从头说....................................................................................................................................................................12 1.1 Google 是一家做搜索的公司.....................................................................................................................................12 1.2 MapReduce 和 HDFS 是如何工作的.........................................................................................................................13 1.3 API 参考.......................................................................................................................................................................13 2. 词频统计.............................................................................................................................................................................13 3. 标准形式的 MapReduce 程序............................................................................................................................................14 3.1 目录和文件结构.........................................................................................................................................................14 3.2 TokenizerMapper .java 文件的源代码.......................................................................................................................14 3.3 IntSumReducer.java 文件的源代码............................................................................................................................16 3.4 WordCount.java 文件的源代码..................................................................................................................................18 3.5 编译.............................................................................................................................................................................19 3.6 打包..............................................................................................................................................................................20 3.7 执行..............................................................................................................................................................................20 3.8 查看结果......................................................................................................................................................................20 4. 最简形式的 MapReduce.....................................................................................................................................................20 4.1 目录和文件结构.........................................................................................................................................................21 4.2 WordCount.java 文件的源代码..................................................................................................................................21 4.3 编译..............................................................................................................................................................................22 4.4 打包..............................................................................................................................................................................23 4.5 运行..............................................................................................................................................................................23 4.6 查看结果......................................................................................................................................................................23 章 HDFS 分布式文件系统..................................................................................................................................................24 1. 文件系统从头说.................................................................................................................................................................24 2. Hadoop 的文件系统...........................................................................................................................................................25 3. 如何将文件复制到 HDFS..................................................................................................................................................25 3.1 目录和文件结构.........................................................................................................................................................25 3.2 FileCopy.java 文件的源代码......................................................................................................................................25 3.3 编译..............................................................................................................................................................................26 第 3
3.4 打包..............................................................................................................................................................................26 3.5 运行..............................................................................................................................................................................27 3.6 检查结果......................................................................................................................................................................27 4. 从 HDFS 删除文件.............................................................................................................................................................27 4.1 目录和文件结构.........................................................................................................................................................27 4.2 FileDelete.java 文件的源代码....................................................................................................................................27 4.3 编译..............................................................................................................................................................................28 4.4 打包..............................................................................................................................................................................28 4.5 运行..............................................................................................................................................................................28 4.6 检查结果......................................................................................................................................................................29 5. 读取 HDFS 的文件.............................................................................................................................................................29 5.1 目录和文件结构.........................................................................................................................................................29 5.2 FileCat.java 文件的源代码.........................................................................................................................................29 5.3 编译..............................................................................................................................................................................30 5.4 打包..............................................................................................................................................................................30 5.5 运行..............................................................................................................................................................................31 6. 获取文件的属性信息.........................................................................................................................................................31 6.1 目录和文件结构.........................................................................................................................................................31 6.2 FileInfo.java 文件的源代码........................................................................................................................................31 6.3 编译..............................................................................................................................................................................32 6.4 打包..............................................................................................................................................................................32 6.5 运行..............................................................................................................................................................................33 7. 列出目录下所有文件.........................................................................................................................................................33 7.1 目录和文件结构.........................................................................................................................................................33 7.2 FileList.java 文件的源代码........................................................................................................................................34 7.3 编译..............................................................................................................................................................................34 7.4 打包..............................................................................................................................................................................34 7.5 运行..............................................................................................................................................................................35 章 序列化..............................................................................................................................................................................36 1. 序列化从头说.....................................................................................................................................................................36 2. Hadoop 的序列化接口.......................................................................................................................................................36 3. IntWritable 如何序列化......................................................................................................................................................37 3.1 目录和文件结构.........................................................................................................................................................37 3.2 IntSer.jav 文件的源代码.............................................................................................................................................37 3.3 编译..............................................................................................................................................................................39 3.4 打包..............................................................................................................................................................................39 3.5 运行..............................................................................................................................................................................39 章 压缩..................................................................................................................................................................................40 1. 压缩从头说.........................................................................................................................................................................40 2. 从文件到文件的压缩.........................................................................................................................................................40 2.1 文件和目录结构.........................................................................................................................................................40 2.2 CprsF2F.java 源文件的代码.......................................................................................................................................41 2.3 编译..............................................................................................................................................................................42 2.4 打包..............................................................................................................................................................................42 第 4 第 5
第 6 2.5 执行..............................................................................................................................................................................42 3. 从标准输入到文件的压缩.................................................................................................................................................42 3.1 文件和目录结构.........................................................................................................................................................42 3.2 CprsIn2F.java 源文件的代码......................................................................................................................................42 3.3 编译..............................................................................................................................................................................43 3.4 打包..............................................................................................................................................................................43 3.5 执行..............................................................................................................................................................................44 4 从文件到文件的解压缩......................................................................................................................................................44 4.1 文件和目录结构.........................................................................................................................................................44 4.2 DcprsF2F.java 源文件的代码.....................................................................................................................................44 4.3 编译..............................................................................................................................................................................45 4.4 打包..............................................................................................................................................................................46 4.5 执行..............................................................................................................................................................................46 章 MapReduce 的输入输出................................................................................................................................................47 1. InputFormat 类....................................................................................................................................................................47 2. OutputFormat 类.................................................................................................................................................................50 章 Hadoop MapReduce 的运行机制..................................................................................................................................51 章 一个实际的例子.............................................................................................................................................................54 1. Pi 值估算原理.....................................................................................................................................................................54 2. 旧版 API 的 Pi 值估算 MapReduce 程序...........................................................................................................................54 3. 新版 API 的 Pi 值估算的 MapReduce 程序.......................................................................................................................61 3.1 NewPiEst.java 文件的源代码.....................................................................................................................................61 3.2 编译和运行..................................................................................................................................................................66 推荐书目.......................................................................................................................................................................................68 后记...............................................................................................................................................................................................69 未来的趋势是什么.................................................................................................................................................................69 为什么大数据很重要.............................................................................................................................................................69 如何学习大数据最快.............................................................................................................................................................70 第 7 第 8
前言 Hadoop 是最著名使用最广泛的分布式大数据处理框架,它是用 Java 开发的。 这本书有一个明确的目标:只要有一台能上网的计算机,就可以让读者在最短的时间内,学会 Hadoop 的初级开 发。所以,这本书只讲干货,也就是必须要知道的 Hadoop 的最核心知识点,包括如何搭建 Hadoop,如何写代码, 如何查 API。对于更多细节问题,书后会列一个书目给大家参考,这些书已经讲得很好了,不需要在这里饶舌浪费时 间。 操作系统的计算机,能做到开机,输入密码,进入图形界面,打开命令终端,就可以了。懂一点点 Java 这本书对读者的预要求很少:懂一点点 Linux,懂一点点 Java 编程。 懂一点点 Linux”是指,假如有一台装了 ”编程 Linux 是指,在 Linux 上,用记事本写一个 Java 的 HelloWorld 程序,然后把它编译出来,执行一下,就可以了。这个预要 求非常低,接近于零,所以这本书叫 从零开始学习 Hadoop”。Hadoop 是用 Java 开发的,它通过 Streaming 方式支持 其他语言,诸如 Python,C++,Ruby,但如果想真正理解 Hadoop,必须从 Java 开始,用其他语言以 Streaming 方式 学 Hadoop 是一条不归路,这是笔者用一个月时间得来的教训。 “ “ “ ” 只要有一台能上网的计算机 ,Hadoop 的伪分布式运行模式,可以在一台电脑上运行 Hadoop 的全部功能。在伪 “ 分布式下编写和运行的代码,不作任何修改便能运行在 Hadoop 集群上,这是学习 Hadoop 的最方便的优点之一。 “ 最短的时间 ,这是一个有点长的话题。学习一项技能,有很多种途径。最快的途径找个高手教,高手会说看哪些书, 从哪里做一下,哪些地方注意不要犯错,哪些地方是不需要的不要在上面浪费时间,哪些地方很关键要多做做将来 会很有用。只要没有出现诸如高手数量不多,或者高手很忙,或者高手是同事但职位只比你高一点点 教会你对他 其实没什么好处的这些情况之外,这个途径是最好的。 — ” 另外一个途径是报一些培训班学习,费用相对高一些。 性价比最高的途径是自学,如果自学能力比较强,从网上找相关的电子书教学视频官方教程学习,笔者个人比较 推崇这种方式,这种方式可以很好地锻炼学习能力。能力是一得永得的,将来学习其他技能可以举一反三,缺点是 比较耗时,自学的过程其实很大程度上是试错的过程。如果技术比较复杂,而且工作中很快要用到,或者下个星期 就要面试笔试,那肯定是妥妥地来不及的。 如何在最短的时间内解决 Hadoop 入门问题呢?理性的方式,是从流程和细节上解决。1898 年,科学管理之父泰 勒做了一个铁块搬运实验。当时,工人们每天平均搬运 12~13 吨铁块。泰勒的实验方式是对搬运过程计时,分析不 同搬运方式的影响,分析休息时间和劳动时间的搭配,最终可以让工人在不太累的情况下,每天搬运 47 吨铁块, 效率提高到近 4 倍。 事实上,可以用同样的方式解决学习问题。比如说,请一个对 Hadoop 一无所知的小白同学自学 Hadoop,然后要 求他记下每天学了哪些内容,遇到什么问题,是怎么解决的,分别花了多少时间,有哪些是必须的,有哪些后来验 证是弯路,哪些可以省略。待到他学完了,根据这个学习记录整理出一条快捷之路,避开没用的地方,简化过于复 杂的地方,调整到合理的次序,于是就得到一个 最短的时间 学习方案。这本书就是这么产生的,而且是真简化。 ” “
” “ 做一遍 是最佳的快速学习方式。比如说,学习 C 语言编程,如果学习方式是看书,读一遍乃至读十遍,不写代 码,不会在大脑留下任何痕迹。如果将书中的例题代码原样输入编译执行,理解会好很多。如果不但调通了例题,而 且将书里的大部分习题独立做出来,会觉得自己对 C 语言很熟悉。如果写了一个有质量的五千到一万行的项目,就 觉得自己真的可以用 C 语言做工作。所以说,做一遍是最好的学习方式。 笔者见过一些高效的人是以反其道而行之的方式学习的。当他们需要用到一种新技术的时候,就找一本相关的书, 看一下目录,再看一下每章的简介,大略看看范例。然后,根据范例立刻写代码,需要什么功能,就到书里和 API 里找,如果遇到 Bug,在 Google 上检索一下。这种方式会很快做完功能,同时也就学会这个技术。如果从头开始看书, 一点一点做例题做习题,对他们来说太慢了,时间成本太高,很不划算。 还有另外一种方式,笔者将它称之为吉祥物大师法(Master Mascot),注意,不要看成吉祥物大法师。一些有趣 的技术公司会给自己设计吉祥物玩具。假如员工在工作中遇到解决不了的问题,按照 潜规则 ,要先把这个问题讲 给吉祥物玩具听,多数情况下讲完了自己就知道答案了,这就是吉祥物大师法。 “ ” 这本书的例子,是按照 做一遍 的方式编写的。每个例子都是完整的,从目录和文件结构,到编译打包运行。这种 完整很重要,可以大幅度减少试错,查询 API,编译和调试的时间。熟悉这些范例,先手工输入和编译,然后再合上 书,自己从零开始做一遍,对着代码找感觉和体会。 “ ” ” “ 尤其非常重要的是,要想象如果自己是 Hadoop 的作者,会怎么设计 Hadoop,用这种眼光审视 Hadoop,会突然 之间 开悟 ,原来如此。这种 开悟 ,要自己走过一遍,想过一遍,做过一遍,才会达到。一旦 开悟 了,会信心满 满,应对这个体系架构的诸多问题,会漂亮地解决未知问题,就像厨师做一道好菜,像浪子泡 MM。这种书有点像 武侠小说里金世遗练的邪派功夫,简单,见效快,但见效之后要补上一些细节,免得走火入魔。所谓走火入魔就是 觉得 Hadoop 如此简单,没什么搞头,其实 Hadoop 真的是很有搞头。 “ ” “ ” 如果你对 Java 很熟悉,对 Linux 很熟悉,这本书对你来说太简单了,只需要一个下午就能搞定。Hadoop 很大,但 大部分东西都是在 Linux 出现过。你只需要安装它,然后手写一下例题,编译,运行,然后去看看 Hadoop 的 API, 就足够了。 未来将根据这本书发布一系列的视频,更为直观。本书的理念是让零起点的读者根据这本书能在一个星期或者更 短的时间内学会 Hadoop 的初步技能,快速让大家安装 Hadoop,快速跑一个 Hadoop 的 Demo,快速了解 Hadoop 的 运行流程,写一些初级的 Hadoop 的应用 ,以应对诸如快速开发,面试笔试,大数据课程实践等需求 。如果需要掌 握更多的 Hadoop 细节,请参考本书的推荐书目,或者关注 最短路径系列 的未来书目。 “ ”
第 1 章 Hadoop 的安装 Hadoop 的安装比较繁琐,有如下几个原因:其一,Hadoop 有非常多的版本;其二,官方文档不尽详细,有时候 更新脱节,Hadoop 发展的太快了;其三,网上流传的各种文档,或者是根据某些需求定制,或者加入了不必须要 的步骤,或者加入容易令人误解的步骤。其实安装是很重要的步骤,只有安装好了,才能谈及下一步。 在本书撰写的时候,选用 Hadoop 的 stable 版安装。 笔者的登录用户名是 brian,大家可以根据自己的登录名更改命令,后面凡是出现 brian 的地方,都用自己的登录 用户名替换掉。 1. 操作系统 操作系统是 Ubuntu 10.04 桌面版。 如果操作系统其他版本的 Ubuntu,在图形界面上会略有一点区别,但对安装影响不大。不同发行版的 Linux 的安 装 Hadoop 的过程基本类似,没太大的差别。 2. Hadoop 的版本 Hadoop 当前的 stable 版是 1.2.1。 3. 下载 Hadoop 3.1 在 Hadoop 的主页上提供了多个下载链接。 http://www.apache.org/dyn/closer.cgi/hadoop/common/ 3.2 任选一个下载站点如下: http://mirror.esocc.com/apache/hadoop/common/ 3.3 选择 stable 版,其实 stable 版就是 1.2.1 版: http://mirror.esocc.com/apache/hadoop/common/stable/ 在这个目录下有多个文件,是针对不同的 linux 发行版的,不需要全部下载。 3.4 下载 hadoop-1.2.1.tar.gz 打开命令终端,下文的命令都是在终端里执行,为方便起见,命令都用引号引起。 将 stable 版本的 Hadoop 命令如下: 的两个文件下载到 ~/setup/hadoop” 和 hadoop-1.2.1.tar.gz.mds “ 目录下,也就是 /home/brian/setup/hadoop”目录, ”
” ” ” ” ” ,那么 ~” 就表示 /home/john”目录。 是下载文件的命令行工具, man wget”有详细说明。 就表示目录 /home/brian”,如果开机时候,登录用户是 john 命令是创建新目录。 -p”参数的意思是,假如 hadoop 目录的上级目录不存在,也创建上级目录。在 3.4.1 “mkdir -p ~/setup/hadoop” mkdir ” “ 终端里执行 man mkdir”,可以看到对这个命令的更详细的解释,按一下 q 键重新返回终端。 在命令终端里, ~ 表示当前登录用户的主目录。比如说,在开机的时候,登录用户是 brian,那么在命 ” 令终端里, ~” 3.4.2 "cd ~/setup/hadoop" cd 就是 change directory 的缩写,切换当前目录。 3.4.3 "wget http://mirror.esocc.com/apache/hadoop/common/stable/hadoop-1.2.1.tar.gz.mds" wget 3.4.4 "wget http://mirror.esocc.com/apache/hadoop/common/stable/hadoop-1.2.1.tar.gz" 3.4.5 "md5sum hadoop-1.2.1.tar.gz" md5sum 命令,计算一个文件的 md5 码。开源社区在提供源码下载的时候,会同时提供下载文件的 md5 码。md5 码是根据文件内容生成的 32 位字符串,不同的文件的 md5 码是不同的,如果下载出错,下载文件的 md5 码 跟正常文件的 md5 码是不一样的,由此检测下载是否正常,只有在极其罕见的情况下,才会出现不同的文件有相同 md5 码。hadoop-1.2.1.tar.gz 是一个比较大的文件,需要检查下载的文件是否完整,执行这个命令之后,会出现形 如"8D 79 04 80 56 17 C1 6C B2 27 D1 CC BF E9 38 5A hadoop-1.2.1.tar.gz"的字符串,前面的一串字符串就是 32 位的 md5 校验码。 3.4.6 "cat hadoop-1.2.1.tar.gz.mds", cat 命令,cat 是 catenate 的缩写,在标准输出上打印文件内容,通常标准输出就是屏幕。这个命令会在屏 幕上打印 hadoop-1.2.1.tar.gz.mds 的内容,也就是一些校验码,在里面找到"md5"这一行,如果跟 md5sum 出来的一 致,则表明下载文件完整的,否则需要重新下载。 ” 4. 安装 Java JDK ” 在这个页面,找 Java SE Development Kit 7u40” 4.1 在这里有 jdk 1.7 的下载 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 如果是 CPU 是 32 位,选择下载 Linux x86,如果 CPU 是 64 位的,选择 Linux x64。一般来说,如果计算机是双 核的,肯定支持 64 位操作系统。或者可以运行 uname -a”命令看一下,在笔者的笔记本上运行这个命令结果如下: Linux brian-i3 2.6.32-51-generic #113-Ubuntu SMP Wed Aug 21 19:46:35 UTC 2013 x86_64 GNU/Linux 后面的 x86_64 表明系统是 64 位的。 Agreement”,接受 License 才能下载。 下载的 jdk 1.7 4.2 "sudo su -" 切换到 root jdk 安装操作是在/usr/local 目录下进行的,用 root 用户更方便。 4.3 "cd /usr/local/lib" 4.4 "tar -zxvf /home/brian/setup/java-jdk-1.7/java-jdk-7u40-linux-i586.tar.gz" tar 是 linux i586.tar.gz 压缩包解压到当前目录下。解压缩完毕之后,执行"ls",能看到当前目录下有一个新目录叫"jdk1.7.0_40" 4.5 配置环境变量: ,存放到 /home/brian/setup/java-jdk-1.7/”目录。 ” 用户,参考 man sudo”。这个命令会切换到 root 用户,也就是最高权限的用户。因为后面要执行的 下载的文件是 java-jdk-7u40-linux-i586.tar.gz”,java jdk 的版本常常有更新,次版本号有可能会比 40 更高一点。 下的打包和解压命令行工具,具体细节可以参考 man tar” ,注意,这里有一个选项,必须选择 Accept License 。这个命令将 java-jdk-7u40-linux- “ ” ” ” ”
分享到:
收藏