从零开始最短路径学习Hadoop之06----构建Hadoop集群

1. 集群规范
    Hadoop运行在商业硬件上。一般Hadoop使用多核CPU和多磁盘,以充分利用硬件的性能。
    Hadoop的部分代码需要在Unix环境下执行,故它不适宜在非Unix平台上供生产用

2. 在初期,可以构建一个大约10个节点的小集群,并持续扩充。
    对几十个节点的小集群来说,在一台master机器上运行namenode和jobtracker。当HDFS集群和文件数不断增长时,namenode和jobtracker要放在不同的机器中。SecondaryNameNode最好运行在单独的机器。
    运行NameNode的机器一般是64位硬件,以避免32位架构下Java堆的3GB内存限制。

3. 网络拓扑
    3.1 Hadoop集群架构包含两级网络拓扑。各机架装配30~40个服务器,共享一个1GB的交换机。各机架的交换机又通过上行链路与一个核心交换机或路由器互联。此架构的特点:同一机架内部节点间的总宽带要远高于不同机架间节点的带宽。
    3.2 让Hadoop系统知道网络拓扑状态,可以提高Hadoop的最佳性能。如果集群只包含一个机架,就不需要进行配置。
           对于多机架的集群来说,如果Hadoop知道节点和机架之间的映射关系,那么,Hadoop将MapReduce任务分配到各个节点,会倾向于执行机架内的数据传输,而非跨机架数据传输,HDFS会更智能地放置副本replica,以取得性能和灵活性的平衡。
    3.3 节点和机架的网络位置location以树的形式表示。
           NameNode用网络位置确定在哪里放置块的复本。
           JobTracker用网络位置查找最近的复本,作为map任务的输入,并调度到TaskTracker上运行。
    3.4 Hadoop用Java接口DNSToSwitchMapping记录节点地址和网络位置之间的映射关系。
    3.5 对大多数安装来说,只需要使用默认的ScriptBasedMapping实现即可。
           它运行用户定义的脚本来描述映射关系。脚本的存放路径由属性topology.script.file.name控制。
          参考Hadoop wiki的例子: http://wiki.apache.org/hadoop/topology_rack_awareness_scripts

4. 集群的构建和安装
    4.1 安装方式:Apache Hadoop分发包;RPM和Debian包的CDH。
          自动安装:Red Hat Linux的Kickstart或Debian的Fully Automatic Installation。
    4.2 配置管理:Hadoop集群的每个节点各自保存一系列文件,管理员做这些配置文件的同步。
                              Hadoop用rsync,dsh,pdsh等工具进行同步。
    4.3 机器类:为不同机器类分别维护一套配置文件。需要用外部工具,如Chef, Puppet,cfengine和bcfg2等。
    4.4 同步配置是很大的问题,必须用控制管理工具管理集群。

5. 控制脚本
    5.1 内置脚本:运行指令,启动和终止守护进程,在bin目录。
    5.2 conf目录下有masters和slavers两个文件。
           masters记录要运行SecondaryNameNode的所有机器。
           slaves记录运行DataNode和TaskTracker所有机器。
           这两个文件之在NameNode和JobTracker上的控制脚本使用这些文件,不需要分发到整个集群。
    5.3 用户不不需要指定masters文件中哪台机器正在运行NameNode和JobTracker,该操作由运行脚本的机器决定。
           在masters文件中指定这些机器会导致在这些机器上运行一个SecondaryNameNode。
    5.4 start-dfs.sh脚本启动集群中所有的HDFS守护进程,该脚本运行时会在同一个机器上运行NameNode,步骤如下:
           在本地机器上启动一个NameNode;
           在slaves文件中记录的各机器上启动一个DataNode;
           在masters文件中的各机器上启动一个SecondaryNameNode;
    5.5 start-dfs.sh,启动集群中所有MapReduce守护进程:
           在本地机器上启动一个JobTracker;
           在slaves文件中每台机器上启动TaskTracker;
     5.6 stop-dfs.sh和stop-mapred.sh能终止相关启动脚本启动的守护进程,它们调用hadoop-daemon.sh脚本启动和终止Hadoop守护进程。

6. 主节点场景
    6.1 主节点守护进程包括NameNode,SecondaryNameNode,JobTracker。
           如果集群是有几十个节点的小型集群,可以将三个守护进程放到单独的一台机器上。
           如果是大型集群,这些守护进程要分别运行在不同的机器上。
    6.2 NameNode在内存中保存整个命令空间的所有文件和块元数据,内存需求很大。
           SecondaryNameNode在大多数时间空闲,但在创建检查时的内存需求与主NameNode差不多。
           故,如果文件系统包含大量文件,单台机器的物理内存无法同时运行NameNode和SecondaryNameNode。
    6.3 在NameNode机器上运行HDFS控制脚本。masters文件包含SecondaryNameNode的地址。
           在JobTracker机器上运行MapReduce控制脚本。
           当NameNode和JobTracker运行在不同节点上,集群中每个节点将运行一个DataNode和一个TaskTracker,以使slaves文件同步。

7. 环境设置
    环境变量在hadoop-env.sh文件中设置。
    HADOOP_HEAPSIZE参数控制每个守护进程的内存分配,默认是1GB内存。
    TaskTracker启动独立的子JVM来运行Map和Reduce任务。
    mapred.tasktracker.map.tasks.maximum属性控制一个TaskTracker能同时运行最多多少个map任务,默认值是2个任务。
    mapred.tasktracker.reduce.tasks.maximum属性控制一个TaskTracer能同时运行最多多少个reduce任务,默认值是2个任务。
    mapred.child.java.opts属性决定每个子JVM的内存量,默认值是-Xmx200m,每个任务分配200M内存。
    Ganglia可以监控集群的内存使用情况。

8. 系统日志文件
    8.1 Hadoop的系统日志文件在$HADOOP_INSTALL/logs目录。
          hadoop-env.sh中的HADOOP_LOG_DIR可以修改这个环境变量。
    8.2 .log是log4j记录。.out记录表准输出和标准错误日志。

9. SSH设置
    Hadoop控制脚本能够将配置文件分发到集群中的所有节点,用rsync工具。

10. Hadoop守护进程属性
    
11. 创建用户帐号
    " hadoop fs -mkdir /user/username"
    " hadoop fs -chown username:username /user/username"

12. hadoop的安全性

13. 用基准测试程序测试Hadoop集群
    13.1 运行基准测试程序,测试Hadoop集群是否正常,并衡量性能。
    13.2 经验表明, 硬盘故障是新系统最常见的硬件故障
    13.3 Hadoop基准测试程序:    
             " hadoop jar $HADOOP_INSTALL/hadoop-1.1.2-test.jar"
             如果不指定参数,大多数基准测试程序都会显示具体用法,示例如下
             " hadoop jar $HADOOP_INSTALL/hadoop-1.1.2.jar TestDFSIO"
    13.4 测试HDFS的I/O性能
       写10个文件,每个文件大小是1000M,
       " brian@brian-laptop:~/usr/hadoop/hadoop-1.1.2$ ./bin/hadoop jar hadoop-test-1.1.2.jar TestDFSIO -write -nrFile 10 -fileSize 1000"
       测试结果在log里,
       "cat TestDFSIO_results.log
       文件被写到io_data目录下的/benchmarks/TestDFSIO子目录。
       测试读操作,要读的文件必须已经存在:
       "brian@brian-laptop:~/usr/hadoop/hadoop-1.1.2$ ./bin/hadoop jar hadoop-test-1.1.2.jar TestDFSIO -read -nrFile 10 -fileSize 1000 "
        测试结束,删除临时文件:
        "brian@brian-laptop:~/usr/hadoop/hadoop-1.1.2$ ./bin/hadoop jar hadoop-test-1.1.2.jar TestDFSIO -clean"
    13.5 用Sort测试MapReduce
        产生随机数据:"brian@brian-laptop:~/usr/hadoop/hadoop-1.1.2$ ./bin/hadoop jar hadoop-examples-1.1.2.jar randomwriter random-data"
        sort排序:"brian@brian-laptop:~/usr/hadoop/hadoop-1.1.2$ ./bin/hadoop jar hadoop-examples-1.1.2.jar sort random-data sorted-data"
        验证:"brian@brian-laptop:~/usr/hadoop/hadoop-1.1.2$ ./bin/hadoop jar hadoop-examples-1.1.2.jar testmapredsort -sortInput random-data -sortOutput sorted-data"
        这个测试很慢,运行要谨慎,读写硬盘很多,损硬盘。

14. 在amazon的云端可以安装Hadoop

转载于:https://my.oschina.net/u/3226063/blog/826076

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值