2009年4月6日星期一

Hadoop for RedFlag Linux 实践2

一、安装前的准备(环境)



  1、硬件配置:

    两台普通PC机

    Intel(R) Pentium(R) Dual  CPU  E2140  @ 1.60GHz

    1GB memory

    两台曙光服务器。

    Dual-Core AMD Opteron(tm) Processor 2218 HE

    4GB memory

    500G硬盘空间



        

  3、操作系统:Asianux3.0



  4、java运行时环境:jdk-1.6u7



  5、Hadoop-0.18.1



  6、机器名及IP地址见下面表格(包含是否为物理或虚拟机)



主机


IP/netmask


备注


Hadoop-1


172.16.80.120/27






Hadoop-2

172.16.80.108/27





Hadoop-3

172.16.80.98/27





Hadoop-7

172.16.80.114/27

master

















二、安装:

1、download from hadoop.apache.org.

  2、在任意处解压后即可,此处为/opt/hadoop/,也即是HADOOP_HOME,保证所有的机器上此环境变量均一致。

    NameNode/JobTracker为其中一台主机,这里为Hadoop3, 其余均为DataNode和Task Tracker节点。



  3、配置Master/Slave的密钥信息

    假定Master为本地主机(即用于控制其他主机的机器),Slave为远程主机 假如ip为172.16.80.119;

    Master和Slave的系统都是Asianux3.0

    在Master上的命令:

      # ssh-keygen -t rsa           (连续三次回车,即在本地生成了公钥和私钥,不设置密码)

      # ssh root@172.16.80.119      (需要输入密码)

      # mkdir .ssh

      # chmod 0700 .ssh

      # exit

      # scp ~/.ssh/id_rsa.pub root@172.16.80.119:.ssh/id_rsa.pub   (需要输入密码)



    在Slave上的命令:

      # touch /root/.ssh/authorized_keys2                         (如果已经存在这个文件, 跳过这条)

      # cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys  (将id_rsa.pub的内容追加到 authorized_keys 中)



    回到Master机器:

      # ssh root@172.16.80.119      (不需要密码, 登录成功)



    所有节点的主机的/etc/ssh/sshd_config 文件需要修改一下

      # PermitRootLogin yes

      # RSAAuthentication yes
      # PubkeyAuthentication yes

      # PermitEmptyPasswords yes


三、配置  
  对于Hadoop的集群来说,可以分成两大类角色,Master和Slave。

  前者主要配置NameNode和JobTracker的角色,负责总管分布式数据和分解任务的执行;

  后者配置DataNode和TaskTracker的角色,负责分布式数据存储以及任务的执行。




  1、配置文件

    Hadoop有两个重要的配置文件在HADOOP_HOME/conf目录下:

      1). hadoop-default.xml - Read-only default configuration.   只读的默认配置文件

      2). hadoop-site.xml - Site-specific configuration.          指定站点配置文件。

注:



Hadoop的基础配置文件是hadoop-default.xml,看Hadoop的代码可以知道,默认建立一个Job的时候会


建立JobConfigConfig首先读入hadoop-default.xml的配置,然后再读入hadoop-site.xml的配置


(这个文件初始的时候配置为空),hadoop-site.xml中主要配置你需要覆盖的hadoop-default.xml的系


统级配置,以及你需要在你的MapReduce过程中使用的自定义配置(具体的一些使用例如final等参考文档)。


      此次实验的最终配置文件内容:


hadoop-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>hadoop.tmp.dir</name>

  <value>/opt/hadoop/tmpdir/hadoop-${user.name}</value>

  <description>A base for other temporary directories.</description>

</property>



<property>

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

  <value>hdfs://hadoop-3:54310</value>

</property>



<property>

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

  <value>hadoop-3:54311</value>

</property>



<property>

  <name>dfs.replication</name>

  <value>1</value>

</property>



<property>

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

  <value>/opt/dfs/data</value>

</property>



<property>

  <name>ipc.client.connection.maxidletime</name>

  <value>10000000000</value>

</property>



</configuration>







hadoop-default.xml 中修改如下项目:







<property>

  <name>mapred.map.tasks</name>

  <value>10</value>

  <description>The default number of map tasks per job.  Typically set

  to a prime several times greater than number of available hosts.

  Ignored when mapred.job.tracker is "local".

  </description>

</property>



<property>

  <name>mapred.reduce.tasks</name>

  <value>5</value>

  <description>The default number of reduce tasks per job.  Typically set

  to a prime close to the number of available hosts.  Ignored when

  mapred.job.tracker is "local".

  </description>

</property>










     3). 设置站点的脚本HADOOP_HOME/conf/hadoop-env.sh             

         设置JAVA_HOME为jdk的所在目录

     4).设置HADOOP_HOME环境变量在各台机器上。
2、站点配置

    配置Hadoop集群的环境变量,见下表所示:


Daemon


Configure Options


NameNode


HADOOP_NAMENODE_OPTS


DataNode


HADOOP_DATANODE_OPTS


SecondaryNamenode


HADOOP_SECONDARYNAMENODE_OPTS


JobTracker


HADOOP_JOBTRACKER_OPTS


TaskTracker


HADOOP_TASKTRACKER_OPTS





    在以上所有的环境变量设置之前,JAVA_HOME是肯定、必须要设置的。

    另外一些重要的变量,例如:

      • HADOOP_LOG_DIR - The directory where the daemons' log files are stored. They are automatically created if they don't exist.

      • HADOOP_HEAPSIZE - The maximum amount of heapsize to use, in MB e.g. 1000MB. This is used to configure the heap size for the hadoop daemon. By default, the value is 1000MB.




四、实际运行案例

使用个不同方案在2+4真实/虚拟物理主机上测试:

  (见Hadoop for RedFlag Linux 实践1)



使用7个不同的方案在
真实物理主机测测试:

  操作过程与虚拟机下使用一致。

  案例1:

    4节点完全备份(3个数据拷贝),测试50MB的随机数数据的WordCount,不含节点失效。

    Map为10,Reduce为5,执行过程约4~5秒。
  案例2:

    4节点完全备份(3个数据拷贝),测试50MB的随机数数据的WordCount
,含节点失效。

    Map为10,Reduce为5,执行过程3分钟+(<3分30秒),原因是Master为DataNode预留了较长的响应延时,以应对较差的网络环境。
  案例3:

    4节点完全备份(3个数据拷贝),测试1.4GB的随机数数据的WordCount
,不含节点失效。

    Map为10,Reduce为5,执行过程1分25秒。
  案例4:

    4节点完全备份(3个数据拷贝),测试1.4GB的随机数数据的WordCount
,含节点失效。

    Map为10,Reduce为5,执行过程3分钟+(<4分钟),原因是节点
失效后,分布式的计算力减小为原先的约2/3,且增加了响应延时和任务重执行。

  案例5:

    3节点无备份(0个数据拷贝),测试1.4GB的随机数数据的WordCount,含节点增加。

    Map为6,Reduce为3,执行过程小于3分钟,节点增加并未提高当前任务执行速度,原因不详,初步估计是Map任务已经结束,新加入的节点只能到下次工作中才能重新计算入Task节点。
  案例6:

    4节点无备份(0个数据拷贝),测试3.8GB的随机数数据的WordCount
,不含节点失效。

    Map为10,Reduce为1(使用单节点处理大量数据到小数据的Reduce操作可以大量节省网络和磁盘IO,从而节约时间),执行过程9分3秒。
  案例7:

    单节点无备份(0个数据拷贝),测试3.8GB的随机数数据的WordCount
,不含节点失效。

    Map为2,Reduce为1,执行过程27分6秒。



结果:

  使用4个节点的WordCount比单节点的快了约18分钟,前者速度是后者的3倍(没有达到理论值的4倍,于很多原因有关:比如磁盘/网络IO的差别,多节点的任务调度方式于单节点的不同等等...)。而且Hadoop分布式系统的容错能力是相当强大的,可以及时的判断节点响应并处理失效任务。



部分测试过程数据截图:




没有评论: