CentOS 安装hadoop

来源:互联网 发布:宇宙战舰大和号 知乎 编辑:程序博客网 时间:2024/05/21 10:33
准备:CentOS6.4, Hadoop1.2.1, Java. 三台电脑Master, Slave01, Slave02.
  1. 关闭防火墙 su (root)
    sudo service iptables stop #关闭iptables
    sudo chkconfig iptables off # 永久关闭iptables
  2. 配置Hostname
    1. vim /etc/hosts
      #127.0.0.1              localhost.localdomain localhost
      #::1            localhost6.localdomain6 localhost6
      127.0.0.1       master  localhost.localdomain localhost
      ::1     master  localhost6.localdomain6 localhost6
      158.132.11.122  master
      158.132.11.195  slave01
      158.132.11.176  slave02
    2. vim /etc/sysconfig/network
      #NETWORKING=yes
      #NETWORKING_IPV6=no
      #HOSTNAME=localhost.localdomain
      NETWORKING=yes
      NETWORKING_IPV6=no
      HOSTNAME=master
    3. 运行 hostname master
    4. 测试 hostname
  3. 本地模式(local mode) 和伪分布式模式(Pseudo-distribution mode)
    将hadoop-XXX-bin.tar.gz 分别传到home目录下 ( 注意,三台机器hadoop所在目录必须一致,因为master会登陆到slave上执行命令,master认为slave的hadoop路径与自己一样
    • 编辑conf/hadoop-env.sh 
      cd hadoop-XXX
      vim conf/hadoop-env.sh 
             export JAVA_HOME=/usr/java/XXXXX
    • 测试本地模式是否正常
      $mkdir input
      $cp conf/*.xml input
      $bin/hadoop jar hadoop-examples-XX.jar grep input output 'dfs[a-z.]+'
      $cat output/*

    • 配置伪分布式:
      配置SSH无密码登陆本机
      $ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
      $cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
      修改sshd配置文件(root)
      $sudo vim /etc/ssh/sshd_config 去掉注释
                RSAAuthentication yes
                PubkeyAuthentication yes
                AuthorizedKeysFile      .ssh/authorized_keys
      重启 sudo service sshd restart
      $chmod 600 ~/.ssh/authorized_keys

    • 修改hadoop配置文件
      conf/core-site.xml:
      <configuration>
           <property>
               <name>fs.default.name</name>
               <value>hdfs://localhost:9000</value>
           </property>
      </configuration>

      conf/hdfs-site.xml:
      <configuration>
           <property>
               <name>dfs.replication</name>
               <value>1</value>
           </property>
      </configuration>

      conf/mapred-site.xml:
      <configuration>
           <property>
               <name>mapred.job.tracker</name>
               <value>localhost:9001</value>
           </property>
      </configuration>
    • 启动Hadoop,测试伪分布式模式 
      a) 格式化namenode
      $ bin/hadoop namenode -format
      b) 启动 Hadoop 后台进程
      $ bin/start-all.sh
      c) 现在可以用浏览器打开NameNode和JobTracker的web界面了。
      NameNode - http://158.132.11.122:50070/
      JobTracker - http://158.132.11.122:50030/
      d) 数据拷贝到分布文件系统中
      $ bin/hadoop fs -put conf input 
      如果这时出现 SafeModeException 异常,不用担心,等待几分钟即可。因为hadoop刚刚启动时,会进入安全模式进行自检。
      e) 运行 Hadoop 自带的例子:
      $ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+'
      f) 查看文件输出
      $ bin/hadoop fs -cat output/*
      h) 当你做完了后,关闭 Hadoop:
      $ bin/stop-all.sh

  4. 分布式模式 cluster setup
    • 配置 master 无密码登陆到所有机器(包括master自己登陆自己)
      首先在两台slave上修改sshd的配置文件,然后重启sshd服务。
      sudo vim /etc/ssh/sshd_config  找到以下三行,并去掉注释符”#“
      RSAAuthentication yes
      PubkeyAuthentication yes
      AuthorizedKeysFile      .ssh/authorized_keys
      修改了配置文件需要重启sshd服务 $ sudo service sshd restart
    • 在两台slaves机器上新建 ~/.ssh 目录
      $ mkdir ~/.ssh

    • 在master机器上执行:
      #生成公钥
      $ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
      ($ ssh-keygen -t rsa -P '' 或者这个 因为上面那个可能不能生成rsa.pub)
      把公钥拷贝到所有机器上(包括自己)
      # 拷贝到自己
      $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
      # 拷贝到两台slaves机器上
      $ scp ~/.ssh/id_rsa.pub dev@192.168.1.132:~/.ssh/authorized_keys
      $ scp ~/.ssh/id_rsa.pub dev@192.168.1.133:~/.ssh/authorized_keys
      修改 .ssh目录和authorized_keys 文件的权限
    • #在三台机器上执行以下命令
      $ chmod 600 ~/.ssh/authorized_keys
      # 在两台 slaves 上执行以下命令
      $ chmod 700 ~/.ssh
      测试,看看 master 是否可以无密码登陆两台slave
    • #在 master执行
      $ ssh 192.168.1.132
      $ exit
      $ ssh 192.168.1.133
      $ exit
      如果不需要密码,则说明配置成功了。
      如果登陆不上,试试先关闭两台slaves的防火墙 $ sudo service iptables stop
    • 修改6个配置文件

      在 master 上修改配置文件。

      编辑 conf/hadoop-env.sh,设置 JAVA_HOME。

      在master上编辑 conf/hadoop-env.sh,注释掉第8行的JAVA_HOME,设置正确的JDK位置,确保集群中所有机器的JDK都安装在这个位置,这样待会儿后面可以用scp命令把master的6个配置文件(hadoop-env.sh, core-site.xml, hdfs-site.xml, mapred-site.xml, masters, slaves)拷贝到所有slaves机器上,这样其他机器就不用重复进行配置了。

      conf/masters:

      master
      conf/slaves:

      slave01
      slave02
      这两个配置文件的作用是,指定131作为master, 132和133为 slaves。

      conf/core-site.xml:
      <configuration>
          <property>
              <name>fs.default.name</name>
              <value>hdfs://master:9000</value>
          </property>
      </configuration>

      conf/hdfs-site.xml:
      <configuration>
           <property>
               <name>dfs.name.dir</name>
               <value>/home/dev/hdfs/name</value>
           </property>
           <property>
               <name>dfs.data.dir</name>
               <value>/home/dev/hdfs/data</value>
           </property>
      </configuration>
      要在master创建 /home/dev/hdfs/name 目录,在 slaves上创建 /home/dev/hdfs/data 目录,并chmod g-w /home/dev/hdfs/data(权限不对的话datanode无法启动)。

      conf/mapred-site.xml:
      <configuration>
          <property>
              <name>mapred.job.tracker</name>
              <value>master:9001</value>
          </property>
      </configuration>
    • 将配置文件拷贝到所有slaves
      $ cd ~/hadoop-1.1.2/conf/
      $ scp hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml masters slaves dev@192.168.1.132:~/hadoop-1.1.2/conf/
      $ scp hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml masters slaves dev@192.168.1.133:~/hadoop-1.1.2/conf/
    • 运行 hadoop

      在master上执行以下命令,启动hadoop

      $ cd ~/hadoop-1.1.2/
      #只需一次,下次启动不再需要格式化,只需 start-all.sh
      $ bin/hadoop  namenode -format
      $ bin/start-all.sh
    • 检查是否启动成功

      在master上执行:
      $ jps
      2615 NameNode
      2767 JobTracker
      2874 Jps

      在一台slave上执行:
      $ jps
      3415 DataNode
      3582 TaskTracker
      3499 SecondaryNameNode
      3619 Jps
      在另一台slave上执行:
      $ jps
      3741 Jps
      3618 DataNode
      3702 TaskTracker
      可见进程都启动起来了,说明hadoop运行成功。


  5. 运行wordcount例子,进一步测试是否安装成功
    • 将输入数据拷贝到分布式文件系统中:
      $ cd ~/hadoop-1.1.2/
      $ bin/hadoop fs -put conf input  (这里我的程序有问题: put: Target input/conf is a directory)
    • 运行 Hadoop 自带的例子:
      $ bin/hadoop jar hadoop-examples-*.jar wordcount input output
      查看输出文件:

      $ bin/hadoop s -ls output
      $ bin/hadoop fs -cat output/part-r-00000
      如果能看到结果,说明这个例子运行成功。
    • 停止 hadoop集群

      在master上执行:

      $ bin/stop-all.sh
参考文献
http://www.cnblogs.com/xia520pi/archive/2012/05/16/2504132.html 如何配置无密码登陆SSH
http://www.yanjiuyanjiu.com/blog/20130612/           如何在centos上配置hadoop
http://developer.yahoo.com/hadoop/tutorial/module3.html#vmware-install      Yahoo 的hadoop
原创粉丝点击