VMware 下Hadoop集群环境搭建之虚拟机克隆,Hadoop环境配置

上一篇我们完成了ContOS网络配置以及JDK的安装,这一篇将在上一篇的基础上继续讲解虚拟机的克隆,hadoop环境搭建

传送门:
VMware 下Hadoop集群环境搭建之新建虚拟机
VMware 下Hadoop集群环境搭建之为虚拟机安装CentOS 6.7 64位系统
VMware 下Hadoop集群环境搭建之CentOS 6.7 网络配置的相关配置,JDK的安装

虚拟机克隆.

利用上一篇已经完成网络配置和jdk安装的虚拟机在克隆两台虚拟机.
1. 将拟机hadoop01关机.
2. 如动图演示那样,选中hadoop01,然后鼠标右键,在出来的菜单中选择 管理—>克隆:
这里写图片描述
3. 下一步:
这里写图片描述
4. 选中虚拟机中当前状态,然后下一步:
这里写图片描述
5. 选择创建完成克隆,然后下一步:
这里写图片描述
6. 这一步,将虚拟机名称更改为hadoop02,并将存储位置修改为与上一个虚拟机在相同文件夹下,其中每个虚拟机各自有一个文件夹,这里我的目录可能与上面两篇文章的目录有所不一样,原因是我发现之前的Hadoop就存了一个hadoop01,为了区分我的其他虚拟机,以及让每个虚拟机单独一个文件夹,我将Hadoop命名为hadoop01,并在上层目录下新建了一个bolg-hadoopes目录,然后将hadoop01拖到bolg-hadoopes下.注意,在改动了目录机构以后,在VMware中选中虚拟机可能就会报一个找不到虚拟机的错误,然后提示移除,移除就好了,然后VMware的菜单中 文件—>打开—>定位到hadoop01的位置,选中hadoop01.vmx打开即可.
这里写图片描述
这里写图片描述
7. 点击完成,等待克隆结束,就又创建了一个和上面那个一模一样的虚拟机:
这里写图片描述
这里写图片描述
8. 同样的方式,再克隆一台取名为hadoop03的虚拟机.
9. 分别开启刚克隆的这两台以及之前的那一台共3台虚拟机.
10. 用XShell登录到hadoop01,hadoop02,hadoop03,为避免混乱,在XShell中分别将3个虚拟机命名为h1,h2,h3.XShell连接到虚拟机的方式请参见上一篇文章.
这里写图片描述
11. 开启克隆的两台虚拟机的时候,我们会看到主机名都是hadoop1,ip也没有规律,这将给初学者的我们带来很大的不便,所以我决定将他们规划如下:
hadoop1(192.168.93.120),
hadoop2(192.168.93.121),
hadoop3(192.168.93.122)

分别修改克隆的两台虚拟机主机名和IP地址

  1. 编辑/etc/udev/rules.d/70-persistent-net.rules 这个文件:
    vim /etc/udev/rules.d/70-persistent-net.rules

    
    # PCI device 0x8086:0x100f (e1000)
    
    
    #这条是来自克隆的那台虚拟机的配置,将这条注释:原因是ATTR{address}=="00:0c:29:21:6f:26"的物理地址信息是来自克隆的虚拟机
    
    
    #SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:21:6f:26", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
    
    
    
    # PCI device 0x8086:0x100f (e1000)
    
    
    #将这条的NAME="eth1" 改成 NAME="eth0" 
    
    
    #经过物理地址信息查看对比,00:0c:29:64:74:a4才是当前这台机器对应的物理地址.
    
    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:64:74:a4", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
    
  2. 编辑网卡配置信息,修还物理地址和IP地址即可.物理地址查看方式请参见上一篇文章.
    vim /etc/sysconfig/network-scripts/ifcfg-eth0

    DEVICE=eth0
    HWADDR=00:0c:29:64:74:a4   #修改物理地址,物理地址请根据自己的VMware获取
    TYPE=Ethernet
    UUID=afcc5664-3e15-4768-b5ab-45f1c53f7a68
    ONBOOT=yes
    NM_CONTROLLED=yes
    BOOTPROTO=none
    IPADDR=192.168.93.121    #修改IP地址
    PREFIX=24
    GATEWAY=192.168.93.2
    DNS1=8.8.8.8
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=yes
    IPV6INIT=no
    NAME="System eth0"
    
  3. 修改主机名:
    vim /etc/sysconfig/network

    NETWORKING=yes
    HOSTNAME=hadoop2
    
  4. 分别编辑3台机器的hosts文件,在已有内容后面添加地址映射:
    vim /etc/hosts

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.93.120 hadoop1 www.hadoop1.com
    192.168.93.121 hadoop2 www.hadoop2.com
    192.168.93.122 hadoop3 www.hadoop3.com
    
  5. 重启克隆的两台机器.
  6. 测试3台机器之前是否可以相互通信.
    1. 用hadoop1分别ping hadoop2,hadoop3:
      这里写图片描述
    2. 用hadoop2分别ping hadoop1,hadoop3.
    3. 用hadoop3分别ping hadoop1,hadoop2.

新建用户并配置sudo权限

  1. 我们在安装CentOS系统的时候,因为直接用root用户而被警告,因为root用户权限过大,如果经常有删除修改操作,可能会有危险,接下来,我们在hadoop1上新建一个hadoop用户,之后搭建hadoop环境,都用hadoop用户来完成,除非特别说明.
  2. 添加hadoop用户
    useradd hadoop
  3. 给hadoop设置密码
    passwd hadoop
  4. 给hadoop配置sudo权限(在命令前加上sudo,可以执行root权限才能执行的命令)

    1. 编辑sudoers文件,在编辑之前我们可能查看一下sudoers的信息:
      ll /etc/sudoers

      -r--r-----. 1 root root 4002 Mar  2  2012 /etc/sudoers
      

      我们可以看到该文件连root用户都是只读的.所以要想修改该文件内容,需要先修改一下该文件的权限,给root添加写权限:
      chmod u+w /etc/sudoers
      编辑该文件:vim /etc/sudoers

      
      ##
      
      
      ## Allow root to run any commands anywhere 
      
      root    ALL=(ALL)       ALL
      
      #给hadoop用户添加sudo权限
      
      hadoop  ALL=(ALL)       ALL
      
      ## Allows members of the 'sys' group to run networking, software, 
      
      
      ## service management apps and more.
      
      
      # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
      
      
      ## Allows people in group wheel to run all commands
      
      
      # %wheel        ALL=(ALL)       ALL
      
      
      ## Same thing without a password
      
      
      # %wheel        ALL=(ALL)       NOPASSWD: ALL
      
      
      # 执行sudo权限时不需要输入密码
      
      %hadoop ALL=(ALL)       NOPASSWD: ALL
      
      ## Allows members of the users group to mount and unmount the 
      
      
  5. 测试sudo权限.

    1. 在hadoop的home下新建一个file1文件.
      touch /home/file1.
    2. 查看/home/file1. 信息:

      -rw-r--r--. 1 root root 0 May  1 00:32 /home/file1

      从文件信息 可以看出,只有root可以读写删除该文件.

    3. 切换到hadoop
      su hadoop
    4. 删除/home/file1文件
      rm -rf hadoop

      rm: cannot remove `/home/file1': Permission denied

      结果是删除文件失败,权限异常.

    5. 用添加sudo来删除
      sudo rm -rf /home/file1
      可以看到结果删除成功了,说明我们sudo权限配置成功.
  6. 在hadoop2,hadoop3上同样的分别新建一个hadoop用户,并配置sudo权限.

安装hadoop并配置相关文件.

  1. 在hadoop1上切换至hadoop用户,注意,接下来的配置需要在hadoop用户下完成,如果在配置过程中,随意切换用户,导致某些操作在不同用户下来完成的,后期启动hadoop集群的时候会因hadoop文件的权限问题导致启动失败,排查起错误来也会比较困难.
  2. 在hadoop的家目录下新建一个apps文件夹
    mkdir /home/hadoop/apps
  3. 用xftp上传hadoop-2.7.5.tar.gz包到该目录下(具体操作请参见上一篇)上传jdk的方式.
    hadoop-2.7.5.tar.gz的链接:https://pan.baidu.com/s/1o9CXsn71kfNVNKIQX0PW5w 密码:hf19
  4. 解压hadoop-2.7.5.tar.gz包:
    tar -zxvf /home/hadoop/apps/hadoop-2.7.5.tar.gz
  5. 解压后的结果:
    这里写图片描述
  6. 进入到hadoop-2.7.5
    cd /home/hadoop/apps/hadoop-2.7.5
  7. 在/home/hadoop/apps/hadoop-2.7.5新建一个data目录(hadoop参数的数据存放目录)
    mkdir /home/hadoop/apps/hadoop-2.7.5/data
  8. 配置hadoop-env.sh文件:
    cd /home/hadoop/apps/hadoop-2.7.5/etc/hadoop/
    vim hadoop-env.sh

    
    # set JAVA_HOME in this file, so that it is correctly defined on
    
    
    # remote nodes.
    
    
    # The java implementation to use.
    
    
    #在这里添加JDK安装目录的环境变量,这里我又尝试过 JAVA_HOME=${JAVA_HOME},但是不能起作用,还是老老实实的写吧
    
    export JAVA_HOME=/home/java/jdk1.7.0_79
    
    # The jsvc implementation to use. Jsvc is required to run secure datanodes
    
  9. 配置core-site.xml配置文件
    cd /home/hadoop/apps/hadoop-2.7.5/etc/hadoop/
    vim core-site.xml

    <configuration>
            <property>
                    <name>fs.defaultFS</name>
                    <value>hdfs://hadoop1:9000</value><!--这里hadoop需要换成自己配置的第一台机器的hostname,比如我的是hadoop1,所以我这里写的就是hadoop1-->
            </property>
            <property>
                    <name>hadoop.tmp.dir</name>
                    <!--配置hadoop集群数据存放路径,注意最后不要有空格-->
                    <value>/home/hadoop/apps/hadoop-2.7.5/data</value>
            </property>
    </configuration>
    
  10. 设置hdfs-site.xml配置文件
    cd /home/hadoop/apps/hadoop-2.7.5/etc/hadoop/
    vim hdfs-site.xml

    <configuration>
            <!--配置副本数量-->
            <property>
                    <name>dfs.replication</name>
                    <value>2</value>
            </property>
    </configuration>
    
  11. 配置mapred-site.xml配置文件
    cd /home/hadoop/apps/hadoop-2.7.5/etc/hadoop/
    默认mapred-site.xml不存在,将mapred-site.xml.template改成mapred-site.xml即可
    mv mapred-site.xml.template mapred-site.xml
    vi mapred-site.xml

    <configuration>
            <!--指定mapreduce在yarn上运行-->
            <property>
                    <name>mapreduce.framework.name</name>
                    <value>yarn</value>
            </property>
    </configuration>
    
  12. 配置yarn-site.xml配置文件
    cd /home/hadoop/apps/hadoop-2.7.5/etc/hadoop/
    vim yarn-site.xml

    <configuration>
            <property>
                    <name>yarn.resourcemanager.hostname</name>
                    <value>hadoop1</value>
            </property>
            <property>
                    <name>yarn.nodemanager.aux-services</name>
                    <value>mapreduce_shuffle</value>
            </property>
    
    </configuration>
    
  13. 配置slaves配置文件
    cd /home/hadoop/apps/hadoop-2.7.5/etc/hadoop/
    vim slaves

    
    #指定干活的datanode
    
    hadoop2
    hadoop3
  14. 配置hadoop1到hadoop2,hadoop3之间的免密通信,完成这一步操作,需要安装ssh软件,注意 如果机器中没有安装ssh-client软件,先需要安装,如果没有安装软件技能,推荐先了解下linux安装安软的知识.安装步骤如下1,2:
    1. 查找适合的软件包:yum list | grep openssh-clients
    2. 安装:yum install openssh-clients.x86_64 (openssh-clients.x86_64 是我查找到的结果).
    3. 启动hadoop2,hadoop3,并都切换到hadoop用户下.
    4. 配置免密登录之前,登录到hadoop2看看效果:
      ssh hadoop2
      这里写图片描述
      退出hadoop2的登录:exit
      这里写图片描述
    5. 在hadoop1的hadoop用户根目录下(注意,必须用hadoop用户来执行),执行以下命令产来密钥对:
      cd ~
      ssh-keygen -t rsa
      结果如下:
      这里写图片描述
    6. 将密钥拷贝到hadoop2,hadoop3:
      cd .ssh #.ssh是生成密钥对时产生的文件夹
      ssh-copy-id hadoop1 #拷贝到hadoop1(hadoop1就是当前的机器,当前机器也需要设置免密登录)
      ssh-copy-id hadoop2 #拷贝到hadoop2
      ssh-copy-id hadoop3 #拷贝到hadoop3
      拷贝到hadoop2的截图如下:
      这里写图片描述
      拷贝到其他机器也是一样,就不一一截图了.
    7. 验证免密登录是否配置成功.
      这里写图片描述
      不需要密码,直接就登录成功了.记得退出登录.
  15. 配置hadoop软件的环境变量:

    1. 配置之前:输入: which hadoop
      这里写图片描述
      发现是找不到hadoop这个命令的.
    2. 在/etc/profile文件中添加hadoop的环境变量
      sudo vim /etc/profile #因为只有root用户才能编辑该文件,所以hadoop想要编辑,需要用sudo权限:

      ```
      export JAVA_HOME=/home/java/jdk1.7.0_79
      #申明hadoop的路径变量
      export HADOOP_HOME=/home/hadoop/apps/hadoop-2.7.5
      #在之前配置JAVA的环境变量之后追加hadoop的环境变量
      export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
      
      ```
      
    3. source vim /etc/profile #让环境变量生效
    4. 验证配置是否成功:which hadoop
      这里写图片描述
      结果如上表示配置成功.
  16. 将已经配置好的hadoop整个文件包拷贝到hadoop2,hadoop3,这里需要注意的是hadoop2和hadoop3中即将放置hadoop包的路径需要保持一致,如果不一致,需要在上面配置的那几个hadoop配置文件中修改有路径的地方.
    1. 在hadoop2,hadoop3的hadoop家目录下新建一个apps目录.
    2. scp -r /home/hadoop/apps/hadoop-2.7.5 hadoop2:/home/hadoop/apps/
    3. scp -r /home/hadoop/apps/hadoop-2.7.5 hadoop3:/home/hadoop/apps/
  17. 根据上面配置hadoop软件的环境变量一样去hadoop2和hadoop3上配置好hadoop的环境变量.
  18. 分别重启3台机器.
  19. hadoop1上,用户hadoop用户,格式化hadoop 的HDFS(文件系统),第一次使用需要格式化:
    hadoop namenode -format
    这里写图片描述
  20. 在hadoop1上启动hdfs文件系统:
    start-dfs.sh
    待启动完成,再验证是否有该有进程:jps
    这里写图片描述
    在hadoop2,hadoop3上查看hadoop的进程:jps
    这里写图片描述
  21. 在hadoop1上启动yarn集群
    start-yarn.sh
    这里写图片描述
    在hadoop2,hadoop3上查看进程:
    这里写图片描述
  22. 使用浏览器查看集群状态:http://192.168.93.120:8088
    如果没法访问,查看防火墙状态:
    sudo service iptables status
    这里写图片描述
    关闭防火墙:
    sudo service iptables stop
    这里写图片描述
    最后正确的结果:
    这里写图片描述
  23. 查看HDFS文件系统状态:http://192.168.93.120:50070
    这里写图片描述
    如果结果都如上,表示hadoop集群搭建成功.那这篇文章的目的就达到了.

总结

我在配置的时候,也出现这样那样的问题.所以配置过程中需要注意以下几点:
1. 配置主机名时,以及在添加用户时,千万不要使用带有下划线的以及其他不符合规范的命名,我第一次配置时因为使用了下划线,导致启动集群时一直启动失败,折腾了好久好久.
2. hadoop的解压,配置,拷贝,需要使用配置了免密登录的用户来完成.比如我以上配置的就是hadoop用户来完成的.
3. 初始hadoop集群的时候,需要使用与解压,配置,拷贝hadoop时的用户一致.
4. 配置的时候仔细,仔细再仔细.可能因为一个字母错误,就会导致很多问题.
5. 我的3台虚拟机的hostname命名分别是hadoop1,hadoop2,hadoop3,在这三台虚拟机下都有一个用来搭建hadoop集群的用户hadoop,所以再阅读的时候不要混淆了.
6. 如果按照我的步骤来搭建,最后集群搭建完成时,每台机器的进程规划如下:

主机名进程
hadoop1 SecondaryNameNode
ResourceManager
NameNode
hadoop2 DataNode
NodeManager
hadoop3 DataNode
NodeManager

尽情期待下一篇Zookeeper的环境搭建,或者HDFS的API操作

















创作不易.转载注明出处.
qq交流群:775661488

没有更多推荐了,返回首页