随笔分类 - 大数据相关
摘要:搭建过hadoop之后,如何让程序在hadoop集群中分布式运行成了一件令人头痛的事。 可能有人会说在eclipse的类文件中右键点击-》“run on hadoop”不就行了嘛,注意:eclipse中的“run on hadoop”默认只是运行在单机上的,因为要想在集群中让程序分布式运行还要经历上传类文件、分发到各个节点等过程的,一个简单的“run on hadoop”只是启动了本地hadoop类库来运行你的程序而已,在Hadoop JobTracker的web管理页面(http://localhost:50030)上是看不到任何作业信息的,因为你的作业根本就没有运行在集群上。 《H...
阅读全文
摘要:1). 节点间时间同步的问题hbase在集群中启动的时候不知为何会检查集群中各个节点的时间,如果regionserver中的时间与master的时间相差30秒(默认配置),那么这个regionserver就不会被启动,所以我们需要同步集群中各个节点的时间,如果你的集群比较大,那么最好的方法是设置一个ntp服务器同步各个节点的时间,但如果你像我一样只有两三个节点的话,可以手动的修改集群中各节点的时间。需要注意的是,修改时间不仅仅是时分秒的问题,你还需要注意自己所在的时区,这样才能保证时间偏差不会超过30秒,修改时区的方式如下:$sudo dpkg-reconfigure tzdata它会改这两个
阅读全文
摘要:HBase简介HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zook
阅读全文
摘要:由于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集群中如何进行网络拓扑请看下面介绍)。如果客户端本身就是..
阅读全文
摘要:在这一节我们要深入了解Hadoop的FileSystem类——这是与与hadoop的文件系统交互的重要接口。虽然我们只是着重于HDFS的实现,但我们在编码时一般也要注意代码在FileSystem不同子类文件系统之间的可移植性。这是非常有用的,比如说你可以非常方便的直接用同样的代码在你的本地文件系统上进行测试。使用hadoop URL读数据 从hadoop文件系统中读取文件的最简单的方法之一便是使用java.net.URL对象来打开一个欲从中读取数据的流(stream)。通常情况下的编程风格如下:1 InputStream in = null;2 try {3 in = new U...
阅读全文
摘要:当某个数据集大大小超出单个物理机的存储能力时,我们可以考虑使用集群。管理跨网络机器存储的文件系统叫做分布式文件系统(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...
阅读全文
摘要:1 概述本文档目的在于对namenode中各种关键的数据结构进行剖析和解释,以方便更好的对namenode的各种处理逻辑和代码结构进行理解。其中包括对namenode中Namenode和FSNameSystem的程序代码结构,FSDirectory,BlocksMap, CorruptReplicationMap,excessReplicateMap, UnderReplicatedBlocks,PendingReplictiondBlocks等数据结构的介绍。1.1 代码结构1.1.1 NameNode在HDFS中,namenode的服务提供整个HDFS文件系统的namespace管理,块管
阅读全文
摘要:很多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...
阅读全文
摘要:Hadoop Release 0.20.0的API包括了一个全新的API:Context,有时候也称为上下文对象,此对象的设计使得在未来进行扩展更加容易。 后续的hadoop版本--如1.x--已经完成了大部分的API 更新。新的API类型上不兼容以前的API,所以以前的应用程序需要重写才能使新的API发挥其作用 。新的API和旧的API之间有下面几个明显的区别:1. 新的API倾向于使用抽象类,而不是接口,因为这更容易扩展。例如,你可以添加一个方法(附带默认的实现)到一个抽象类而不需修改类之前的实现方法。在新的API中,Mapper和Reducer是抽象类。有关更多抽象类与接口的区别请参见这
阅读全文
摘要:本《hadoop编程笔记》系列主要针对Hadoop编程方面的学习,包括主要类及接口的用法和作用以及编程方法,最佳实践等,如果你想更多的学习Hadoop本身所具有的特性和功能及其附属的生态圈(如Pig,Hive,Hbase等),请参阅另一个笔记系列《Hadoop学习笔记》,俺深知自己能力有限,写的不对的地方还望各位海涵,同时给俺指点一二~~ 本文说明:本文来源于hadoop1.0.4 API。1. MapperMaps are the individual tasks which transform input records into a intermediate records. Th...
阅读全文
摘要:说明:通过本文对MapReduce编程模型循序渐进的说明,你可以对MapReduce工作机制有一个总体上的很好的把握,是来自IBM developerWorks的一篇非常好的文章(转载)!Google 在 2001 年发布图像搜索功能时,只有 2.5 亿索引图像,不到 10 年,这个巨大的搜索功能已经可以检索超过 100 亿个图像了,每分钟有 35 小时的内容上传到 YouTube。据称,Twitter 每天平均处理 5500 万 tweet。今年早些时候,搜索功能每天记录 6 亿条查询记录。这就是我们讨论大数据的意义所在。如此大规模的数据一度仅限于大企业、学校和政府机构 — 这些机构有能力购
阅读全文
摘要:以下为hadoop中使用的常用类说明(来源于hadoop api),排列仅以学习时出现的顺序为参考,不做其他比较:1. Configurationpublic class Configuration extends Object implements Iterable<Map.Entry<String,String>>, WritableProvides access to configuration parameters.ResourcesConfigurations are specified by resources. A resource contains a
阅读全文
摘要:设计理念: 1、超大文件 2、流式数据访问 3、商用普通硬件不适合场景: 1、低时间延迟的数据访问 2、大量的小文件 3、多用户写入,任意修改文件一、HDFS的基本概念1.1、数据块(block)HDFS(HadoopDistributed File System)默认的最基本的存储单位是64M的数据块。和普通文件系统相同的是,HDFS中的文件是被分成64M一块的数据块存储的。不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间。目的:最小化寻址,加快数据传输速度列出文件系统中各个文件有哪些块构成:hadoop fsck / -files -bloc
阅读全文
摘要:注:该文是前一篇博客的很好的中文说明。Avro(读音类似于[ævrə])是Hadoop的一个子项目,由Hadoop的创始人Doug Cutting(也是Lucene,Nutch等项目的创始人,膜拜)牵头开发。Avro是一个数据序列化系统,设计用于支持大批量数据交换的应用。它的主要特点有:支持二进制序列化方式,可以便捷,快速地处理大量数据;动态语言友好,Avro提供的机制使动态语言可以方便地处理Avro数据。 当前市场上有很多类似的序列化系统,如Google的Protocol Buffers, Facebook的Thrift。这些系统反响良好,完全可以满足普通应用的需求。针对重复开发的
阅读全文