作者:JesseZhang (CNZQS|JesseZhang)
博客地址:http://www.cnzqs.com
要点:
1、集群规范
1.1网络拓扑
2、集群的构建和安装
2.1安装Java
2.2创建Hadoop用户
2.3安装Hadoop
2.4测试安装
3、SSH配置
4、Hadoop配置
3.1配置管理
3.2环境设置
3.3 Hadoop守护进程的关键属性
3.4 Hadoop守护进程的地址和端口
3.5 Hadoop的其他属性
3.6 创建用户账号
5、安全性
3.1Kerberos和Hadoop
3.2委托令牌
3.3 其他安全性改进
6、利用基准测试程序测试Hadoop集群
3.1Hadoop基准测试程序
3.2用户的作业
7、云端的Hadoop
3.1Amazon EC2上的Hadoop
============================================
1、 集群规范
Hadoop运行在商业硬件上,注意两个问题:
1、 商业硬件并不等同于低端硬件,低端机器便宜的零部件会导致维护成本巨大。
2、 也不建议构建在大型机器上,因为集群服务器较少,某一台出现故障,对整个集群影响较大。(故障硬件所占的比重增大了)
尽管集群采用的机器硬件会有所不同,但Hadoop一般使用多核CPU和多磁盘,以便充分利用现代化硬件的强大功能。
2010年搭建Hadoop硬件的典型规格为:
处理器:2个四核 2-2.5GHz CPU
内存: 16 – 24GB ECC RAM
存储器:4 * 1TB SATA硬盘
网络:千兆以太网
不适用RAID的原因:
1、 不会给HDFS带来好处;HDFS本身已满足数据备份需求。
2、 尽管RAID条带化(RAID 0)技术被广泛用于提升性能,但其速度仍然比HDFS的JBOD(Just a Bunch Of Disks)慢
3、 JBOD配置的某一磁盘出现故障,HDFS还可以忽略该磁盘继续工作,RAID的某一盘片故障可能会导致整个磁盘阵列不可用。
Hadoop是用Java编写,可用在任意装了JVM的机器上运行,但仍有部分代码(控制脚本等)需要在Unix环境下执行;所以:hadoop并不适宜在非Unix平台上运行供生产用。
1、 集群大小可用根据需要逐步扩展(初始大概在10台左右)。
2、 辅助namenode和namenode可用运行在同一机器之中,但由于内存的原因(辅助与主需要同样的内存需求),二者最好运行在独立的硬件只上。
3、 运行namenode的机器一般采用64位硬件,避免32位架构下Java堆的3GB内存限制。
网络拓扑:
1、 通常Hadoop集群架构包含两级网络拓扑。
2、 这一架构的突出特点是:同一机架内部节点间的总带宽要远高于不同机架节点的带宽。
典型场景是:
1、 各机架装配30-40个服务器,共享一个1GB的交换机
2、 各机架的交换机又通过上行链路与一个核心交换机或者路由器互联。
对多机架的集群,要搞清楚节点和机架之间的映射关系,主要是网络位置、距离。
Hadoop配置需要通过一个java接口DNSToSwitchMapping来记录节点地址和网络位置之间的映射关系。
一定要注意配置映射关系
2、 集群的构建和安装
1、Hadoop安装方式,可以用工具安装,也可以通过SHELL自己实现。
2、安装Java,需要java 6或者更新版本,首选方案采用最新稳定的sun JDK
3、 创建Hadoop用户,最好是创建特定的Hadoop用户账号以区分Hadoop和本机上的其他服务。安装方式可以采用NFS挂载的方式 或者 本地安装;如果选择NFS,则有必要考虑autofs
4、 安装Hadoop,安装可行的路径有:/usr/local 、 /opt 、 /home/hadoop(自定义) ;注意:hadoop并没有安装再hadoop用户的home目录下,最好是在某一NFS挂载的目录上。(便于维护,多服务器同步)
5、 HDFS和MapReduce最好分别安装在不同位置,便于升级(可以打一个补丁,但HDFS仍在运行);独立安装后,仍然可以共享配置信息,方法是使用 –config(启动守护进程时)选项指向同一目录。主要的核心是:独立安装、共享配置、共用日志目录。
6、 安装后,要注意进行测试安装。
7、 SSH配置
创建公钥/私钥对,利用NFS在整个集群共享该密钥对。可以通过NFS或者本地复制的方式共享。
8、 Hadoop配置
1、 配置文件通常安装再安装程序外部,便于程序升级和同步。
2、 配置文件同步工具:rsync、dsh、pdsh
3、 也支持为所有的主机器和工作机器采用同一套配置文件。
4、 增加“机器类”来解决不同配置服务器组成的集群。
5、 对大型集群来说,同步化所有机器上的配置文件极有挑战性(如某台机器有异常,但此时发出更新配置的指令,如何保证机器恢复正常后也能更新配置?),推荐使用控制管理工具管理集群。
6、 Masters 和slaves文件;无须分发到所有节点,只在namenode和jobtracker上配置即可。
7、 对小型集群(几十个节点),可以直接将所有守护进程都部署在一台机器上;但对大型集群,最好能让守护进程运行在不同机器上。
8、 Namenode在内存中保存整个命名空间的所有文件和块元数据,内存需求很大。辅助namenode需要同样大小的内存空间。Jobtracker会使用大量的CPU和内存资源。这两者最好是部署在一个专用节点上。
9、 默认情况,每个守护进程1000M内存(可以在配置中设置);tasktracker启动独立的子JVM也消耗内存;内存需求需要结合守护进程和独立的子JVM进行运算;
10、 任务数(map和reduce)设置的规则是:任务数/处理器核数 在1和2之间,考虑到datanode和tasktracker也需要,所以一般设置为n-1;也可以设置MapReduce所能操作的最大内存量。一般1000M的内存可以存储几百万个文件的数据块的引用。
11、 可以使用一些工具监控集群的内存使用情况,以优化分配方案;Ganglia是采集此类信息的有效工具。
12、 日志目录可以设置,推荐独立程序之外;两类日志:
a) 日志文件(.log)应用程序的日志信息
b) .out 日志,记录标准输出和标准错误日志;系统保留最新的5个日志文件,在日志文件后加一个后缀,5表示最旧的文件。
c) 日志文件的名称包括运行守护进程的用户名称、守护进程名称和本地主机名等信息,所以可以将日志文件输出到同一目录(NFS)
13、 StrictHostKeyChecking不适合大型集群环境。大型集群下从某机器源获取配置需要注意对源机器的影响。
14、 配置文件中的目录可配置多个,根据属性的不同作用主要有:
a) 同时存储,多备份
b) 分散在不同磁盘,提高IO性能;
c) 为了提高性能,最好为各个本地磁盘指定一个存储目录;使用noatime挂载磁盘也是提高性能的方法。
15、 HDFS端口8020;MapReduce端口8021
16、 集群成员可以进行设置,来加入或者排除服务器;
17、 缓冲区大小最好修改为64KB或者128KB;默认为4KB
18、 可以通过dfs.datanode.du.reserved设置保留的存储空间
19、 回收站特性
20、 设置任务的内存限制,防止出现任务异常,用光内存;有两个办法:
a) 设置mapred.child.ulimit项,需要大于任务的JVM的内存
b) 通过limits.conf在操作系统层面限制进程所消耗的资源
21、 创建用户账号,并最好设置各用户的目录容量
9、 安全性
1、 主要通过Kerberos来实现用户认证。
2、 在0.20版本后逐步加入,在0.22版本之前,这项特性的有效性和稳定性均不成熟。
10、 利用基准测试程序测试Hadoop集群
1、 集群正确验证:运行若干作业,并确信获得了预期结果。同时也可以根据此调整集群设置以优化性能。
2、 为获得最佳效果,不能在运行基准测试程序时还同时运行其他任务;
3、 硬盘故障是新系统常见的硬件故障。
4、 Hadoop自带若干基准测试程序
a) 使用TestDFSIO来测试HDFS:测试读和写
b) 使用Sort程序测试MapReduce;对排序程序总执行时间比较关注,可以通过web界面观察作业执行过程。
c) 其他基准测试:
i. MPBench(使用mrbench选项)会多次运行一个小型作业,以检验小型作业是否能快速响应
ii. NNBench(使用nnbench选项)专门用于测试namenode硬件的负载
iii. Gridmix是一个基准测试程序套装,可以模拟真实常见的数据访问模式,逼真的为一个集群的负载建模。对用户搭建的第一个集群,这个工具比较合适。
11、 云端的Hadoop
Amazon提供Hadoop云服务:Elastic MapReduce。
Apache Whirr项目可以比较方便的在EC2和其他云服务提供商上运行Hadoop
由于S3系统并不和EC2节点兼容,所以不可以直接使用S3系统。