不再折腾-----hadoop-1.2.1完全分布式安装

  1. 准备工作
  • 三台虚拟机,强烈推荐vmware + centos6.5
  • 三台虚拟机均设有hadoop用户
  • IP地址设置
    IP地址 hostname
    192.168.11.100 master
    192.168.11.101 slave1
    192.168.11.102 slave2

  • 说明:#开头表示root用户,$开头表示hadoop用户
  • 配置IP
    • 所有虚拟机可按照以下这个模板根据自己实际情况相应设置

    • #vi /etc/sysconfig/network-scripts/ifcfg-eth0
         BOOTPROTO=static
         ONBOOT=yes
             BROADCAST=192.168.11.255
             IPADDR=192.168.11.100
             NETMASK=255.255.255.0
             NETWORK=192.168.11.0
             GATEWAY=192.168.11.2

  •   3. 其他重要设置

        •  关闭防火墙:  #service iptables stop
            •  #chkconfig iptables --list   -- 查看各个init模式下,是否开机自动启动的状态
            •    #chkconfig iptables off    --关闭各个init模式下,开机不自动启动
        • 禁用SELinux:  #vim  /etc/sysconfig/selinux       设置SELINUX=disabled
        • 修改hostname:  #vi   /etc/sysconfig/network      设置HOSTNAME=master
      修改hosts:           #vi   /etc/hosts      host文件添加如下内容
        •   192.168.11.100      master
        •       192.168.11.101      slave1
        •       192.168.11.102     slave2
      • 说明:以上设置在每个虚拟机中都要进行设置

      4.设置ssh免密码登陆

    1.master和slave:
    $ssh-keygen -t rsa
    $cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
    $chmod 644 ~/.ssh/authorized_keys              *********切记好多人都是因为这个折腾了好久,
    $ssh localhost 两次,第一次需要yes,第二次不需要,而直接连上,则成功

    2.每个slave:
    $scp hadoop@master:~/.ssh/id_rsa.pub ./master_rsa.pub
    $cat master_rsa.pub >> authorized_keys
    3.master:
    $ssh slave1 第一次需要yes, 第二次不需要,而直接连上,则成功
    $ssh slave2 第一次需要yes, 第二次不需要,而直接连上,则成功

    5.安装JDK

    1. 下载jdk-6u45-linux-x64.bin,并移动到要安装目录
    2. ./jdk-6u45-linux-x64.bin ,相当于解压,得到jdk1.6.0_45
    3.  配置环境变量
    #vim /etc/profile   添加如下内容:
    ## JAVA
    export JAVA_HOME=/opt/modules/jdk1.6.0_45
    export PATH=$PATH:$JAVA_HOME/bin
    4. 使配置生效
    # source /etc/profile
    5. 测试:
    # jps   或    #java -version

    6.安装hadoop-1.2.1

    1.下载hadoop-1.2.1.tar.gz,并移动到要安装目录

    2.解压: $tar -zxvf hadoop-1.2.1.tar.gz

    3.配置环境变量 #vim /etc/profile

    ## HADOOP

    export HADOOP_HOME=/opt/modules/hadoop-1.2.1

    export PATH=$PATH:$HADOOP_HOME/bin

    4.使配置生效 # source /etc/profile 

    5.配置配置文件,在HADOOP_HOME/conf/  下 

    hadoop-env.sh

    export JAVA_HOME=/opt/modules/jdk1.6.0_45

    core-site.xml

    fs.default.name
    Master:9000
    The name of the default file system. Either the literal string "local" or a host:port forDFS.
     
    hadoop.tmp.dir
    /home/hadoop/tmp
    A base for other temporary directories.

    说明:  fs.default.name是NameNode的URI。hdfs://主机名:端口/

    hadoop.tmp.dir :Hadoop的默认临时路径,这个最好配置,需在本地文件系统中创建相应文件夹

    如果在新增节点或者其他情况下莫名其妙的DataNode启动不了,就删除此文件中的tmp目录即可。

    不过如果删除了NameNode机器的此目录,那么就需要重新执行NameNode格式化的命令。
     

    hdfs-site.xml

     dfs.name.dir

    /home/hadoop/name1,/home/hadoop/name2

    Determines where on the local filesystem the DFS name node should store the name table.

    If this is a comma-delimited list of directories then the name table

    is replicated in all of the directories, for redundancy.

    dfs.data.dir

    /home/hadoop/data1, /home/hadoop/data2

    Determines where on the local filesystem an DFS data node should store its blocks.

    If this is a comma-delimited list of directories, then data will be stored in all named directories,

    typically on different devices. Directories that do not exist are ignored.

    dfs.replication

    2

    Default block replication. The actual number of replications can

    be specified when the file is created.

    The default is used if replication is not specified in create time.

    dfs.permission

    false

    说明: dfs.name.dir是NameNode持久存储名字空间及事务日志的本地文件系统路径。

    当这个值是一个逗号分割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。
     dfs.data.dir是DataNode存放块数据的本地文件系统路径,逗号分割的列表。

    当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。
      dfs.replication是数据需要备份的数量,默认是3,如果此数大于集群的机器数会出错。
    注意:此处的name1、name2、data1、data2目录不能预先创建,

    hadoop格式化时会自动创建,如果预先创建反而会有问题。
     

    mapred-site.xml

    mapred.job.tracker
    Master:9001
    The host and port that the MapReduce job tracker runs at. If "local",

    then jobs are runin-process as a single map and reduce task.

     
    mapred.local.dir
    /home/hadoop/tmp

     说明:  mapred.job.tracker是JobTracker的主机(或者IP)和端口。主机:端口。

    master

    master -- 指定SecondaryNameNode的位置

    slave

    slave1  --指定DataNode和TaskTracker的位置 

     slave2

     说明:注意最好使用主机名,并且保证机器之间通过主机名可以互相访问,每个主机名一行。

    配置结束,把配置好的hadoop文件夹拷贝到其他集群的机器中,

    并且保证上面的配置对于其他机器而言正确,

    也可自己根据具体情况自行配置

    参考:如果其他机器的Java安装路径不一样,要修改conf/hadoop-env.sh

    $scp -r /home/hadoop/hadoop-1.2.1 Slave1:/home/hadoop/
    $scp -r /home/hadoop/hadoop-1.2.1 Slave2:/home/hadoop/
    $scp -r /home/hadoop/hadoop-1.2.1 Slave3:/home/hadoop/

    7. 启动hadoop

    1. 格式化一个新的分布式文件系统

    $ hadoop namenode -format

     *** 查看输出保证分布式文件系统格式化成功执行完后可以到master机器上

    看到/home/hadoop//name1和/home/hadoop/name2两个目录。

    在主节点master上面启动hadoop,主节点会启动所有从节点的hadoop。
     2. 启动所有节点

    $start-all.sh
    *** 执行完后可以到master(Master)和slave(Slave1,Slave2,Slave3)

    机器上看到/home/hadoop/hadoopfs/data1和/home/hadoop/data2两个目录。

    3.关闭所有节点

    从主节点master关闭hadoop,主节点会关闭所有从节点的hadoop。

    $ bin/stop-all.sh
    Hadoop守护进程的日志写入到 ${HADOOP_LOG_DIR} 目录

    (默认是 ${HADOOP_HOME}/logs).

       ${HADOOP_HOME}就是安装路径.

    8.测试

    1.用jps检验各后台进程是否成功启动

    --在master节点查看后台进程
    $ /usr/local/jdk1.6.0_45/bin/jps
    3180 Jps
    2419 SecondaryNameNode
    2236 NameNode
    2499 JobTracker
    --在slave节点查看后台进程
    $ /usr/local/jdk1.6.0_45/bin/jps
    2631 Jps
    2277 DataNode
    2365 TaskTracker
    2. 通过用浏览器和http访问NameNode和JobTracker的网络接口:
    HDFS管理界面: http://hadoop-master.fuyi.com:50070/
    MapReduce管理界面: http://hadoop-master.fuyi.com:50030/
    TaskTracker管理界面:http://hadoop-master.fuyi.com:50060/
    3. 使用netstat –nat查看端口9000和9001是否正在使用。