分布式部署Hadoop

在上一篇【第一个Hadoop实例: juejin.cn/post/684490… 】中已经安装了jdk和hadoop,并且配置了环境变量,这篇文章是在原有单机版的基础上部署分布式的Hadoop。

虚拟机准备

将上一篇中配置的虚拟机克隆3份,然后修改IP地址,关闭防火墙,设置主机名称。这些基本操作不是本篇重点,所以不再赘述。提醒一点,修改完主机名称记得修改/etc/hosts文件 。

本篇示例中虚拟机配置:

hadoop001:192.168.48.111

hadoop002:192.168.48.112

hadoop003:192.168.48.113

SSH无密码登录

  1. 进入到我的home目录

    cd ~/.ssh
    
  2. 生成公钥和私钥,输入下面指令,然后敲三个回车,就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

    ssh-keygen -t rsa
    
  3. 将公钥拷贝到要免密登录的目标机器上

    ssh-copy-id 192.168.48.112
    ssh-copy-id 192.168.48.113
    

配置集群

集群部署规划

修改配置文件

配置文件所在目录:/opt/module/hadoop-2.7.2/etc/hadoop/

  • core-site.xml

    <configuration>
        <!-- 指定HDFS中NameNode的地址 -->
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://hadoop001:9000</value>
        </property>
        <!-- 指定hadoop运行时产生的文件存储目录 -->
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/opt/module/hadoop-2.7.2/data/tmp</value>
        </property>
    </configuration>
    
  • hadoop-env.sh

    export JAVA_HOME=/opt/module/jdk1.8.0_131
    
  • hdfs-site.xml

    <configuration>
        <property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>hadoop003:50090</value>
        </property>
    </configuration>
    
  • slaves

    hadoop001
    hadoop002
    hadoop003
    
  • yarn-env.sh

    export JAVA_HOME=/opt/module/jdk1.8.0_131
    
  • yarn-site.xml

    <configuration>
        <!-- Site specific YARN configuration properties -->
        <!-- reducer获取数据的方式 -->
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
        <!-- 指定YARN的ResourceManager的地址 -->
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>hadoop002</value>
        </property>
    </configuration>
    
  • mapred-env.sh

    export JAVA_HOME=/opt/module/jdk1.8.0_131
    
  • mapred-site.xml

    <configuration>
        <!-- 指定mr运行在yarn上 -->
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
    </configuration>
    
将配置文件复制到集群中其它几台虚拟机
[root@hadoop001 etc]#  scp -r hadoop/ root@hadoop002:/opt/module/hadoop-2.7.2/etc
[root@hadoop001 etc]#  scp -r hadoop/ root@hadoop003:/opt/module/hadoop-2.7.2/etc

集群启动

  1. 如果是集群第一次启动,需要格式化namenode

    [root@hadoop001 hadoop-2.7.2]# bin/hdfs namenode -format
    
  2. 启动HDFS

    [root@hadoop001 hadoop-2.7.2]# sbin/start-dfs.sh
    
  3. 启动yarn,注意:应该在ResouceManager所在的机器上启动yarn

    [root@hadoop002 hadoop-2.7.2]# sbin/start-yarn.sh 
    
  4. 查看是否启动成功

浏览器访问:http://192.168.48.111:50070

浏览器访问:http://192.168.48.112:8088/cluster

Hadoop启动停止方式

  • 各个服务组件逐一启动

    (1)分别启动hdfs组件

    hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode

    (2)启动yarn

    yarn-daemon.sh start|stop resourcemanager|nodemanager

  • 各个模块分开启动(配置ssh是前提)

    (1)整体启动/停止hdfs

    ​ start-dfs.sh

    ​ stop-dfs.sh

    (2)整体启动/停止yarn

    ​ start-yarn.sh

    ​ stop-yarn.sh

  • 全部启动(不建议使用)

    start-all.sh

    stop-all.sh

操作集群

  • 在hdfs文件系统上创建一个input文件夹

    [root@hadoop001 hadoop-2.7.2]# bin/hdfs dfs -mkdir -p /user/sixj/mapreduce/wordcount/input
    
  • 将测试内容上传到文件系统上

    [root@hadoop001 hadoop-2.7.2]# bin/hdfs dfs -put wcinput/wc.input /user/sixj/mapreduce/wordcount/input
    
  • 查看文件列表

    [root@hadoop001 hadoop-2.7.2]# bin/hdfs dfs -ls /user/sixj/mapreduce/wordcount/input 
    
  • 查看文件内容

    [root@hadoop001 hadoop-2.7.2]# bin/hdfs dfs -cat /user/sixj/mapreduce/wordcount/input/wc.input
    hadoop yarn
    hadoop mapreduce
    sixj JAVA 
    sixj
    
  • 下载文件到本地

    [root@hadoop001 hadoop-2.7.2]# hadoop fs -get /user/sixj/mapreduce/wordcount/input/wc.input
    
  • 删除文件

    [root@hadoop001 hadoop-2.7.2]# hadoop fs -rm /user/sixj/mapreduce/wordcount/input/wc.input