HADOOP介绍
1. HADOOP的起源
1.1起源:
Hadoop是Apache Lucene创始人DougCutting创建的,Lucene是一个广泛使用的文本搜索系统库。Hadoop起源于Apache Nutch,一个开源的网络搜索引擎,它本身也是Lucene项目的一部分。为了实现这个搜索引擎算法的平台,后台参考了Google的GFS和MapReduce,实现了Nutch自己的NDFS和MapReduce,并在2006年2月,开发人员将NDFS和MapReduce移出Nutch形成Lucene的一个
子项目,称为Hadoop。
1.2发展历史:
2004年由Doug Cutting和MikeCafarella实现了现在HDFS和MapReduce的最初版本。
2005年12月 Nutch移植到新框架,Hadoop在20个节点上稳定运行。
2006年2月 ApacheHadoop项目正式启动以支持MapReduce和HDFS的独立发展。
2006年4月在188个节点上(每个节点10GB)运行排序测试集需要47.9小时。
2006年5月 Yahoo!建立了一个300个节点的Hadoop研究集群。
2007年研究集群增加到900个节点,在900个节点上运行1TB排序测试仅需209秒,成为世界最快。
2008年研究集群每天装载10TB数据。
2009年 17个集群总共24000台机器,赢得每分钟排序,59秒内排序500GB(在1400个节点上)和173分钟内排序100TB数据(在3400个节点上)。
2. HADOOP的原理
HADOOP的核心是HDFS和MapReduce,它利用HDFS实现数据的存储,而Mapreduce实现分析处理。
2.1 HDFS工作原理:
HDFS集群中有两类节点,并以管理者-工作模式运行,即一个namenode(管理者)和多个datanode(工作者)。namenode管理文件系统的命名空间。它维护着文件系统树及整棵树内所有的文件和目录。这些信息以两个文件形式永久保存在本
地磁盘上:命名空间镜像文件和编辑日志文件。namenode也记录着每个文件中
各个块所在的数据节点信息,但它并不永久保存块的位置信息,因为这些信息
会在系统启动时由数据节点重建。客户端(client)代表用户通过与namenode和datanode交互来访问整个文件系统。客户端提供一个类似于POSIX(可移植操作系统界面)的文件系统接口,因此用户在编程时无需知道namenode和datanode也可以实现其功能。datanode是文件系统的工作节点。它们根据需要存储并检索数据块(受客户端或namenode调度),并且定期向namenode发送它们所存储的块的列表。没有namenode,文件系统将无法使用。事实上,如果运行namenode服务的机器毁坏,文件系统上所有的文件将会丢失,因为我们不知道如何根据datanode的块来重建文件。因此,对namenode实现容错非常重要,HADOOP为此提供了两种机制。第一种机制是备份那些组成文件系统元数据持久状态的文件。HADOOP可以通过配置使namenode在多个文件系统上保存元数据的持久状态,这些写操作是实时同步的,是原子操作。一般的配置是,将持久状态写入本地磁盘的同时,写入一个远程挂载的网络文件系统(NFS)。另一种可行的方法是运行一个辅助namenode,但它不能用作namenode。这个辅助namenode的重要作用是定期通过编辑日志合并命名空间镜像,以防止编辑日志过大。这个辅助namenode一般在另一台单独的物理机器上运行,因为它需要占用大量的CPU时间与namenode相同容量的内存来执行合并操作。它会保存合并后的命名空间镜像的副本,并在namenode发生故障时启用。
2.2MapReduce工作原理:
MapReduce 是大规模数据(TB 级)计算的利器,Map 和Reduce 是它的主要思想,来源于函数式编程语言,它的原理如下图所示:Map负责将数据打散,Reduce负责对数据进行聚集,用户只需要实现map 和reduce 两个接口,即可完成TB级数据的计算,常见的应用包括:日志分析和数据挖掘等数据分析应用。另外,还可用于科学数据计算,如圆周率PI 的计算等。Hadoop MapReduce的实现也采用了Master/Slave 结构。Master 叫做JobTracker,而Slave 叫做TaskTracker。用户提交的计算叫做Job,每一个Job会被划分成若干个Tasks。JobTracker负责Job 和Tasks 的调度,而TaskTracker负责执行Tasks。
3. HADOOP的优缺点
3.1 优点:
1. 高可靠性:Hadoop按位存储和处理数据的能力值得人们信赖。
2. 高效性:HADOOP的工作原理在于将数据拆分成片,并将每个“分片”分配到特定的集群节点上进行分析,每个数据分片都是在独立的集群节点上进行单独处理的。同时,Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
3. 高扩展性:Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。
4. 高容错性:Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。
5. 低成本:与一体机、商用数据仓库以及QlikView、YonghongZ-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低。同时, Hadoop设计对应急需求比较低,只须运行在低廉的商用硬件集群上,而无需在昂贵的高可用性机器上。
3.2 缺点:
1. 不适合低延迟数据访问:如果要处理一些用户要求时间比较短的低延迟应用请求,则HDFS不适合。HDFS是为了处理大型数据集分析任务的,主要是为达到高的数据吞吐量而设计的,这就可能要求以高延迟作为代价。
改进策略:对于那些有低延时要求的应用程序,HBase是一个更好的选择,通过上层数据管理项目尽可能地弥补这个不足。在性能上有了很大的提升,它的口号是goes real time。使用缓存或多个master设计可以降低Clinet的数据请求压力,以减少延时。
2. 无法高效存储大量的小文件:因为NameNode把文件系统的元数据放置在内存中,所有文件系统所能容纳的文件数目是由NameNode的内存大小来决定。还有一个问题就是,因为MapTask的数量是由Splits来决定的,所以用MR处理大量的小文件时,就会产生过多的MapTask,线程管理开销将会增加作业时间。当Hadoop处理很多小文件(文件大小小于HDFS中Block大小)的时候,由于FileInputFormat不会对小文件进行划分,所以每一个小文件都会被当做一个Split并分配一个Map任务,导致效率底下。例如:一个1G的文件,会被划分成16个64MB的Split,并分配16个Map任务处理,而10000个100Kb的文件会被10000个Map任务处理。
改进策略:要想让HDFS能处理好小文件,有不少方法。利用SequenceFile、MapFile、Har等方式归档小文件,这个方法的原理就是把小文件归档起来管理,HBase就是基于此的。
3. 不支持多用户写入及任意修改文件:在HDFS的一个文件中只有一个写入者,而且写操作只能在文件末尾完成,即只能执行追加操作,目前HDFS还不支持多个用户对同一文件的写操作,以及在文件任意位置进行修改。
4. HADOOP的操作应用
1、查看现有的HDFS上的目录
hadoop dfs -ls 目录
例:hadoop dfs -ls /tmp。查看HDFS上tmp目录下的文件
2、创建、查看、删除目录
1.在/usr目录下再新建一个test目录
2.进入到/usr目录下 cd /usr
3.创建目录 mkdir /usr
4.查看目录是否创建成功 ls
5.删除目录 rmdirtest
3、创建、查看、删除文件
1.创建一个文件 vi 文件名。如: vitest
2.按i进入编辑状态按ESC结束编辑输入:wq保存退出。
3.查看创建的文件及其内容cat 文件名。如:cat test。
4.删除文件。rm 文件名。如:rm test。
4.上传一个文件到HDFS中
命令格式:hdfs dfs-put linux目录下的文件 hdfs的路径
如:hadoop dfs-put /usr/test /tmp/test01 实现的功能把usr目录下的test文件上传到HDFS上并更名为test01
5.查看上传到HDFS中的文件
命令格式:hadoophdfs dfs -cat HDFS上的目录
如查看上一步上传的文件:hadoophdfs dfs -cat /tmp/test01
6.将HDFS中的文件复制到本地系统中
命令格式:hadoopdfs -get HDFS上的文件目录 LINUX上的目录
例:下载已经传上去的test01文件到usr目录下。 hadoopdfs -get /tmp/test01 /usr.
7.删除HDFS下的文档
命令格式:hadoopdfs -rmr HDFS上的文件路径
例:hadoop dfs-rmr /tmp/test01
8.查看HDFS的基本统计信息
命令格式:hadoopdfsadmin -report
9.退出安全模式
命令格式:hadoopdfsadmin -safemode leave
10.进入安全模式
命令格式:hadoopdfsadmin -safemode enter
11.查看版本信息
命令格式:hadoop dfsadmin -report
5. HADOOP的应用情景
Hadoop集群是一种专门为存储和分析海量非结构化数据而设计的特定类型的集群。本质上,它是一种计算集群,即将数据分析的工作分配到多个集群节点上,从而并行处理数据。Hadoop集群最大的好处在于它非常适合大数据分析。大数据一般都是分布广泛并且是非结构化的。而Hadoop非常适合这类数据是因为,Hadoop的工作原理在于将数据拆分成片,并将每个“分片”分配到特定的集群节点上进行分析。数据不必均匀分布,因为每个数据分片都是在独立的集群节点上进行单独处理的。
基于上述原因,HADOOP的应用情景主要是一些基于大数据的应用情景:比如数据挖掘,日志分析,推荐系统等。
声明:本文内容来自网络整理