随笔分类 - Hadoop学习笔记
摘要:搭建过hadoop之后,如何让程序在hadoop集群中分布式运行成了一件令人头痛的事。 可能有人会说在eclipse的类文件中右键点击-》“run on hadoop”不就行了嘛,注意:eclipse中的“run on hadoop”默认只是运行在单机上的,因为要想在集群中让程序分布式运行还要经历上传类文件、分发到各个节点等过程的,一个简单的“run on hadoop”只是启动了本地hadoop类库来运行你的程序而已,在Hadoop JobTracker的web管理页面(http://localhost:50030)上是看不到任何作业信息的,因为你的作业根本就没有运行在集群上。 《H...
阅读全文
摘要:由于hadoop主要是部署和应用在linux环境中的,但是目前鄙人自知能力有限,还无法完全把工作环境转移到linux中去(当然还有点小私心啦,windows下那么多好用的程序到linux下用不了还真有点心疼——比如说快播,O(∩_∩)O~),于是便想着用eclipse来远程连接hadoop进行开发,摸索了一番,下面是其步骤: 1. 首先把hadoop-eclipse-plugin-1.0.4.jar(具体版本视你的hadoop版本而定)放到eclipse安装目录的plugins文件夹中,如果重新打开eclipse后看到有如下视图,则说明你的hadoop插件已经安装成功了: 其中的“h...
阅读全文
摘要:《hadoop:the definitive guide 3th》中的例子默认提供了一种编译和构建jar包方法——maven,如果没有maven你会发现编译测试随书的源码会非常的麻烦(至少在命令行下),当然你也可以使用eclipse导入随书的源码再自己一个个的添加依赖性jar包(恐怕也不太容易)。不过还好有非常好的开源的软件项目管理工具来帮助我们做这些无关于程序本身设计与架构的琐碎的工作,那就是maven! 如果你对maven还不太了解,可以参看这里。 《hadoop:the definitive guide 3th》的源码包可以从github中下载到,如下图所示: 下载完后解压...
阅读全文
摘要:以前我们介绍的访问HDFS的方法都是单线程的,Hadoop中有一个工具可以让我们并行的拷贝大量数据文件,这个工具就是distcp。 distcp的典型应用就是在两个HDFS集群中拷贝文件,如果两个集群使用的Hadoop版本相同,可以使用hdfs标识符: % hadoop distcp hdfs://namenode1/foo hdfs://namenode2/bar 这条命令会把第一个集群(namenode为命令中指定的namenode1)中的/foo目录拷贝到第二个集群中的/bar目录下,于是在第二个集群中就得到了/bar/foo这样的目录结构,我们也可以指定多个拷贝源,但拷贝...
阅读全文
摘要:读文件 读文件时内部工作机制参看下图: 客户端通过调用FileSystem对象(对应于HDFS文件系统,调用DistributedFileSystem对象)的open()方法来打开文件(也即图中的第一步),DistributedFileSystem通过RPC(Remote Procedure Call)调用询问NameNode来得到此文件最开始几个block的文件位置(第二步)。对每一个block来说,namenode返回拥有此block备份的所有namenode的地址信息(按集群的拓扑网络中与客户端距离的远近排序,关于在Hadoop集群中如何进行网络拓扑请看下面介绍)。如果客户端本身就是..
阅读全文
摘要:当某个数据集大大小超出单个物理机的存储能力时,我们可以考虑使用集群。管理跨网络机器存储的文件系统叫做分布式文件系统(Distributed FileSystem)。随着多节点的引入,相应的问题也就出现了,例如其中最重要的一个问题就是如何保证在某个节点失败的情况下数据不会丢失。Hadoop中有一个核心子项目HDFS(Hadoop Distributed FileSystem)就是用来管理集群的存储问题的,当然在Hadoop中不仅仅只能使用HDFS,Hadoop中有一个通用的抽象的文件系统概念,这样可以使Hadoop在不同种类的文件系统下运作,例如Hadoop可以与Amazon的S3文件系统集..
阅读全文
摘要:Hadoop为MapReduce提供了一个允许你使用除了java以外的语言编写map,reduce函数的API:Hadoop Streaming使用标准流(standard streams)作为Hadoop和应用程序之间传输数据的接口。所以你可以使用任何语言编写map,reduce函数,只要它能够从标准输入流(stdin)中读入数据,以及向标准输出流(stdout)中写输出数据就行。 Streaming本质上就非常适合处理文本数据。Map输入数据通过stdin传输到map函数中,map函数再一行一行的处理这些输入数据,然后被处理过的以tab分割的键值对被写到stdout中去,reduce...
阅读全文
摘要:很多MapReduce程序受限于集群上可用的带宽,所以它会尽力最小化需要在map和reduce任务之间传输的中间数据。Hadoop允许用户声明一个combiner function来处理map的输出,同时把自己对map的处理结果作为reduce的输入。因为combiner function本身只是一种优化,hadoop并不保证对于某个map输出,这个方法会被调用多少次。换句话说,不管combiner function被调用多少次,对应的reduce输出结果都应该是一样的。 下面我们以学习笔记(一)中的例子来加以说明,假设1950年的天气数据读取是由两个map完成的,其中第一个map的输出...
阅读全文
摘要:一个MapReduce作业是一个用户希望被执行的工作单元:它包括输入数据,MapReduce程序和配置信息。Hadoop通过把作业分成任务(tasks,分为map tasks 和reduce tasks两种)的形式来运行该作业。 有两种节点用来控制每个作业的执行:jobtracker通过把tasks分发到各个tasktrackers来运行,并协调系统上运行的所有作业。tasktrackers运行任务,并向jobtracker报告进度信息,jobtracker保持了每个作业的全局进度。如果一个任务失败了,jobtracker会把这个任务重新分发到另一个tasktracker上(也就是说,j...
阅读全文
摘要:本《hadoop学习笔记》系列是在《hadoop: the definitive guide 3th》的基础上通过网上额外搜集资料和查看hadoop的API再加上自己的实践方面的理解编写而成的,主要针对hadoop的特性和功能学习以及Hadoop生态圈中的其他工具(如Pig,Hive,Hbase,Avro等等)。另外设计到hadoop编程方面的请查阅另一个笔记系列:《Hadoop编程笔记》。如果有同学同时也在研究这本书,欢迎沟通交流,在下能力有限,还望各路大神看到有不对的地方加以指正~~(本系列学习笔记还正在整理中,以后会陆续发布)。 本书第二章以一个很浅显的例子为大家提供了hadoop...
阅读全文