hadoop 分布式示例

安装完全分布式Hadoop

1 安装准备工作

本安装示例将使用三台主机(RHEL 5.8 32bit)来实现,其规划如下所示:

IP地址 主机名 运行的进程或扮演的角色

172.16.100.11 master.magedu.com NameNode,JobTracker

172.16.100.12 datanode.magedu.com DataNode,TaskTracker

172.16.100.13 snn.magedu.com SecondaryNameNode

用到的应用程序:

JDK: jdk-7u5-linux-i586.rpm

Hadoop:hadoop-0.20.2-cdh3u5.tar.gz

先在集群中的每个节点上建立运行hadoop进程的用户hadoop并给其设定密码。

# useradd hadoop

# echo "password" | passwd --stdin hadoop

设置集群各节点的/etc/hosts文件内容如下:

172.16.100.11 master.magedu.com master

172.16.100.12 datanode.magedu.com datanode

172.16.100.13 snn.magedu.com snn

而后配置master节点的hadoop用户能够以基于密钥的验正方式登录其它各节点,以便启动进程并执行监控等额外的管理工作。以下命令在master节点上执行即可。

[[email protected] ~]# su - hadoop

[[email protected] ~]$ ssh-keygen -t rsa -P ‘‘

[[email protected] ~]$ ssh-copy-id -i .ssh/id_rsa.pub [email protected]

[[email protected] ~]$ ssh-copy-id -i .ssh/id_rsa.pub [email protected]

2 安装JDK

以下操作需要在每个节点上执行一遍。

编辑 vi /etc/profile.d/java.sh,在文件中添加如下内容:

JAVA_HOME=/usr/java/latest/

PATH=$JAVA_HOME/bin:$PATH

export JAVA_HOME PATH

切换至hadoop用户,并执行如下命令测试jdk环境配置是否就绪。

# su - hadoop

$ java -version

java version "1.7.0_05"

Java(TM) SE Runtime Environment (build 1.7.0_05-b05)

Java HotSpot(TM) Client VM (build 23.1-b03, mixed mode, sharing)

3 安装Hadoop

集群中的每个节点均需要安装Hadoop,以根据配置或需要启动相应的进程等,因此,以下安装过程需要在每个节点上分别执行。

# tar xf hadoop-0.20.2-cdh3u5.tar.gz -C /usr/local

# chown -R hadoop:hadoop /usr/local/hadoop-0.20.2-cdh3u5

# ln -sv /usr/local/hadoop-0.20.2-cdh3u5 /usr/local/hadoop

然后编辑/etc/profile,设定HADOOP_HOME环境变量的值为hadoop的解压目录,并让其永久有效。编辑/etc/profile.d/hadoop.sh,添加如下内容:

HADOOP_HOME=/usr/local/hadoop

PATH=$HADOOP_HOME/bin:$PATH

export HADOOP_BASE PATH

切换至hadoop用户,并执行如下命令测试jdk环境配置是否就绪。

$ hadoop version

Hadoop 0.20.2-cdh3u5

Subversion git://ubuntu-slave02/var/lib/jenkins/workspace/CDH3u5-Full-RC/build/cdh3/hadoop20/0.20.2-cdh3u5/source -r 30233064aaf5f2492bc687d61d72956876102109

Compiled by jenkins on Fri Oct  5 17:21:34 PDT 2012

From source with checksum de1770d69aa93107a133657faa8ef467

4 配置Hadoop

集群中的每个节点上Hadoop的配置均相同,Hadoop在启动时会根据配置文件判定当前节点的角色及所需要运行的进程等,因此,下述的配置文件修改需要在每一个节点上运行。

(1) 修改/usr/local/hadoop/conf/core-site.xml内容如下

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

<property>

<name>fs.default.name</name>

<value>hdfs://master.magedu.com:8020</value>

<final>true</final>

<description>The name of the default file system. A URI whose scheme and authority determine the FileSystem implimentation.</description>

</property>

</configuration>

(2)修改/usr/local/hadoop/conf/mapred-site.xml文件为如下内容

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

<property>

<name>mapred.job.tracker</name>

<value>master.magedu.com:8021</value>

<final>true</final>

<description>The host and port that the MapReduce JobTracker runs at. </description>

</property>

</configuration>

(3) 修改/usr/local/hadoop/conf/hdfs-site.xml文件为如下内容

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

<property>

<name>dfs.replication</name>

<value>1</value>

<description>The actual number of replications can be specified when the file is created.</description>

</property>

<property>

<name>dfs.data.dir</name>

<value>/hadoop/data</value>

<final>ture</final>

<description>The directories where the datanode stores blocks.</description>

</property>

<property>

<name>dfs.name.dir</name>

<value>/hadoop/name</value>

<final>ture</final>

<description>The directories where the namenode stores its persistent matadata.</description>

</property>

<property>

<name>fs.checkpoint.dir</name>

<value>/hadoop/namesecondary</value>

<final>ture</final>

<description>The directories where the secondarynamenode stores checkpoints.</description>

</property>

</configuration>

说明:根据此配置,需要事先在各节点上创建/hadoop/,并让hadoop用户对其具有全部权限。也可以不指定最后三个属性,让Hadoop为其使用默认位置。

(4)修改/usr/local/hadoop/conf/masters文件,指定SecondaryNameNode节点的主机名或IP地址,本示例中为如下内容:

snn.magedu.com

(5)修改/usr/local/hadoop/conf/slaves文件,指定各DataNode节点的主机名或IP地址,本示例中只有一个DataNode:

datanode.magedu.com

(6)初始化数据节点,在master上执行如下命令

$ hadoop namenode -format

5 启动Hadoop

在master节点上执行Hadoop的start-all.sh脚本即可实现启动整个集群。

[[email protected] ~]$ start-all.sh

其输出内容如下所示:

starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-master.magedu.com.out

datanode.magedu.com: starting datanode, logging to /usr/local/hadoop/logs/hadoop-hadoop-datanode-datanode.magedu.com.out

snn.magedu.com: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-secondarynamenode-node3.magedu.com.out

starting jobtracker, logging to /usr/local/hadoop/logs/hadoop-hadoop-jobtracker-master.magedu.com.out

datanode.magedu.com: starting tasktracker, logging to /usr/local/hadoop/logs/hadoop-hadoop-tasktracker-datanode.magedu.com.out

如果要停止Hadoop的各进程,则使用stop-all.sh脚本即可。

不过,在一个较大规模的集群环境中,NameNode节点需要在内在中维护整个名称空间中的文件和块的元数据信息,因此,其有着较大的内在需求;而在运行着众多MapReduce任务的环境中,JobTracker节点会用到大量的内存和CPU资源,因此,此场景中通常需要将NameNode和JobTracker运行在不同的物理主机上,这也意味着HDFS集群的主从节点与MapReduce的主从节点将分属于不同的拓扑。启动HDFS的主从进程则需要在NameNode节点上使用start-dfs.sh脚本,而启动MapReduce的各进程则需要在JobTracker节点上通过start-mapred.sh脚本进行。这两个脚本事实上都是通过hadoop-daemons.sh脚本来完成进程启动的。

环境设定

5.2内存设定

默认情况下,Hadoop为每个进程分配1000MB(1GB)的内存空间,但这可以在hadoop-env.sh文件中通过HADOOP_HEAPSIZE环境变量进行调整。此外,TaskTracker会为worker主机上的每个map或reduce任务的分别启动一个JVM,这些JVM都需要在进程的HEAP中申请用到内存空间。每个TaskTracker可同时运行的map任务总数和reduce任务总数分别由mapred.tasktracker.map.tasks.maximum和mapred.tasktracker.reduce.tasks.maximum这两个属性进行指定,而它们的默认值都为2。用于运行map或reduce任务的JVM可用内存大小可由mapred.child.java.opts属性指定,其默认设定为-Xmx200m,意指每个任务可以使用最多200MB的内存空间。由此算来,每个worker主机默认将使用2800MB的内存空间。

除了使用mapred.child.java.opts为每个JVM为map任务和reduce任务设定相同可用内存属性之外,还可以使用mapreduce.map.java.opts和mapreduce.reduce.java.opts分别设定map任务和reduce任务的JVM可用内存的属性。

在TaskTracker上可同时运行的任务数取决于其主机的CPU数量。由于MapReduce作业大多为I/O密集型应用,因此,让同行运行任务数多于CPU的个数可以提高资源利用效率,其可以多出的数量取决于实际的作业本身。这里有一个通用法则,即让同行运行的作业数量为CPU数量的1至2之间的数字倍数,比如作业数1.5倍于CPU数。与此同时,一定要注意系统上可用内存的数量是否符合任务数的设定,比如在一个4颗CPU的DataNode上,可以设定mapred.tasktracker.map.tasks.maximum和mapred.tasktrackers.reduce.tasks.maximum属性的值都为3(不是4个,因为datanode和tasktracker都是运行的任务,它们要占去两个名额),假设每个任务的可用内存为400MB,那么这些作业总共需要的内存数为6*400MB,即2.4GB,考虑到操作系统及其它进程所需用的内存等,这个数值可能需要更大。

在hadoop-env.sh文件中,可以使用HADOOP_NAMENODE_OPTS、HADOOP_SECONDARYNAMENODE_OPTS、HADOOP_DATANODE_OPTS、HADOOP_BALANCER_OPTS、HADOOP_JOBTRACKER_OPTS变量分别为对应的5类进程设定运行参数,比如可以使用HADOOP_NAMENODE_OPTS单独设定namenode进程使用不的HEAPSIZE大小。

5.3 Hadoop日志

Hadoop的系统日志默认存放于其安装目录中的logs子目录,如果需要自定义其存储位置,可以在hadoop-env.sh中设定HADOOP_LOG_DIR环境变量来指定新位置。Hadoop的每个进程均会生成两个日志文件,一个是由log4j生成的并以.log为后缀的日志文件,另一个是以.out为后缀的日志文件,它负责记录发往标准输出和错误输出的信息。

大多数应用的日志住处均发送至.log类的文件中,因此在故障排查时其也是最需要关注的日志文件。然后,Hadoop为log4j提供的默认配置中,其每天会自动做一次日志滚动,并且永远不会删除日志文件,因此,管理员需要手动归档并删除老旧的日志文件。.out类的日志文件中很少出现信息,而且,Hadoop的每次重启都会导致日志自动滚动,并只会保存最至5次的滚动日志文件版本。

除了后缀不同之外,这两种日志文件的名称格式是一样的,默认均为hadoop-<username>-<processname>-<hostname>,比如hadoop-hadoop-namenode-master.magedu.com.log。可以在hadoop-env.sh文件中使用HADOOP_IDENT_STRING变量将日志文件名称格式中的<username>限制为所需要的字符串。

5.4 SSH相关的设定

Hadoop运行时,它利用控制脚本(如start-dfs.sh)在master节点上基于SSH远程管理各worker节点上的进程,因此,为SSH设定合适的参数将用助于Hadoop的健壮性,如合适的连接超时时间(ConnectTimeout)将有助于Hadoop避免被失效的节点阻塞,将StrictHostKeyChecking设定为no将能够使得master自动添加各节点的主机密钥等。

Hadoop的控制脚本可以使用rsync将配置文件同步至集群中的其它节点,默认为禁用。如果需要,可以通过HADOOP_MASTER变量将其启用。不过,由于各点上HADOOP_MASTER默认均为禁用,因此,其第一次配置还是需要其它的方式进行。

其它各SSH相关参数说明及其用法在hadoop-env.sh中均有详细注释,因此,这里不再给出进一步信息。

Hadoop的其它常用属性

5.5 缓冲大小(Buffer size)

Hadoop为其I/O操作使用了4KB的缓冲区容量,这个值是相当保守的。在当今的硬件和操作系统上,可以安全地增大此值以提高系统性能;一般说来,128KB(131072 bytes)是比较理想的设定。如果需要,可以在core-site.xml中通过io.file.buffer.size属性进行定义。

5.6 HDFS块大小

HDFS默认块大小为64MB,然而128MB(134,217,728 bytes)是更常用的设定,甚至有些集群中使用了256MB。较大的块可以有效降低NameNode上的内存压力,并能支持使用更多的数据量。如果需要,可以在hdfs-site.xml文件中使用dfs.block.size属性进行定义。

5.7 慢启动Reduce任务

在一个作业中,默认情况下调度器会在map任务完成5%时开始调度启动当前作业的reduce任务。对于较大的作业来说,过早地启动reduce会导致集群性能的下降。在mapred-site.xml文件中为mapred.reduce.slowstart.completed.maps属性来设定一个更大的值(比如0.8,即80%)可以在更晚的时间点启动reduce作业。

时间: 2024-11-01 23:39:02

hadoop 分布式示例的相关文章

深入理解HDFS:Hadoop分布式文件系统

文本详细介绍了HDFS中的许多概念,对于理解Hadoop分布式文件系统很有帮助. 1. 介绍 在现代的企业环境中,单机容量往往无法存储大量数据,需要跨机器存储.统一管理分布在集群上的文件系统称为分布式文件系统.而一旦在系统中,引入网络,就不可避免地引入了所有网络编程的复杂性,例如挑战之一是如果保证在节点不可用的时候数据不丢失. 传统的网络文件系统(NFS)虽然也称为分布式文件系统,但是其存在一些限制.由于NFS中,文件是存储在单机上,因此无法提供可靠性保证,当很多客户端同时访问NFS Serve

Hadoop分布式平台的大数据解决方案

讲师:迪伦 对这个课程有兴趣的可以加我qq2059055336联系我 1 课程背景 GREENPLUM适用场景 Greenplum的架构采用了MPP(大规模并行处理).在 MPP 系统中,每个 SMP 节点也可以运行自己的操作系统.数据库等,它的特点主要就是查询速度快,数据装载速度快,批量DML处理快.而且性能可以随着硬件的添加,呈线性增加,拥有非常良好的可扩展性.因此,它主要适用于面向分析的应用.比如构建企业级ODS/EDW,或者数据集市等等. GREENPLUM运行的平台 GREENPLUM

Hadoop分布式文件系统(HDFS)设计

Hadoop分布式文件系统是设计初衷是可靠的存储大数据集,并且使应用程序高带宽的流式处理存储的大数据集.在一个成千个server的大集群中,每个server不仅要管理存储的这些数据,而且可以执行应用程序任务.通过分布式存储和在各个server间交叉运算,集群和存储可以按需动态经济增长.以下的设计原则和经验是根据yahoo通过HDFS管理的40PB得来的. 1. HDFS简介 HDFS是一个分布式文件系统,并且为MapReduce分布式算法提供了一分析和传输大数据的框架.HDFS使用java编写,

hadoop分布式架构和设计

引言 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时,它和其他的分布式文件系统的区别也是很明显的.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用.HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的.HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的.HDFS是A

【HDFS】Hadoop分布式文件系统:架构和设计

引言 前提和设计目标 硬件错误 流式数据访问 大规模数据集 简单的一致性模型 "移动计算比移动数据更划算" 异构软硬件平台间的可移植性 Namenode 和 Datanode 文件系统的名字空间 (namespace) 数据复制 副本存放: 最最开始的一步 副本选择 安全模式 文件系统元数据的持久化 通讯协议 健壮性 磁盘数据错误,心跳检测和重新复制 集群均衡 数据完整性 元数据磁盘错误 快照 数据组织 数据块 Staging 流水线复制 可访问性 DFSShell DFSAdmin

Hadoop分布式文件系统:架构和设计

引言 前提和设计目标 硬件错误 流式数据访问 大规模数据集 简单的一致性模型 “移动计算比移动数据更划算” 异构软硬件平台间的可移植性 Namenode 和 Datanode 文件系统的名字空间 (namespace) 数据复制 副本存放: 最最开始的一步 副本选择 安全模式 文件系统元数据的持久化 通讯协议 健壮性 磁盘数据错误,心跳检测和重新复制 集群均衡 数据完整性 元数据磁盘错误 快照 数据组织 数据块 Staging 流水线复制 可访问性 DFSShell DFSAdmin 浏览器接口

Hadoop 分布式文件系统:架构和设计

引言 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时,它和其他的分布式文件系统的区别也是很明显的.HDFS是一个高 度容错性的系统,适合部署在廉价的机器上.HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用.HDFS放宽了一部分POSIX约束,来实 现流式读取文件系统数据的目的.HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的.HDFS

【官方文档】Hadoop分布式文件系统:架构和设计

http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html 引言 前提和设计目标 硬件错误 流式数据访问 大规模数据集 简单的一致性模型 “移动计算比移动数据更划算” 异构软硬件平台间的可移植性 Namenode 和 Datanode 文件系统的名字空间 (namespace) 数据复制 副本存放: 最最开始的一步 副本选择 安全模式 文件系统元数据的持久化 通讯协议 健壮性 磁盘数据错误,心跳检测和重新复制 集群均衡 数据完整性 元数据磁盘

【翻译笔记】Hadoop分布式文件系统

摘要 Hadoop分布式文件系统(HDFS)设计用来可靠的存储超大数据集,同时以高速带宽将数据集传输给用户应用. 在一个超大集群中,数以千计的服务器直接接触存储器和执行用户应用任务.通过许多服务器的分布式存储和计算,资源随需求增长的时候仍然可以保持经济性. 我们解释了HDFS架构,同时介绍了我们在雅虎使用HDFS去管理25PB企业数据的经验. 1.介绍和相关工作 Hadoop的一个重要特点是将数据和计算能力划分为小部分,通过许多(数千)主机运行,这些主机并行计算得到他们的结果.一个Hadoop集