hadoop学习之hadoop2.8.0完全分布式集群安装

来源:互联网 发布:java自己写一个线程池 编辑:程序博客网 时间:2024/05/21 09:20

目录(?)[-]

  1. 全部软件下载百度云链接失效请评论告诉我密码1kcl
  2. 1准备工作 
    1. 1软硬件环境 
    2. 2集群网络环境 
    3. 3注意 
  3. 环境搭建 
    1. 1操作系统安装 
    2. 2本地环境配置 
    3. 3操作系统设置 
    4. 4SSH无密码验证配置 
  4. 软件安装及环境配置 
    1. 1Java安装及其环境配置 
    2. 32Hadoop安装及其环境配置 
    3. 33Slave服务器上的文件安装及配置 
  5. 启动及验证 
    1. 1启动 
    2. 运行Hadoop
      1. 运行HDFS
        1. 格式化NameNode
        2. 启动NameNode
        3. 启动DataNode
      2. 运行YARN
    3. 2验证测试 
  6. 所遇到的问题及解决方法 
    1. 51关于 Warning HADOOP_HOME is deprecated 
    2. 2SSH设置不成功 
    3. 3Datanode连接不上 

网上的资料很多都不是最新的,坑死宝宝了。踩过很多坑后宝宝挥泪写下详细过程。大哭

本文主要讲解Hadoop完全分布式的搭建,使用vm建立三个相同配置的主机进行搭建。本文讲解所有详细步骤希望对大家有用。

全部软件下载百度云链接:失效请评论告诉我密码:1kcl

1.准备工作 

    1.1软硬件环境 

  • 主机操作系统:处理器:i5,主频:3.2G,内存:8G,Windows64 
  • 虚拟机软件:VMware Workstation 10 
  • 虚拟操作系统:CentOs-6.6 64位 
  • JDk:1.8.0_121 64位 
  • Hadoop:2.8.0

    1.2集群网络环境 

集群包括3个节点,1个Namenode、2个Datanode,其中节点之间可以相互ping通。节点IP地址和主机名如下: 


序号

IP地址

机器名

类型

用户名

1

192.168.6.67

Master.Hadoop

Namenode

Hadoop/root

2

192.168.6.68

Slave1.Hadoop

Datanode

Hadoop/root

3

192.168.6.70

Slave2.Hadoop

Datanode

Hadoop/root


所有节点均是CentOS系统,防火墙均禁用,所有节点上均创建了一个Hadoop用户,用户主目录是/home/Hadoop。所有节点上均创建了一个目录/usr/hadoop,并且拥有者是hadoop用户。因为该目录用于安装hadoop,用户对其必须有rwx权限。(一般做法是root用户下在/usr下创建hadoop目录,并修改该目录拥有者为hadoop(chown –R Hadoop: /usr/hadoop),否则通过SSH往其他机器分发Hadoop文件会出现权限不足的提示。 

如果不想用Hadoop用户,用root也可以。我刚开始用的是Hadoop,但对linux玩不转授权什么的没弄好,后期怒改root.博文大部分是之前写的,故只需要把ssh免密部分改成用root用户免密登录即可。

    1.3注意 

由于Hadoop要求所有机器上Hadoop的部署目录结构要求相同(因为在启动时按与主节点相同的目录启动其它任务节点),并且都有一个相同的用户名账户。参考各种文档上说的是所有机器都建立一个hadoop用户,使用这个账户来实现无密码认证。这里为了方便,分别在三台机器上都重新建立一个hadoop用户。 

    2.环境搭建 

      2.1操作系统安装 

对于Datanode类型的系统,可以先安装一个系统,然后利用VMWare的克隆功能,克隆多个相同的系统。如下图所示。 


 


VMWare下安装CentOs系统的教程直接在网上找。特别注意的是:所有系统的网络选择为桥接模式,并且由于本机是在无线网络上进行上网的,故还要设置VMnet0的信息:在编辑->虚拟网络编辑器···如下图: 

桥接网络是指本地物理网卡和虚拟网卡通过VMnet0虚拟交换机进行桥接,物理网卡和虚拟网卡在拓扑图上处于同等地位,那么物理网卡和虚拟网卡就相当于处于同一个网段,虚拟交换机就相当于一台现实网络中的交换机,所以两个网卡的IP地址也要设置为同一网段。 

 

在”桥接到”那一栏里选择所用的网卡类型。 

    2.2本地环境配置 

    (1)网络配置 

采用桥接来连接网络(适合有路由、交换机用户),配置静态IP来实现上网,局域网内通信。 

下图是盗来的得意

vim /etc/sysconfig/network-scripts/ifcfg-eth0 


DEVICE=eth0 #描述网卡对应的设备别名 

BOOTPROTO=static #设置网卡获得ip地址的方式,为static 

HWADDR=”00:23:54:DE:01:69” 

ONBOOT=”yes” #系统启动时是否设置此网络接口,设置为yes 

TYPE=”Ethernet” 

USERCTL=no 

IPV6INIT=no 

PEERDNS=yes 

NETMASK=255.255.255.0 #网卡对应的网络掩码 

IPADDR=192.168.1.127 #只有网卡设置成static时,才需要此字段 

GATEWAY=192.168.1.1 #设置为路由器地址,一般都是这个 

DNS1=202.112.17.33 #设置为本网络对应的,或者8.8.8.8 #google域名服务器


本次操作的配置图如下所示: 


 


(可以直接在Master机上设置好,然后通过scp命令将该文件传递给所有的Slave,然后在Slave中修改相应的IPADDR即可,其它不变) 

注意:这里需要注意还要改一个东西,因为scp过去的硬件地址是一样的必须修改下: 

第一:修改vim /etc//etc/udev/rules.d/ 70-persistent-net.rules 

将其中的名为eth0的网卡删掉。同时将eth1的网卡名修改为eth0 

第二:修改vim /etc/sysconfig/network-scripts/ifcfg-eth0 

将HWADDR修改为刚刚看见的eth1的地址。 


    (2)配置hosts文件 

“/etc/hosts”这个文件是用来配置主机将用的DNS服务器信息,是记载LAN内接续的各主机的对应[HostName IP]用的。当用户在进行网络连接时,首先查找该文件,寻找对应主机名对应的IP地址。 

在进行Hadoop集群配置中,需要在”/etc/hosts”文件中添加集群中所有机器的IP与主机名,这样Master与所有的Slave机器之间不仅可以通过IP进行通信,而且还可以通过主机名进行通信。 

所以在所有的机器上的”/etc/hosts”文件中都要添加如下内容: 

192.168.6.67  Master.Hadoop 

192.168.6.68  Slave1.Hadoop 

192.168.6.70  Slave2.Hadoop 

 


(同样,可以直接在Master机上设置好,然后通过scp命令将该文件传递给所有的Slave) 

    2.3操作系统设置 

在Hadoop安装过程中需要关闭防火墙和SElinux,否则会出现异常。 

    (1)关闭防火墙 
  • service iptables status 查看防火墙状态,如下所示表示iptables已经开启: 

 

  • 关闭防火墙:chkconfig iptables off 
关闭后是这样的:

    (2)关闭SElinux 
  • 使用getenforce命令查看是否关闭 
  • 修改/etc/selinux/config 文件 

 


注意:修改后要重启系统,才能有效。 

    2.4SSH无密码验证配置 

准备工作: 

1. 在三个虚拟机上设定Hadoop用户: 

adduser Hadoop #在root用户下 

passwd Hadoop #输入两次密码 

2. 在Hadoop用户下建立.ssh文件夹 

mkdir ~/.ssh 

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

SSH之所以能够保证安全,原因在于它采用了公钥加密。过程如下: 

(1)远程主机收到用户的登录请求,把自己的公钥发给用户。 

(2)用户使用这个公钥,将登录密码加密后,发送回来。 

(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。 


注意:如果你的Linux没有安装SSH,请首先安装SSH。 


    3.配置Master无密码登录所有Salve 


    (1)在Master节点上执行以下命令: 

ssh-keygen –t rsa –P ” 


 


运行后询问其保存路径时直接回车采用默认路径。生成的密钥对:id_rsa(私钥)和id_rsa.pub(公钥),默认存储在”/home/用户名/.ssh”目录下。 


查看“/home/用户名/”下是否有“.ssh”文件夹,且“.ssh”文件下是否有两个刚生产的无密码密钥对。 


    (2)接着在Master节点上做如下配置,把id_rsa.pub追加到授权的key里面去。 

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 


 


查看”.ssh”文件夹: 

 


查看下authorized_keys的权限。(很重要!) 

如果权限不对则利用如下命令设置该文件的权限: 


chmod 700 ~/.ssh #注意:这两条权限设置特别重要,决定成败。 

chmod 600 ~/.ssh/authorized_keys 


在Master机器上输入:ssh localhost 命令测试一下,看是否能无密码登录自己。 


    (3)将公钥发给Slave 

在Master中将公钥id_rsa.pub通过scp命令发到每一个Slave的同一个地方(即/home/Hadoop/.ssh文件夹下),并且设置权限(非常重要) 

scp ~/.ssh/authorized_keys Hadoop@Slave1.Hadoop:~/.ssh/ 

scp ~/.ssh/authorized_keys Hadoop@Slave2.Hadoop:~/.ssh/ 


在Slave中设置权限(root用户下设置): 

chown –R Hadoop:Hadoop /home/Hadoop/.ssh 

chmod –R 700 /home/Hadoop/.ssh 

chmod 600 /home/Hadoop/.ssh/authorized_keys 

    (4)测试 

在Master下输入: 

ssh Slave1.Hadoop 

若不用密码则表示成功! 


重点:设置好权限!!! 


如果你用的是root用户则请忽略准备工作到此步的所有,你的免密设置从这里开始:

1、在Master 机器上输入:

[plain] view plain copy
  1. ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa  
[plain] view plain copy
  1. cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys  
[plain] view plain copy
  1.   
2、然后将其复制到两个slave机器上:

在slave1上输入:scp root@Master.Hadoop:~/.ssh/id_dsa.pub ~/.ssh/master_dsa.pub

        cat ~/.ssh/master_dsa.pub >> ~/.ssh/authorized_keys

在slave2上输入:

scp root@Master.Hadoop:~/.ssh/id_dsa.pub ~/.ssh/master_dsa.pub

        cat ~/.ssh/master_dsa.pub >> ~/.ssh/authorized_keys

3、测试 

在Master下输入: 

ssh Slave1.Hadoop 

若不用密码则表示成功! 

    3.软件安装及环境配置 

以下的软件安装先在Master上安装,全部安装完后,再通过复制到Slave中即可。 

    3.1Java安装及其环境配置 

所有的机器上都要安装JDK,并且版本要一样。现在就先在Master服务器安装,然后把安装好的文件传递给Slave即可。安装JDK以及配置环境变量,需要以”root”的身份进行。 

    (1)首先用root身份登录”Master.Hadoop”后在”/usr”下创建”java”文件夹,再将”jjdk-8u121-linux-x64.tar.gz”复制到”/usr/java”文件夹中,然后解压即可。 

    tar -zxvf jdk-8u121-linux-x64.tar.gz


查看”/usr/Java”下面会发现多了一个名为”jdk1.8.0_121”文件夹,说明我们的JDK安装结束,删除安装包即可,进入下一个”配置环境变量”环节。 

    (2)配置环境变量。编辑”/etc/profile”文件,在后面添加Java的”JAVA_HOME”、”CLASSPATH”以及”PATH”内容如下: 

[plain] view plain copy
  1. export JAVA_HOME=/usr/java/jdk1.8.0_121  
  2. export JRE_HOME=/usr/java/jdk1.8.0_121/jre  
  3. export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH  
  4. export PATH=$JAVA_HOME/bin:$PATH  


如下图所示: 


保存并退出,执行下面命令使其配置立即生效。 

source /etc/profile

重点说明:PATH变量要先把$JAVA_HOME放在第一位置,这样新安装的JDK能作为第一选择,否则,系统还是以原来的JDK为选择。 

    (3)验证 

java –version  


    3.2Hadoop安装及其环境配置 

    (1)首先用root用户登录”Master.Hadoop”机器,将下载的”hadoop-2.8.0.tar.gz”复制到/usr目录下。然后进入”/usr”目录下,用下面命令把”hadoop-2.8.0.tar.gz”进行解压,并将其重命名为”hadoop”,把该文件夹的读权限分配给普通用户hadoop,然后删除”hadoop-2.8.0.tar.gz”安装包。 

    cd /usr 

    tar –xzvf hadoop-2.8.0.tar.gz 

    mv hadoop-2.8.0.tar.gz  hadoop 

    chown –R hadoop:hadoop hadoop 

    rm -rf hadoop-2.8.0.tar.gz


    (2)把Hadoop的安装路径添加到”/etc/profile”中。 

    # set hadoop path 

[plain] view plain copy
  1. export HADOOP_HOME=/usr/hadoop  
  2. export PATH=$PATH:$HADOOP_HOME/bin  


    (3)配置hadoop-env.sh,并确认生效 

该”hadoop-env.sh”文件位于”/usr/hadoop/etc/hadoop”目录下。 

在文件中修改下面内容: 

[plain] view plain copy
  1. export JAVA_HOME=/usr/java/jdk1.8.0_121  

(此处的JAVA_HOME跟之前Java中环境配置的一样) 


source hadoop-env.sh 

hadoop version  


    (4)在/usr/hadoop目录下创建子目录 

cd /usr/hadoop 

mkdir tmp 

mkdir hdfs 

cd hdfs

mkdir name

mkdir tmp

mkdir data


    (5)配置core-site.xml文件 在/usr/hadoop/etc/hadoop”目录下。

修改Hadoop核心配置文件core-site.xml,这里配置的是HDFS master(即namenode)的地址和端口号。 

[html] view plain copy
  1. <configuration>  
  2.   
  3. <property>   
  4.     <name>hadoop.tmp.dir</name>   
  5.     <value>/usr/hadoop/tmp</value>   
  6.     <final>true</final>  
  7. <!--(备注:请先在 /usr/hadoop 目录下建立 tmp 文件夹) -->  
  8.     <description>A base for other temporary directories.</description>   
  9. </property>   
  10. <property>   
  11.     <name>fs.default.name</name>   
  12.     <value>hdfs://192.168.6.67:9000</value>  
  13. <!-- hdfs://Master.Hadoop:22-->  
  14.         <final>true</final>   
  15. </property>   
  16. <property>    
  17.      <name>io.file.buffer.size</name>    
  18.      <value>131072</value>    
  19. </property>  
  20. </configuration>   

    (6)配置hdfs-site.xml文件 

[html] view plain copy
  1. <configuration>  
  2.     <property>   
  3.         <name>dfs.replication</name>   
  4.         <value>2</value>   
  5.     </property>   
  6.     <property>   
  7.         <name>dfs.name.dir</name>   
  8.         <value>/usr/local/hadoop/hdfs/name</value>   
  9.     </property>   
  10.     <property>   
  11.         <name>dfs.data.dir</name>   
  12.         <value>/usr/local/hadoop/hdfs/data</value>   
  13.     </property>   
  14.     <property>    
  15.          <name>dfs.namenode.secondary.http-address</name>    
  16.          <value>master.hadoop:9001</value>    
  17.     </property>    
  18.     <property>    
  19.          <name>dfs.webhdfs.enabled</name>    
  20.          <value>true</value>    
  21.     </property>    
  22.     <property>    
  23.          <name>dfs.permissions</name>    
  24.          <value>false</value>    
  25.     </property>    
  26. </configuration>  


    (7)配置mapred-site.xml文件 

修改Hadoop中MapReduce的配置文件。 

[html] view plain copy
  1. <configuration>  
  2.     <property>    
  3.           <name>mapreduce.framework.name</name>    
  4.           <value>yarn</value>    
  5.     </property>     
  6. </configuration>  

(8)配置yarn-site.xml文件 

[html] view plain copy
  1. <configuration>  
  2.   
  3. <!-- Site specific YARN configuration properties -->  
  4. <property>    
  5.   <name>yarn.resourcemanager.address</name>    
  6.   <value>Master.Hadoop:18040</value>    
  7. </property>    
  8. <property>    
  9.   <name>yarn.resourcemanager.scheduler.address</name>    
  10.   <value>Master.Hadoop:18030</value>    
  11. </property>    
  12. <property>    
  13.   <name>yarn.resourcemanager.webapp.address</name>    
  14.   <value>Master.Hadoop:18088</value>    
  15. </property>    
  16. <property>    
  17.   <name>yarn.resourcemanager.resource-tracker.address</name>    
  18.   <value>Master.Hadoop:18025</value>    
  19. </property>    
  20. <property>    
  21.   <name>yarn.resourcemanager.admin.address</name>    
  22.   <value>Master.Hadoop:18141</value>    
  23. </property>    
  24. <property>    
  25.   <name>yarn.nodemanager.aux-services</name>    
  26.   <value>mapreduce_shuffle</value>    
  27. </property>    
  28. <property>    
  29.   <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>    
  30.   <value>org.apache.hadoop.mapred.ShuffleHandler</value>    
  31. </property>    
  32. </configuration>  


    (8)配置masters文件 

有两种方案: 


(1)第一种 

修改localhost为Master.Hadoop 

(2)第二种 

去掉”localhost”,加入Master机器的IP:192.168.6.67

为保险起见,启用第二种,因为万一忘记配置”/etc/hosts”局域网的DNS失效,这样就会出现意想不到的错误,但是一旦IP配对,网络畅通,就能通过IP找到相应主机。 

vim /usr/hadoop/etc/hadoop/masters  


    (9)配置slaves文件(Master主机特有) 

    与配置masters文件类似: (没有就把masters复制一个改个名)

    vim /usr/hadoop/etc/hadoop/slaves 

     

    3.3Slave服务器上的文件安装及配置 

在Master上装完JDK以及Hadoop以及配置好环境后,进行下步工作: 

    (1)将/usr/java文件夹复制到其他Slave 


    在Master中输入: 

scp –r /usr/java root@Slave1.Hadoop :/usr/ 

scp –r /usr/java root@Slave2.Hadoop :/usr/ 


    (2)将/etc/profile复制到其他Slave 


    在Master中输入: 

    scp /etc/profile root@Slave1.Hadoop :/etc/ 

    scp /etc/profile root@Slave2.Hadoop :/etc/ 


    (3)将/usr/hadoop文件夹复制到其他Slave 


    在Master中输入: 

    scp –r /usr/hadoop root@Slave1.Hadoop :/usr/ 

    scp –r /usr/hadoop root@Slave2.Hadoop :/usr/ 


    (4)改变权限 

    将/usr/java,/usr/hadoop的用户组改为Hadoop用户,设置权限为755。

      至此环境搭建完毕

      4.启动及验证 

        4.1启动 

    (1)格式化HDFS文件系统 启动文件都存于# /usr/hadoop/sbin

在”Master.Hadoop”上使用普通用户hadoop进行操作。(备注:只需一次,下次启动不再需要格式化,只需 start-all.sh) 

hadoop namenode –format 


    (2)启动hadoop 

在启动前关闭集群中所有机器的防火墙,不然会出现datanode开后又自动关闭。使用下面命令启动。 在/usr/hadoop/sbin

start-all.sh //此命令会启动集群所有节点


    (3)关闭hadoop 

    stop-all.sh //此命令会启动集群所有节点

    (4)还有一些启动单个节点,单个namenode,datanode,ResourceManager ,nodemanager的命令

    [html] view plain copy
    1. hadoop namenode -format   
    2. hadoop-daemon.sh start namenode    
    3. hadoop-daemons.sh start datanode    
    4. yarn-daemon.sh start resourcemanager    
    5. yarn-daemons.sh start nodemanager    

    (5)一步一步启动(用于帮助理解,理解的可以不看)

    运行Hadoop

    运行HDFS

    格式化NameNode

    执行命令:

    [plain] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. hadoop namenode -format  
    执行过程如下图:



    最后的执行结果如下图:



    启动NameNode

    执行命令如下:
    [plain] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. hadoop-daemon.sh start namenode  
    执行结果如下图:


    最后在Master上执行ps -ef | grep hadoop,得到如下结果:


    在Master上执行jps命令,得到如下结果:

    说明NameNode启动成功。

    启动DataNode

    执行命令如下:

    [plain] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. hadoop-daemons.sh start datanode  
    执行结果如下:


    在Slave1上执行命令,如下图:


    在Slave2上执行命令,如下图:


    说明Slave1和Slave2上的DataNode运行正常。

    以上启动NameNode和DataNode的方式,可以用start-dfs.sh脚本替代:


    运行YARN

    运行Yarn也有与运行HDFS类似的方式。启动ResourceManager使用以下命令:

    [plain] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. yarn-daemon.sh start resourcemanager  
    批量启动多个NodeManager使用以下命令:

    [plain] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. yarn-daemons.sh start nodemanager  
    以上方式我们就不赘述了,来看看使用start-yarn.sh的简洁的启动方式:


    在Master上执行jps:


    说明ResourceManager运行正常。

    在两台Slave上执行jps,也会看到NodeManager运行正常,如下图:

      4.2验证测试 

    (1)用”jps”命令测试 

在Master上用 java自带的小工具jps查看进程。 

 


在Slave1上用 java自带的小工具jps查看进程。 

 

注:上两幅图表示成功! 


    (2)用”hadoop dfsadmin -report”查看集群状态 

 


    (3)通过网页查看集群 

访问sourceManager :http://192.168.6.67:50070


    5.所遇到的问题及解决方法 

      5.1关于 Warning: $HADOOP_HOME is deprecated. 

hadoop安装完之后敲入hadoop命令时,老是提示这个警告: 

Warning: $HADOOP_HOME is deprecated. 

解决方案一:编辑”/etc/profile”文件,去掉HADOOP_HOME的变量设定,重新输入hadoop fs命令,警告消失。 

解决方案二:编辑”/etc/profile”文件,添加一个环境变量,之后警告消失: 

export HADOOP_HOME_WARN_SUPPRESS=1 

    5.2SSH设置不成功 

很有可能是因为权限设置的不对! 

    5.3Datanode连接不上 

有可能是Master和Slave的防火墙没有关掉。

阅读全文
0 0