[hadoop读书笔记] 第九章 构建Hadoop集群

 

 

P322 运行datanode和tasktracker的典型机器配置(2010年)

处理器:两个四核2-2.5GHz CPU

内存:16-46GN ECC RAM

磁盘存储器:4*1TB SATA 磁盘

网络:千兆以太网

Hadoop一般使用多核CPu和多磁盘提升硬件功能

 

P323 小集群VS大集群

对于几十个节点的小集群,在master上同时运行namenode和jobtracker通常没问题

但是随着集群节点增加,namenode的内存压力将逐步扩大,此时namenode和jobtracker最好分别配置在不同机器

注意,大集群中,namenode和secondNamenode也需要分开部署以降低内存压力和提高集群可靠性

 

P325 CDH(Cloudera)与hadoop(apache)对比

Cloudera的CDH和Apache的Hadoop的区别  目前而言,不收费的Hadoop版本主要有三个(均是国外厂商),分别是:

1、Apache(最原始的版本,所有发行版均基于这个版本进行改进)

2、Cloudera版本(Cloudera’s Distribution Including Apache Hadoop,简称CDH)

3、Hortonworks版本(Hortonworks Data Platform,简称“HDP”)

对于国内而言,绝大多数选择CDH版本,CDH和Apache版本主要区别如下:  

(1) CDH对Hadoop版本的划分非常清晰,只有两个系列的版本,分别是cdh3和cdh4,分别对应第一代Hadoop(Hadoop 1.0)和第二代Hadoop(Hadoop 2.0),相比而言,Apache版本则混乱得多;比Apache hadoop在兼容性,安全性,稳定性上有增强。  

(2)CDH3版本是基于Apache  hadoop  0.20.2改进的,并融入了最新的patch,CDH4版本是基于Apache hadoop 2.X改进的,CDH总
是并应用了最新Bug修复或者Feature的Patch,并比Apache hadoop同功能版本提早发布,更新速度比Apache官方快。

(3)安全 CDH支持Kerberos安全认证,apache hadoop则使用简陋的用户名匹配认证 

(4)CDH文档清晰,很多采用Apache版本的用户都会阅读CDH提供的文档,包括安装文档、升级文档等。 

(5)CDH支持Yum/Apt包,Tar包,RPM包,CM安装,Cloudera Manager三种方式安装,Apache hadoop只支持Tar包安装。


注:CDH使用推荐的Yum/Apt包安装时,有以下几个好处: 
1、联网安装、升级,非常方便 
2、自动下载依赖软件包 
3、Hadoop生态系统包自动匹配,不需要你寻找与当前Hadoop匹配的Hbase,Flume,Hive等软件,Yum/Apt会根据当前安装Hadoop版本自动寻找匹配版本的软件包,并保证兼容性。
4、自动创建相关目录并软链到合适的地方(如conf和logs等目录);自动创建hdfs, mapred用户,hdfs用户是HDFS的最高权限用户,mapred用户则负责mapreduce执行过程中相关目录的权限。

 

P325 自动化安装

可以使用Kickstart或者FUll Automatic Installation等工具来减轻安装和维护相同软件的负担。

Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录典型的需要人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在安装过程中(不只局限于生成Kickstart安装文件的机器)出现要填写参数的情况,安装程序首先会去查找Kickstart生成的文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便需要安装者手工干预了。所以,如果Kickstart文件涵盖了安装过程中可能出现的所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中的设置重启系统,并结束安装。

 

P326 安装步骤

1、安装Java并配置环境变量

2、创建hadoop用户和组

3、下载解压缩hadoop的tar到系统目录

4、将hadoop目录文件拥有者修改为hadoop用户

5、配置节点间ssh免密码登录

6、启动并测试hadoop集群

 

P329 Hadoop核心配置文件列表

 

 

P329 配置管理

明确一点,Hadoop没有全局的配置管理器,不管是master还是worker都是各自保存一系列的配置文件,由管理员管理配置的同步工作。

可以使用Hadoop 同步工具rsync来进行配置同步工作,或者使用dsh或pdsh等并行shell工具来完成该任务。

 

仅namenode和jobtracker使用了文件masters和salves,所以这些文件无需在集群每个节点分发。

配置hadoop-env.sh中的HADOOP_SLAVES值可以执行slaves文件的放置位置

 

start-dfs.sh脚本 - 启动集群中所以的HDFS守护进程,这个脚本执行的机器上会启动namenode

1、在脚本运行机器上启动唯一的namenode

2、在slaves配置各机器上启动datanode

3、在masters配置各机器上启动secondNamenode

 

start-mapred.sh脚本 - 启动集群中所有的MR守护进程,这个脚本执行的机器上会启动jobtracker

1、在脚本执行机器上启动唯一的jobtracker

2、在slaves配置的各机器上启动tasktracker

 

规则总结:

在小集群上,可以在同一个节点上启动namenode和jobtracker,也就是在同一台机器执行start-dfs.sh和start-mapred.sh,或者直接执行start-all.sh

在大规模集群上,在namenode机器上运行start-dfs.sh HDFS控制脚本,在jobtracker上运行start-mapred.sh MR控制脚本,要求salves要保持同步

 

P332 hadoop-env.sh文件详解

内存

最大需求内存量的计算依据

1、Hadoop为每个守护进程默认分配1GB内存,由HADOOP_HEAPSIZE控制(守护进程如:namenode、secondNamenode、jobtracker,datanode,tasktracker等)

2、tasktracker会启动独立的JVM来分别运行map和reduce任务,tasktracker默认可运行2个map和2个reduce任务(由mapred.tasktracker.map.tasks.maximum和由mapred.tasktracker.reduce.tasks.maximum控制),而分配给每个JVM的内存由mapred.child.java.opts属性配置。默认是-Xmx200m(200MB)

3、HADOOP_NAMENODE_OPTS属性可控制namenode节点的内存分配大小,如2GB配置为-Xmx2000m

4、HADOOP_SECONDARYNAMENODE_OPTS属性可控制辅助namenode节点的内存分配大小,一般配置来和主namenode相同即可

 

所以,一个双核处理器的工作节点(slave节点)至少需要分配2800MB的内存

datanode - 1GB

tasktracker - 1GB

子map任务 - 2*200 = 400MB

子reduce任务 - 2*200 = 400MB

合计2800MB

 

一台机器上最大配置的任务数取决于一台机器有多少个处理器

所以,一个拥有8核处理器的工作节点(slave节点)至少需要分配4800MB的内存

datanode - 1GB

tasktracker - 1GB

子map任务 - 7*200 = 1400MB(考虑到还有datanode 和 tasktracker进程 ,所以这个值不能设置为8)

子reduce任务 - 7*200 = 1400MB(考虑到还有datanode 和 tasktracker 进程,所以这个值不能设置为8)

合计4800MB

 

JAVA_HOME:配置Hadoop 系统的Java安装位置

HADOOP_LOG_DIR:配置Hadoop日志文件位置,大部分故障诊断日志会记录在.log为后缀的文件中。

HADOOP_MASTER:启用rsync配置文件同步工具。配置该项后,当salves节点启动时,会自动将slave本地的HADOOP_INSTAll根目录与HADOOP_MASTER根目录同步

HADOOP_SLAVE_SLEEP:为了避免启动工作节点时发送大量rsync请求导致主节点瘫痪,故配置该项使主节点在调用两个slave的间隙时主动休眠一段时间,如0.1(s)

 

P336 守护进程关键属性

core-site.xml:

fs.default.name:描述namenode的主机和端口地址,端口默认8020,同时指定了默认的文件系统(例子:hdfs://192.168.200.123:9000)默认值:file:/// 

io.file.buffer.size:辅助I/O操作的缓冲区大小(默认4KB,配置为128KB比较合理)

 

hdfs-site.xml:

dfs.name.dir:指定namenode元数据存储目录(例子:/local/data/hdfs/name,/remote/data/hdfs/name)

dfs.data.dir:指定datanode存储实际数据的目录(例子:/disk1/hdfs/data,/disk2/hdfs/data)

fs.checkpoint.dir:存储文件系统检查点的目录(例子:/disk1/hdfs/namesecondary,/disk2/hdfs/namesecondary)

dfs.block.size:HDFS块大小(默认64MB,配置为128MB或256MB较为合理) 

 

mapred-site.xml:

mapred.job.tracker:指派一台机器作为jobtracker以运行MR(例子:jobtracker:8021)

mapred.local.dir:存放MR作业中间数据和工作文件的临时目录(例子:/disk1/mapred/local,/disk2/mapred/local)

mapred.system.dir:任务共享文件的存储目录(例子:/tmp/hadoop/mapred/system)

mapred.tasktracker.map.tasks.maximum:map任务槽(例子:7)

mapred.tasktracker.reduce.tasks.maximum:reduce 任务槽(例子:7)

mapred.child.java.opts:每个任务子JVM内存分配大小(例子:-Xmx400m)

mapreduce.map.java.opts:每个map任务子JVM内存分配大小(例子:-Xmx400m)

mapreduce.reduce.java.opts:每个reduce任务子JVM内存分配大小(例子:-Xmx400m)

 

P342 守护进程地址和端口

hadoop守护进程一般同时运行RPC和HTTP两个服务器,RPC支持守护进程间的相互通信,HTTP则提供与用户交互的WEB界面。

当IP指定为0.0.0.0时,Hadoop将与本机的所有地址绑定

 

RPC地址和端口

fs.default.name : hdfs://localhost/ - 表示在本机器上的8020端口开放namenode的RPC进程

 

dfs.datanode.ipc.address:0.0.0.0:50020 - 表示在本机器上的50020端口开放datanode的RPC进程

dfs.datanode.address:0.0.0.0:50010 - 表示在本机器上的50010端口开放datanode的TCP/IP进程

 

mapred.job.tracker:192.168.6.200:8021 - 表示在192.168.6.200机器上的8021端口开放jobtracker的RPC进程

 

HTTP地址和端口

 

P347 YARN配置

启动start-yarn.sh脚本会在脚本运行的机器上启动资源管理器(ResourceManager),在slave列出的每台机器上启动节点管理器(NodeManager)。

ResourceManager可以和namenode运行在同一个节点上,也可以和namenode运行在不同的节点上。

YARN还有一个作业历史服务器(显示历史作业执行细节)和一个Web应用程序代理服务器(安全访问YARN的Web用户界面)。

 

yarn配置文件:

yarn-en.sh

yarn-site.xml

 

当在YARN上运行MR时,在mapred-site.xml中,与jobtracker和tasktracker相关的系列属性失效废弃。除了以下三个属性:

mapreduce.framework.name:yarn

mapred.child.java.opts

mapreduce.map.java.opts

mapreduce.reduce.java.opts

 

取而代之的是yarn的全新属性:

yarn.resourcemanager.address:资源管理器的RPC通信地址和端口(例子:0.0.0.0:8032)

yarn.nodemanager.local-dirs:存储作业中间数据和临时数据(类似于MR1中的mapred.local.dir)

yarn.nodemanager.aux-services:显式启用MR的shuffle句柄(默认值:mapreduce.shuffle)

yarn.nodemanager.resource.memory-mb:分配到节点管理器的物理内存。默认8192

yarn.nodemanager.vmem-pmem-ratio:虚拟内存和物理内存的比率。默认2.1

 

YARN内存需求分析:一个slave节点上,需求的内存量为MB

datanode:1GB(守护进程)

nodemanager:1GB(守护进程)

yarn.nodemanager.resource.memory-mb:8192MB(该节点管理器物理内存分配量)

mapred.child.java.opts:设置map/reduce任务JVM的堆大小 -Xmx800m

mapreduce.map.memory.mb/mapreduce.reduce.memory.mb:指定内存大小以运行map/reduce任务 - 1024MB

 

例子:假设mapred.child.java.opts 为 -Xmx800m,mapreduce.map.memory.mb为1024默认值

当map任务启动时,nodemanager会为任务分配1024mb内存,并启动一个JVM,该JVM具有最大堆为800MB。

所以,最小需求内存为1024+1024+8192+800+1024=12064MB约11.7GB 最好配置一个16GB的内存为优

 

P351 YARN守护进程地址和端口

 

RPC

 

HTTP

 

posted @ 2017-01-23 12:17  Aviva_ye  阅读(495)  评论(0编辑  收藏  举报