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

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

概念一:命名

  • 机器名 对机器起的名字

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

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

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

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

概念二:用户

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

概念三:存储

  • 一般来讲不分盘,只有一个盘(当然你也可以进行分区,只不过没必要),用户仅仅是机器的使用者,只有使用权,只有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 关闭防火墙【<span style="color:red">在每台机器都要操作</span>】

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

  • 查看防火墙状态:

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

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

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

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

2.3 配置host【<span style="color:red">在每台机器都要操作</span>】

  1. 打开host文件进行编辑

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

     192.168.150.100 worker1
     192.168.150.101 worker2
     192.168.150.102 worker3
    

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

  • 用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,添加内容

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

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

             <configuration>
                 <property>
                     <name>mapreduce.framework.name</name>
                     <value>yarn</value>
                 </property>
             </configuration>
        
      6. 找/etc/hadoop/yarn-site.xml,添加内容

             <configuration>
                 <property>
                     <name>yarn.nodemanager.aux-service</name>
                     <value>mapreduce_shuffle</value>
                 </property>
                 <property>
                     <name>yarn.resourcemanager.webapp.address</name>
                     <value>worker1:18088</value>
                     <description>hadoop的webapp访问地址</description>
                 </property>
             </configuration>
        
      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(刚刚自己配置的地址)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345