Hadoop 总体概述

  • 格式:docx
  • 大小:502.19 KB
  • 文档页数:5

Hadoop总体概述
Hadoop是一个分布式系统基础架构,由Apache基金会开发。

用户可以在不了解分布式底层细节的情况下,开发分布式程序。

充分利用集群的威力高速运算和存储
Hadoop起源于Google的集群系统, Google的数据中心使用廉价Linux PC机组成集群,在上面运行各种应用。

即使是分布式开发的新手也可以迅速使用Google的基础设施。

其核心组件有3个:第一个就是,GFS(Google File System),一个分布式文件系统,隐藏下层负载均衡,冗余复制等细节,对上层程序提供一个统一的文件系统API接口;第二个是 MapReduce,Google发现大多数分布式运算可以抽象为MapReduce操作。

Map是把输入Input分解成中间的Key/Value 对,Reduce把Key/Value合成最终输出Output。

这两个函数由程序员提供给系统,下层设施把Map和Reduce操作分布在集群上运行,并把结果存储在GFS上;第三个,BigTable,一个大型的分布式数据库,这个数据库不是关系式的数据库,而是一个巨大的表格,用来存储结构化的数据。

而Hadoop就是Google集群系统的一个开源实现,是一个项目总称。

主要是由HDFS、MapReduce和Hbase 组成。

其中HDFS是Google File System(GFS)的开源实现; MapReduce是Google MapReduce的开源实现; HBase是Google BigTable的开源实现。

这个分布式框架很有创造性,而且有极大的扩展性,使得Google在系统吞吐量上有很大的竞争力。

因此Apache基金会用Java实现了一个开源版本,支持Fedora、Ubuntu等Linux平台。

目前Hadoop受到Yahoo的支持,有Yahoo员工长期工作在项目上,而且Yahoo内部也准备使用Hadoop代替原来的的分布式系统。

Hadoop实现了HDFS文件系统和MapRecue,使Hadoop成为了一个分布式的计算平台。

用户只要MapReduceBase,提供分别实现Map和Reduce的两个类,并注册Job即可自动分布式运行。

因此,Hadoop并不仅仅是一个用于存储的分布式文件系统,而是设计用来在由通用计算设备组成的大型集群上执行分布式应用的框架。

Hadoop核心配置文件
1. 在conf/hadoop-env.sh文件中增加:export JAVA_HOME=/home/Java/jdk1.6
2. 在conf/core-site.xml文件中增加如下内容:
<!-- - 这是一个描述集群中NameNode结点的URI(包括协议、主机名称、端口号),集群里面的每一台机器都需要知道NameNode的地址。

DataNode结点会先在
NameNode上注册,这样它们的数据才可以被使用。

独立的客户端程序通过这个URI跟DataNode 交互,以取得文件的块列表。

-->
<property>
<name></name>
<value>hdfs://localhost:9000</value>
</property>
<!—hadoop.tmp.dir 是hadoop文件系统依赖的基础配置,很多路径都依赖它。

如果hdfs-
site.xml中不配置namenode和datanode的存放位置,默认就放在这个路径中--> <property>
<name>hadoop.tmp.dir</name>
<value>/home/hdfs/tmp</value>
</property>
3. 在conf/hdfs-site.xml中增加如下内容:
<!-- dfs.replication -它决定着系统里面的文件块的数据备份个数。

对于一个实际的应用,
它应该被设为3(这个数字并没有上限,但更多的备份可能并没有作用,而且会占用更多的空间)。

少于三个的备份,可能会影响到数据的可靠性(系统故障时,也许会造成数据丢失)-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!-- dfs.data.dir- 这是DataNode结点被指定要存储数据的本地文件系统路径。

DataNode结点上的这个路径没有必要完全相同,因为每台机器的环境很可能是不一样的。

但如果每台机器上的这个路径都是统一配置的话,会使工作变得简单一些。

默认的情况下,它的值h adoop.tmp.dir, 这个路径只能用于测试的目的,因为,它很可能会丢失掉一些数据。

所以,这个值最好还是被覆盖。

.dir- 这是NameNode结点存储hadoop文件系统信息的本地系统路径。

这个值只对NameNode 有效,DataNode并不需要使用到它。

上面对于/temp类型的警告,同样也适用于这里。

在实际应用中,它最好被覆盖掉。

-->
<property>
<name>.dir</name>
<value>/home/hdfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/hdfs/data</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
4. 在conf/mapred-site.xml中增加如下内容:
<!--mapred.job.tracker -JobTracker的主机(或者IP)和端口。

-->
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
Hadoop核心进程
一般如果正常启动hadoop,我们可以在master上通过jps命令看到以下5个daemons:
[root@master ~]# jps
31144 Jps
19803 SecondaryNameNode
19994 TaskTracker
19571 NameNode
19672 DataNode
19887 JobTracker
下面依次介绍这些进程:
1. NameNode
它是Hadoop 中的主服务器,管理文件系统名称空间和对集群中存储的文件的访问。

2. SecondaryNameNode
它不是 namenode 的冗余守护进程,而是提供周期检查点和清理任务。

出于对可扩展性和容错性等考虑,我们一般将SecondaryNameNode运行在一台非NameNode的机器上。

3. DataNode
它负责管理连接到节点的存储(一个集群中可以有多个节点)。

每个存储数据的节点运行一个 datanode 守护进程。

4. JobTracker和TaskTracker
JobTracker负责调度DataNode上的工作。

每个DataNode有一个TaskTracker,它们执行实际工作。

JobTracker和TaskTracker采用主-从形式,JobTracker跨DataNode分发工作,而TaskTracker执行任务。

JobTracker还检查请求的工作,如果一个DataNode由于某种原因失败,JobTracker会重新调度以前的任务。