# Hadoop # ——伪分布式集群/环境搭建

一、在操作前,先明白几个概念,避免操作linux的时候混淆

概念一:命名

  • 机器名 对机器起的名字

  • 用户名username 机器上登陆用户的名字

  • 主机名hostname 为了方便通过网络访问对应机器,对IP地址取的别名

  • 在后面的环境搭建过程中有三台机器,为了方便,在命名上,配置如下

    机器列表 机器名 用户名 主机名
    机器1(对集群做一些临时操作可能会用到) worker1 root(最高权限用户)
    user(普通用户)
    worker1
    机器2 worker2 root(最高权限用户)
    user(普通用户)
    worker2
    机器3 worker3 root(最高权限用户)
    user(普通用户)
    worker3

概念二:用户

  • 一台机器可以有很多个用户,但是只有一个权限最高的用户,每个用户都有一个用户文件夹作为用户根目录(~/)存放数据,所以不同用户登陆时候,访问到的用户根目录(~/)是不同的

概念三:存储

  • 一般来讲不分盘,只有一个盘(当然你也可以进行分区,只不过没必要),用户仅仅是机器的使用者,只有使用权,只有root用户才有操作机器所有功能、目录的能力,相当于占有权。Windows实际上也类似,只是我们平时使用的时候基本一人一个电脑,磁盘被分了很多个,而且创建的用户基本都只有一个而且是管理员权限,所以有一种我的电脑任我操作的感觉。

概念四:需要了解的部分目录结构

目录 目录路径 操作权限
电脑根目录 / root权限
root用户主目录 /root root权限
普通用户们所在位置目录 /home root权限
普通用户1主目录 /home/普通用户1 普通用户1权限
  • root身份的时候:

    目录 目录路径
    root用户主目录 /root 或 ~/
    普通用户1主目录 /home/普通用户1/
  • 普通用户1身份的时候:

    目录 目录路径
    普通用户1主目录: ~/ 或 /home/普通用户1/
    无权操作超过普通用户1主目录以上级别的目录内容或其他用户主目录内容

二、下面开始搭建环境

(虚拟机已装好或者已经拥有几台可以使用的centos7系统的机器)

2.1 网络配置【在每台机器都要操作

  1. 手动更改ip地址(在设置里面图形化操作)假设有三台机器更改ip为

    机器 ip
    worker1 192.168.150.100
    worker2 192.168.150.101
    worker3 192.168.150.102
  2. 以root权限进行各类操作

    • 进入root用户身份

        $ su – root//(回车后要输入root密码,在安装时候设置的root密码)
      
    • 用文档编辑器编辑网络配置,打开文档进行编辑

        $ gedit /etc/sysconfig/network/
        //在里面添加上如下内容(表示使用网络,主机名改为对应机器的主机名,比如在worker1上操作就改为worker1)
        NETWORKING=yes
        HOSTNAME=master
        //保存并关闭
      
    • 让配置生效并修改hostname:

        $ hostname worker1(每台机器分别改为对应主机名)
      

2.2 关闭防火墙【在每台机器都要操作

(为了方便才关闭,如果是公司生产环境,建议将特定端口打开而不要关闭防火墙)

  • 查看防火墙状态:

      firewall-cmd --state 
    
  • 关闭防火墙:

      systemctl stop firewalld.service #停止firewall
    
  • 禁止firewall开机启动:

      systemctl disable firewalld.service (禁用防火墙)
    

(所有机器都要关闭、禁用)

2.3 配置host【在每台机器都要操作

  1. 打开host文件进行编辑

     $ gedit /etc/hosts
    
  2. 在里面添加如下内容:

     192.168.150.100 worker1
     192.168.150.101 worker2
     192.168.150.102 worker3
    

2.4 同步时钟(可以忽略,为了防止机器们协同工作时的时间记录不匹配所产生的错误,一般安装虚拟机的时候或者联网的时候会自动同步时间,所以一般不需要手动同步了)【在每台机器都要操作

  • 用vi编辑配置

      $crontab -e
      //进入vi编辑模式
      //按i键(代表insert)进如输入模式
    
  • 输入下面代码

      0 1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
    
  • 结束编辑

      //按esc键退出输入模式
      //输入 :wq(冒号wq)代表保存并退出
    
  • 然后进行同步

      $ /usr/sbin/ntpdate cn.pool.ntp.org
    

2.5 配置免密码登陆(user用户登陆各台worker机器不用输入密码)

(方便在后面开启hadoop服务的时候省的输入多次密码造成阻碍)

所有机器都要开启ssh证书登陆功能

2.5.1 查看ssh服务状态、建立目录

  • 检测ssh服务状态
    $ sudo service sshd status

  • 在所有机器上,以普通用户身份查看根目录下是否有 .ssh文件夹

    • 进入普通用户根目录

        $ cd ~/
      
    • 列出目录下所有文件、文件夹

        $ ll -a
      
    • 如果看见有.ssh就ok;如果没有则创建

        $ mkdir .ssh
      

2.5.2 配置ssh无密码登录

  1. 进入.ssh文件夹

     $ cd ~/.ssh
    
  2. 秘钥生成和配置

    • 方法零(推荐):

      1. 生成密钥

         $ ssh-keygen -t rsa
         //生成秘钥,指定使用rsa加密方式
        
        • 一路回车键直到生成
      2. 拷贝公钥给需要免密登录的各台机器

         ssh-copy-id 用户名@对应的主机名或者对应的ip地址
        
        • 比如发送到主机名为worker2的机器上:

            $ ssh-copy-id user@worker2
          
      3. 然后该确认确认,该输密码输密码。

      4. 去worker1机器上重启终端命令行

        • 测试:

            $ ssh worker2或者其他主机名
            //如果不需要输入密码,那么就成功了
          
    • 方法一:

      1. 生成免密签名

         $ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
         //指定加密方式为dsa无密码放在~/.ssh目录下,id_dsa为文件名
        
        • 一路回车键直到生成
      2. 重命名id_dsa.pub为authorized_keys

         $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
        
      3. 将authorized_keys同时发送到其他几台需要被免密登陆的机器的.ssh目录中

         $ scp authorized_keys 用户名@对应的主机名或者对应的ip地址:~/.ssh/authorized_keys
        
        • 比如发送到主机名为worker2的机器上:

            $ scp authorized_keys  user@worker2:~/.ssh/authorized_keys
          
      4. 然后该确认确认,该输密码输密码。

      5. 然后去被免密登陆的机器上(自己、worker2、worker3)更改权限

             //(用普通用户身份)
             $ chmod 700 ~/.ssh
             $ chmod 600 ~/.ssh/*
        
      6. 去worker1机器上重启终端命令行

        • 测试:

            $ ssh worker2或者其他主机名
            //如果不需要输入密码,那么就成功了
          
    • 方法二:

      1. 生成密钥

         $ ssh-keygen -t rsa
         //生成秘钥,指定使用rsa加密方式
        
        • 一路回车键直到生成
      2. 在worker1机器上进入.ssh目录

         $ cd ~/.ssh
        
      3. 将id_rsa.pub文件重命名为authorized_keys同时发送到自己机器和其他几台需要被免密登陆的机器的.ssh目录中

         $ scp id_rsa.pub  用户名@对应的主机名或者ip地址:~/.ssh/authorized_keys
        
        • 比如发送到主机名为worker2的机器上:

            $ scp id_rsa.pub  user@worker2:~/.ssh/authorized_keys
          
      4. 然后该确认确认,该输密码输密码。

      5. 然后去被免密登陆的机器上(自己、worker2、worker3)更改权限

             //(用普通用户身份)
             $ chmod 700 ~/.ssh
             $ chmod 600 ~/.ssh/*
        
      6. 去worker1机器上重启终端命令行

        • 测试:

            $ ssh worker2或者其他主机名
            //如果不需要输入密码,那么就成功了
          
    • 以后就可以直接使用 ssh 主机名 在一台机器上登陆另一台机器对其他电脑操作

    • 如果不行,在尝试做以下操作

        $ gedit /etc/ssh/sshd_config
        //在最后加上以下内容并保存
        RSAAuthentication yes
        PubkeyAuthentication yes
        //(上述内容原本是注释掉的,为了方便就不找出来了,直接手动加上)
        //(所有机器都要做)
      

2.6 安装java开发环境【在每台机器都要操作

  1. 下载对应版本的jdk

  2. 安装java(我们将java安装在根目录的usr目录,所以需要root身份权限)

    • 进入root用户身份

        $ su – root(回车后要输入root密码,在安装时候设置的root密码)
      
    • usr下创建java目录

        $ mkdir /usr/java
      
    • 将jdk安装包移动到java目录中解压(假设一开始安装包下载在了桌面上)

      • 进入桌面目录

          $ cd /home/master/桌面
        
      • 移动

          $ mv 安装包的文件名 /usr/java
        
      • 进入java目录

          $ cd /usr/java
        
      • 解压

          $ tar -xvf 安装包的文件名
        
  3. 配置环境变量(为了让user普通用户生效新装的java,我们更改user用户的环境变量配置文件)

    • 打开环境变量的配置文件并编辑

        $ gedit /home/user/.bash_profile
      
    • 在里面添加如下内容

        export JAVA_HOME=/usr/java/刚刚解压的文件夹名字(即jdk安装包的名字)/
        export PATH=$JAVA_HOME/bin:$PATH
      
    • 使得环境变量生效

        $ source /home/master/.bash_profile
      
    • 检测是否成功

        $ java -version
      
    • 如果输出的版本号与自己下载的相同,那就对了

2.7 Hadoop安装与配置(由于我们把hadoop安装在普通用户根目录下,所以不需要最高权限,所以下面的操作为了方便全部采用图形化操作,当然命令行也行)【在每台机器都要操作

  1. 将安装包放在worker1机器的user用户根目录下并解压到当前路径
  2. 比如解压完以后文件夹叫hadoop-2.9.0
  3. 在worker1机器的user用户根目录下,新建两个文件夹,叫hdfs、hadoopTemp
  4. 配置hadoop环境变量(为了让系统能通过命令找到hadoop可执行文件)
    • 文本编辑器打开环境变量配置文件(此环境变量文件仅对user普通用户起作用)

        $ gedit /home/master/.bash_profile
      
    • 添加内容

        export HADOOP_HOME=/home/master/Hadoop-2.9.0
        export PATH=$PATH:$HADOOP_HOME/bin
      
    • Hadoop配置[去hadoop安装(解压)的地方(/home/master/Hadoop-2.9.0)找文件]

      1. 找:/etc/hadoop/hadoop-env.sh,添加或修改内容:

         export JAVA_HOME=java安装路径
        
      2. 找/etc/hadoop/yarn.env.sh,添加或修改内容:

         export JAVA_HOME=java安装路径
        
      3. 找/etc/hadoop/core-site.xml,添加内容

         
             
                 fs.default.name
                 hdfs://worker1:9000
                 配置HDFS服务地址及端口
             
             
                 hadoop.tmp.dir
                 /home/user/hadoopTemp
                 配置临时文件存放地址
             
         
        
      4. 找/etc/hadoop/hdfs-site.xml,添加内容

         
             
                 hdfs.name.dir
                 /home/user/hdfs/name
                 存放hdfs名字空间元素
             
             
                 hdfs.data.dir
                 /home/user/hdfs/data
                 存放hdfs数据物理空间
             
             
                 hdfs.replication
                 1
                 副本个数,小于机器数量
             
         
        
      5. 找/etc/hadoop/mapred-site.xml,添加内容

             
                 
                     mapreduce.framework.name
                     yarn
                 
             
        
      6. 找/etc/hadoop/yarn-site.xml,添加内容

             
                 
                     yarn.nodemanager.aux-service
                     mapreduce_shuffle
                 
                 
                     yarn.resourcemanager.webapp.address
                     worker1:18088
                     hadoop的webapp访问地址
                 
             
        
      7. 找/etc/hadoop/slave文件,设置slave(worker1作为老大,其他worker作为小弟节点配置到hadoop中)

         //内部添加
         worker1
         worker2
         worker3
         //为什么会有worker1?老大既作为老大,也和小弟一起做任务
        

      针对在每台机器都要操作的安装环境,建议先把一台装完,然后把解压好的目录、环境变量文件直接拷贝发送到另外几台设备

2.8 启动hadoop与测试

  • 格式化namenode(第一次启动执行)在hadoop安装的根目录下执行:

      bin/hdfs namenode -format
    
  • 启动Hadoop,在hadoop安装的根目录下执行:

    • 启动NameNode和DataNode进程

        sbin/start-dfs.sh
      
    • 启动ResourceManager和NodeManager进程

        sbin/start-yarn.sh
      
  • 检测是否启动成功

      jps
    
  • 如果出现如下信息,说明启动成功

      5509 NodeManager
      5833 Jps
      4683 NameNode
      4796 DataNode
      5421 ResourceManager
      4943 SecondaryNameNode                  
    
  • 访问Hadoop的webapp服务
    - 在浏览器中输入:http://master:18088(刚刚自己配置的地址)

你可能感兴趣的:(# Hadoop # ——伪分布式集群/环境搭建)