搭建hadoop分布式集群

来源:互联网 发布:传奇登陆器源码 编辑:程序博客网 时间:2024/06/05 21:09

搭建hadoop分布式集群

  • ~ jdk安装
  • ip修改
    • vi /etc/sysconfig/network-scripts/ifcfg-eth0
      • DEVICE=eth0
      • BOOTPROTO=none
      • HWADDR=00:0C:29:3B:FE:E6
      • ONBOOT=yes
      • NETMASK=255.255.255.0
      • IPADDR=192.168.129.103
      • TYPE=Ethernet  
      • USERCTL=no
      • IPV6INIT=no
      • PEERDNS=yes
      • GATEWAY=192.168.129.254
    • service network restart
    • neat或者netconfig
      • 在图形界面修改
  • hostname修改
    • hostname hadoop
    • vi /etc/sysconfig/network
      • 修改HOSTNAME=hadoop
    • vi /etc/hosts
      • 删除127.0.0.1和localhost,增加所有集群机器的ip和主机名
    • reboot重启机器
  • 增加hadoop用户
    • useradd -d /home/hadoop -s /bin/bash -m hadoop
      • useradd命令用来建立用户帐号和创建用户的起始目录,使用权限是终极用户
      • -d:指定用户登入时的启始目录
      • -m:自动建立用户的登入目录
      • -s:指定用户登入后所使用的shell
    • passwd hadoop
    • 给hadoop用户添加权限
      • vi /etc/sudoers文件: 在root ALL=(ALL)       ALL          下面添加hadoop ALL=(ALL)       ALL
    • 相关命令
      • 查看所有用户和组
        • cat /etc/group

          cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1"|"$3"|"$4 }'|more

      • userdel可删除用户帐号与相关的文件。若不加参数,则仅删除用户帐号,而不删除相关文件。
        • userdel -r hadoop
  • SHH免密码登录
    • + -SSH免密码登录
      • 如果我们希望master 结点不需要密码就能使用ssh连接到slave结点,我们需要将master结点上的~/.ssh/id_dsa.pub的内容,添加到slave结点的~/.ssh/authorized_keys这个文件中。

        • 因为Hadoop需要通过SSH登录到各个节点进行操作

        master生成公私钥,将公钥发给slave机器,slave保存公钥到authorized_keys

        • SSH无密码原理    Master(NameNode | JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器Salve(DataNode | Tasktracker)上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Slave上。当Master通过SSH连接Salve时,Salve就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端Master复制到Slave上。

          A机器ssh登录B机器无需输入密码; 加密方式选 rsa|dsa均可以,默认dsa  做法: 1、登录A机器  2、ssh-keygen -t [rsa|dsa],将会生成密钥文件和私钥文件 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub 3、将 .pub 文件复制到B机器的 .ssh 目录, 并 cat id_dsa.pub >> ~/.ssh/authorized_keys 4、大功告成,从A机器登录B机器的目标账户,不再需要密码了;

        (1)CentOS默认没有启动ssh无密登录,去掉/etc/ssh/sshd_config其中2行的注释,每台服务器都要设置, vi /etc/ssh/sshd_config #RSAAuthentication yes #PubkeyAuthentication yes

        (2)ssh-keygen -t rsa,生成key,都不输入密码,一直回车,~就会生成.ssh文件夹,每台服务器都要设置,

        (3)合并登录方的公钥到authorized_keys文件,

        • 在Master服务器,进入~/.ssh目录,通过SSH命令合并,
          • cat id_rsa.pub>> authorized_keys
          • ssh hadoop@192.168.0.183 cat ~/.ssh/id_rsa.pub>> authorized_keys
          • ssh hadoop@192.168.0.184 cat ~/.ssh/id_rsa.pub>> authorized_keys

        (4)把Master服务器的authorized_keys、known_hosts复制到Slave服务器的/root/.ssh目录

        (5)完成,ssh hadoop@192.168.0.183、ssh hadoop@192.168.0.184就不需要输入密码了

        注意问题

        • authorized_keys的权限必须为644
        • .ssh必须为711
          • chmod 711 ~/.ssh
        • 过高的权限不能通过ssh-add命令,过低的权限无法实现免密码登录。
    • master
      • 执行ssh-keygen -t rsa
        • ssh-add id_rsa
        • ssh-agent bash
        • ssh-add id_rsa
      • scp ~/.ssh/id_rsa.pub hadoop@slave1.hadoop:~/id_rsa_master.pub
        • 拷贝公钥到要登录的机器
    • 要登录的slave
      • cd ~
      • ssh-keygen -t rsa
        • 一直回车
      • cat id_rsa_master.pub >> .ssh/authorized_keys
    • 是否成功
      • master
        • ssh hadoop@slave1.hadoop如果不需要密码则成功
      • 检查问题
        • 文件的权限
          • chmod 711 ~/.ssh
          • chmod 644 ~/.ssh/authorized_keys
        • 未开启无密码登录
          • 去掉/etc/ssh/sshd_config其中2行的注释,双方服务器都要设置
          • vi /etc/ssh/sshd_config
            • #RSAAuthentication yes
            • #PubkeyAuthentication yes
  • hadoop包解压
    • tar –zxvf hadoop-2.6.0.tar.gz
    • mv hadoop-2.6.0 hadoop
    • chown –R hadoop:hadoop hadoop
  • 设置环境变量
    • vi /etc/profile
    • ## -------------------JAVA------------------------##
    • JAVA_HOME=/usr/java/jdk1.6.0_45
    • CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar  
    • export PATH=$PATH:$JAVA_HOME/bin
    • ## -------------------HADOOP PATH------------------------##
    • export HADOOP_HOME=/usr/hadoop
    • export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  • 修改配置
    • 配置成功后,将hadhoop复制到各个从服务器上
    • scp -r /home/myhadoop/hadoop-2.7.1 myhadoop@slave1.hadoop:/home/myhadoop/
    • hadoop-env.sh
      • 增加JAVA_HOME变量
      • export JAVA_HOME=/usr/java/jdk1.7.0_79
    • core-site.xml
      • 配置HDFS的ip和端口号
      • fs.defaultFS
        • hdfs://master.hadoop:9000
      • hadoop.tmp.dir
        • file:/home/myhadoop/hadoop-2.7.1/tmp
      • io.file.bffer.size
        • 131702
    • hdfs-site.xml
      • dfs.namenode.name.dir
      • dfs.datanode.data.dir
    • yarn-site.xml
      • yarn.nodemanager.aux-services
        • mapreduce_shuffle
      • yarn.resourcemanager.hostname
        • master.hadoop
      • yarn.resourcemanager.aux-services.mapreduce.shuffle.class
        • org.apache.hadoop.mapred.ShuffleHandler
    • mapred-site.xml
      • mapreduce.framework.name
        • yarn
  • 主服务器上执行bin/hdfs namenode -format
    • 只能执行一次,多次执行需要修改所有节点的集群id与namenode中的一致,或者清空name和data目录
  • sbin目录下执行 ./start-all.sh
    • sbin/hadoop-daemon.sh --config /home/myhadoop/hadoop-2.7.1/etc/hadoop --script hdfs start namenode  

      sbin/hadoop-daemons.sh --config /home/myhadoop/hadoop-2.7.1/etc/hadoop --script hdfs start datanode  

      sbin/start-dfs.sh  

      yarn-daemons.sh --config /home/myhadoop/hadoop-2.7.1/etc/hadoop start nodemanager  

      yarn-daemon.sh --config /home/myhadoop/hadoop-2.7.1/etc/hadoop  start proxyserver  

      sbin/start-yarn.sh  sbin/mr-jobhistory-daemon.sh --config /home/myhadoop/hadoop-2.7.1/etc/hadoop start historyserver        

      sbin/mr-jobhistory-daemon.sh --config  /home/myhadoop/hadoop-2.7.1/etc/hadoop stop historyserver

  • 测试
    • 向hadoop集群系统提交一个mapreduce任务

      bin/hdfs dfs -mkdir /tmp 在虚拟分布式文件系统上创建一个测试目录

      tmp bin/hdfs dfs -copyFromLocal ./LICENSE.txt /tmp 将当前目录下的LICENSE文件复制到虚拟分布式文件系统中

      bin/hdfs dfs -ls /tmp  查看文件系统中是否存在我们所复制的文件  

      运行如下命令向hadoop提交单词统计任务 bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar wordcount /tmp/LICENSE.txt /tmp-output  

      查看输出结果 bin/hdfs dfs -cat /tmp/* 

原创粉丝点击