加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

完全分布式hadoop集群搭建SSH免密码登录(详细版)

(2016-07-16 21:19:37)
分类: hadoop

该博文为初学hadoop者并且linux基础薄弱的同学而作,大鸟级别的同学请不要嫌弃啰嗦,因为并不是所有人都有基础,这也是本人写作初衷,本人于小豆站长为整理该博文也 花费了不少休息时间,所以转载请注明出处,谢谢

按照该文档搭建完全分布式hadoop集群,需要从该文档环境准备步骤逐步操作,否则会出现环境版本不一致导致的不必要错误。按步骤逐步操作应该不会出现问题,但是也需要同学们操作的过程中细心,毕竟我不能保证哪里是否打错了字

 先详细说明下实验通过的集群情况,我的笔记本电脑8G内存,装了3个虚拟机,虚拟机是linux系统,12从搭建。

 环境准备:

       1VMware-workstation-full-11.1.0.58002.1428919414,虚拟机

       2CentOS-7.0-1406-x86_64-DVD

       3hadoop-2.2.0-x64

       4jdk-7u79-linux-x64

 

 

 

开始搭建

 

1,安装虚拟机

 

  虚拟机的安装很简单,一般情况下按默认安装即可,但是这个根据自己的情况而定。虚拟机搭建完毕后安装CentOS   linux系统,安装3CentOS   linux系统,每个系统都新建一个hadoop用户,以后大部分步骤都是在hadoop用户下操作的,虽然该文档要求都使用统一的hadoop用户,但是并不是一定要使用hadoop用户,因为用户相同,方便不少操作,也方便初学者学习。下面是我环境的分配情况:

 

    192.168.239.128     master

    192.168.239.129     slave1

    192.168.239.130     slave2


2linux root权限分配以及修改hosts文件

 

    因为一些操作需要用到root权限,所以要给hadoop用户分配sudo权限。

 

   1)命令:su   root  (切换到root用户)

        输入密码

   2)命令:chmod u+w /etc/sudoers (给sudoers增加写权限)

   3)命令:vi /etc/sudoers  (修改sudoers文件)

        执行命令后会进入sudoers文件的查看模式,该模式下按“i”进入文件修改模式,

        然后在root ALL=(ALL)  ALL下方增加hadoop ALL=(ALL)NOPASSWD:ALL   esc”键推出修改模式,大写模式下,按两次“z”保存退出。

 

    4)命令:chmod u-w /etc/sudoers (撤销sudoers文件的写权限)

    5)命令:vi /etc/hosts     (修改hosts文件)

         按下面的格式修改,切记,ip地址要写自己的    

          192.168.239.128    master

          192.168.239.129     slave1

          192.168.239.130     slave2


 http://s13/mw690/002JZ2FHgy6ViR2tQKMbc&690


3.安装JDK

    这个版本linux  cenos里面自带的有jdk,但是没有测试能不能用(能用的可能性应该不大),所以,先把这个自带版本的jdk卸载了,然后再安装自己的jdk

    1)命令:Java -version   (查看jdk版本)

http://s1/mw690/002JZ2FHgy6ViR63tHGb0&690

    2)命令:rpm -qa|grep jdk(查看jdk的详细信息,会显示详细的jdk信息,很重要的,下一步卸载的时候需要使用)

http://s11/mw690/002JZ2FHgy6ViR8RoMO6a&690

    3)命令:rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.51-2.4.5.5.el7.x86_64

执行命令后再次执行rpm -qa|grep jdk,如果还有显示再次执行rpm -e --nodeps 命令,把显示的软件卸载干净

http://s1/mw690/002JZ2FHgy6ViRc4Zq040&690

    4)执行命令:Java -version

http://s3/mw690/002JZ2FHgy6ViRfvR9862&690

此时,说明原有的版本jdk已经删除干净了,可以安装自己的jdk

 

    5)在第(4)步成功完成后才可以执行该步骤,否则会报错。

         命令sudo mv jdk-7u79-linux-x64.rpm  /usr

http://s7/mw690/002JZ2FHgy6ViRmUyVw76&690

6 解压缩包

进入/usr 目录下解压缩包

命令:sudo rpm -ivh jdk-7u79-linux-x64.rpm

http://s5/mw690/002JZ2FHgy6ViRyYiHy74&690

执行java -version  出现版本信息如下说明安装成功


 http://s11/mw690/002JZ2FHgy6ViRzXCMW2a&690


 

 

7)配置Java环境变量

 

命令:sudo vim /etc/profile
      
在最后增加
 export JAVA_HOME=/usr/java/jdk1.7.0_79
 export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
      export PATH=$PATH:$JAVA_HOME/bin
      
然后使用sudo source /etc/profile  否则修改不会生效

 

 

到此,jdk的安装和配置就已经完成了。

 

 

 

4hadoop安装

1)把安装包移动到/usr目录下

命令:sudo mv hadoop-2.2.0-x64.tar.gz  /usr

http://s9/mw690/002JZ2FHgy6ViRICYo8b8&690

(2)解压缩包

命令:sudo  tar zxvf hadoop-2.2.0-x64.tar.gz

http://s13/mw690/002JZ2FHgy6ViRXUFyY6c&690

(3)修改hadoop目录名称

命令:sudo mv hadoop-2.2.0 hadoop

 

http://s9/mw690/002JZ2FHgy6ViROCtiE48&690

 

(4)hadoop安装完毕需要配置hadoop的一些文件,准备工作先建立几个文件夹

~/dfs/name

~/dfs/data

 ~/tmp

命令依次如下:mdir  ~/dfs

              mdir  ~/dfs/name

              mdir  ~/dfs/data

              mdir  ~/tmp

如下图

 

http://s14/mw690/002JZ2FHgy6ViRSXs3b1d&690

 

5)配置hadoop文件

 

首先,需要配置的文件都在hadoop目录的etc目录的hadoop目录下,进入该目录

命令:cd /usr/hadoop/etc/hadoop

          <1>,配置hadoop-env.sh,命令:sudo vi hadoop-env.sh

              修改JAVA_HOME值(export JAVA_HOME= /usr/java/jdk1.7.0_79

          <2>配置yarn-env.sh, 命令:sudo vi yarn-env.sh

              修改JAVA_HOME值(export JAVA_HOME= /usr/java/jdk1.7.0_79

          <3>配置slaves  命令:sudo vi slaves 然后如下图添加slave1slave2 slaves                                                                                 这个文件里面保存所有slave节点

http://s5/mw690/002JZ2FHgy6ViRW2tUw14&690

           <4>配置core-site.xml  命令:sudo vi core-site.xml  添加如下代码:

1.            

2.        

3.                  fs.defaultFS

4.                  hdfs://master:8020

5.        

6.        

7.                  io.file.buffer.size

8.                  131072

9.          

10.      

11.               hadoop.tmp.dir

12.               file:/home/hadoop/tmp

13.               Abase for other temporary   directories.

14.      

15.        

16.               hadoop.proxyuser.hadoop.hosts

17.               *

18.      

19.      

20.               hadoop.proxyuser.hadoop.groups

21.               *

22.      

23.

<5>配置hdfs-site.xml,命令:sudo vi hdfs-site.xml添加如下代码:

1. 

2.        

3.                  dfs.namenode.secondary.http-address

4.                 master:9001

5.        

6.       

7.               dfs.namenode.name.dir

8.               file:/home/hadoop/dfs/name

9.        

10.      

11.              dfs.datanode.data.dir

12.              file:/home/hadoop/dfs/data

13.      

14.      

15.               dfs.replication

16.               3

17.        

18.        

19.                 dfs.webhdfs.enabled

20.                  true

21.         

22.

 

<6>配置mapred-site.xml,该文件在此版本的hadoop里没有,先mapred-site.xml.template复制一份并命名为mapred-site.xml,该方法如下图,然后在执行命令:sudo vi mapred-site.xml添加如下代码:

http://s8/mw690/002JZ2FHgy6ViS2iQjZ77&690


  1.                                                                             mapreduce.framework.name
  2.                 yarn
  3.            
  4.          
  5.                   mapreduce.jobhistory.address
  6.                   master:10020
  7.          
  8.          
  9.                 mapreduce.jobhistory.webapp.address
  10.                 master:19888
  11.       

<7>配置yarn-site.xml,命令:sudo vi yarn-site.xml添加如下代码:

1. 

2.          

3.                 yarn.nodemanager.aux-services

4.                 mapreduce_shuffle

5.          

6.                                                                          

7.  yarn.nodemanager.aux-services.mapreduce.shuffle.class

8.                 org.apache.hadoop.mapred.ShuffleHandler

9.          

10.        

11.               yarn.resourcemanager.address

12.               master:8032

13.      

14.      

15.               yarn.resourcemanager.scheduler.address

16.               master:8030

17.      

18.      

19.            yarn.resourcemanager.resource-tracker.address

20.             master:8031

21.      

22.      

23.              yarn.resourcemanager.admin.address

24.               master:8033

25.      

26.      

27.               yarn.resourcemanager.webapp.address

28.               master:8088

29.      

30.

 

         

 

6)配置hadoop环境变量

 

sudo vim /etc/profile
      
在最后增加

export HADOOP_PREFIX=/usr/hadoop

 

 

 

至此,hadoop已经安装和配置完毕。

 

 

 

7)把hadoop安装包拷贝到slave1slave2两个节点下,这样就不用重复安装和配置hadoop

命令:sudo scp -r /usr/hadoop hadoop@192.168.239.129:~/(注意:把ip改成自己的slave ip

 

 

 

 

 

至此,三台虚拟机都已经搭建好了环境,理论上可以运行了,但是节点之间访问需要输入密码,我们需要配置节点之间的无密码访问服务ssh

 

 

5,配置SSH无密码访问

 

Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSHSecure Shell)来启动和停止各个DataNode上的各种守护进程的。这就必须在节点之间执行指令的时候是不需要输入密码的形式,所以我们需要配置SSH运用无密码公钥认证的形式,这样NameNode使用SSH无密码登录并启动DataName进程,同样原理,DataNode上也能使用SSH无密码登录到NameNode

 

1)命令:rpm qa | grep openssh

            rpm qa | grep rsync

查看是否安装ssh服务,该版本环境已经安装该服务,所以无需安装,没有的情况下需要安装。

2)配置master无密码登录所有的slave

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

Master机器上生成密码对

命令:ssh-keygen t rsa  生成其无密码密钥对,一路回车键,生成的密钥对:id_rsaid_rsa.pub,默认存储在"/home/hadoop/.ssh"目录

  

命令:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys id_rsa.pub追加到授权的key里面去

命令:chmod 600 ~/.ssh/authorized_keys修改文件"authorized_keys"权限,这步骤很重要,很多莫名其妙的错误有可能就是权限的问题

 

命令:sudo vi /etc/ssh/sshd_config (修改SSH配置文件"/etc/ssh/sshd_config"),修改如下内容RSAAuthentication yes # 启用 RSA 认证

PubkeyAuthentication yes # 启用公钥私钥配对认证方式

AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径(和上面生成的文件同)

 

 

命令:service sshd restart(重新启动服务)

 

命令:ssh localhost  (测试是否成功)

 

下面是把公钥复制到所有的slave节点上去

 

命令:scp ~/.ssh/id_rsa.pub hadoop@192.168.239.129:~/(记得改成自己的ip,这个是我的slave1ip,就是把master节点的公钥发送到了slave1的根目录下了)

 

 

到这里,我的master节点的公钥已经发送到了slave1的根目录下,现在登录slave1节点,在slave1节点虚拟机上操作下面的内容

 

命令:chmod 700 ~/.ssh(修改.ssh权限)

 

命令:cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

       chmod 600 ~/.ssh/authorized_keys

        着两行命令是把master的公钥追加到Slave1.Hadoop的授权文件"authorized_keys"中去,第二行命令是修改该授权文件的权限

 

 

 

命令:sudo vi  /etc/ssh/sshd_config    (修改ssh配置文件,和上面master节点配置方式一样,参考下上面的步骤,在此不在重复)

 

 

 

到这里,master节点已经可以无密码访问slave1节点了,现在在master节点虚拟机上操作,测试是否已经成功,命令是:ssh 192.168.239.129,如果不输入密码登录成功就说明master无密码访问slave1成功.

 

 

注意:这里只是配置了master节点无密码访问slave1,还需要配置master无密码访问slave2节点、slave1无密码访问master节点、slave2无密码访问master节点,slave1无密码访问slave2节点、slave2无密码访问slave1节点。每次配置的步骤和上面讲述的master节点无密码访问slave1节点一样的,原理就是:::A若想无密码访问B,就需要把公钥发送给BBA发来的公钥添加到自己的授权文件里。

 

 

 

 

所有的SSH配置完毕,整个分布式的集群也就搭建完成了,下面是启动给节点虚拟的的效果图。

 

 

 

master节点虚拟机上操作如下:

 

<1>,命令: ./bin/hdfs namenode -format(格式化namenode节点)

<2>命令:./sbin/start-all.sh  (启动节点)

<3>命令:jps   (检查启动的节点,如下图显示,master节点全部启动成功)

http://s6/mw690/002JZ2FHgy6ViSgN46p55&690

 

 

 

slave1节点操作如下内容:

 

<1>命令:./sbin/start-all.sh  (启动节点)

<2>命令:jps   (检查启动的节点,如下图显示,slave1上节点全部启动成功,因为从节点主要就是启动Datanode节点)

http://s3/mw690/002JZ2FHgy6ViSjWR9Md2&690

 

slave2节点操作如下内容:

 

<1>命令:./sbin/start-all.sh  (启动节点)

<2>命令:jps   (检查启动的节点,如下图显示,slave2上节点全部启动成功,因为从节点主要就是启动Datanode节点)

 

http://s9/mw690/002JZ2FHgy6ViSkXUcE98&690

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有