Hadoop的三种配置模式以及免密登录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a909301740/article/details/84147035

本地模式

特点:只需要一台服务器,没有HDFS、只能测试 MapReduce 程序,MapReduce 处理的是本地 Linux 的文件数据。

配置步骤:

  1. 修改 hadoop-2.7.3/etc/hadoop 目录下的 hadoop-env.sh 文件,在第 25 行做如下修改(配置JAVA_HOME):

    export JAVA_HOME=/root/training/jdk1.8.0_144
    
  2. 测试 MapReduce 程序:

    2.1. 创建目录 mkdir ~/input 作为测试数据的存放目录。

    2.2. 在 input 目录下创建 data.txt 文件,内容如下:

     I love Beijing
     I love China
     Beijing is the capital of China
    

    2.3. 运行 hadoop 自带的一个 MapRecue 程序中的词频统计程序:

    首先切换到 /root/training/hadoop-2.7.3/share/hadoop/mapreduce/ 目录下。

    执行如下命令:
    hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount ~/input ~/output

    该命令会运行 hadoop-mapreduce-examples-2.7.3.jar 中的 wordcount 程序,统计 ~/input 目录下所有文件中所有单词出现的频率,结果会保存到 ~/output 目录下。

    注:不要事先创建 ~/output 目录,否则程序会抛出异常,程序在运行的时候会自动创建 ~/output 目录。

    2.4. 运行成功的话会在 ~/output 目录下产生两个文件:part-r-00000,_SUCCESS。_SUCCESS 这个文件是一个空文件,出现这个文件说明词频统计成功。part-r-00000 这个文件里面存储的是 ~/input 目录下每个单词出现的次数,内容如下:
    在这里插入图片描述

伪分布模式

特点:只需要一台服务器,模拟一个分布式的环境,具备 Hadoop 的主要功能。

配置步骤:

  1. 修改 hadoop-2.7.3/etc/hadoop 目录下的 hadoop-env.sh 文件,在第 25 行做如下修改(配置JAVA_HOME):

    export JAVA_HOME=/root/training/jdk1.8.0_144
    
  2. 修改 hdfs-site.xml 文件,添加的内容如下:

    <!-- 原则:一般数据块的冗余度跟数据节点(DataNode)的个数一致;最大不超过3 -->
    
    <!--表示数据块的冗余度,默认:3-->
    <property>
       <name>dfs.replication</name>
       <value>1</value>
    </property>
    				
    
    <!--是否开启HDFS的权限检查,默认true,先不设置-->
    <property>
       <name>dfs.permissions</name>
       <value>false</value>
    </property>
    
  3. 修改 core-site.xml 文件,添加内容如下:

    <!--配置NameNode地址,9000是RPC通信端口-->
    <property>
       <name>fs.defaultFS</name>
       <value>hdfs://bigdata111:9000</value>
    </property>	
    
    <!--HDFS数据保存在Linux的哪个目录,默认值是Linux的tmp目录-->
    <property>
       <name>hadoop.tmp.dir</name>
       <value>/root/training/hadoop-2.7.3/tmp</value> <!-- 该目录必须事先创建 -->
    </property>	
    
  4. 修改 mapred-site.xml 文件,添加内容如下:

    <!--MapReduce程序运行在yarn里面-->
    <property>
       <name>mapreduce.framework.name</name>
       <value>yarn</value>
    </property>	
    

    :hadoop-2.7.3/etc/hadoop/ 目录下默认是没有 mapred-site.xml 文件的,需要复制一份 mapred-site.xml.template 文件,执行如下命令:cp mapred-site.xml.template mapred-site.xml

  5. 修改 yarn-site.xml 文件,添加内容如下:

    <!--Yarn的主节点ResourceManager的位置-->
    <property>
       <name>yarn.resourcemanager.hostname</name>
       <value>bigdata111</value>
    </property>	
    
    <!--MapReduce运行方式:shuffle洗牌-->
    <property>
       <name>yarn.nodemanager.aux-services</name>
       <value>mapreduce_shuffle</value>
    </property>	
    
  6. 格式化 HDFS:

    执行命令:hdfs namenode -format

    看到打印的日志中显示:Storage directory /root/training/hadoop-2.7.3/tmp/dfs/name has been successfully formatted 就说明格式化成功。

  7. 启动停止 Hadoop 环境:

    启动:start-all.sh

    停止:stop-all.sh

    ps:启动和停止 Hadoop 都会让你输入四次当前服务器的密码。因此我们需要配置免密码登录服务器。

    免密码登录

    原理

    使用非对称加密算法。

    在这里插入图片描述

    1. 从 ServerA 登录到 ServerB。

    2. ServerB 随机产生一个字符串,使用 ServerA 给的公钥进行加密。

    3. ServerB 把加密后的字符串发给 ServerA。

    4. ServerA 用私钥解密收到的字符串。

    5. ServerA 将解密后的字符串回发给ServerB。

    6. ServerB 将收到的字符串与最开始生成的字符串对比,匹配则直接登录,不匹配则需要 ServerA 重新输入密码进行登录。

    配置
    1. 使用 ssh-keygen -t rsa命令产生一个密钥对:公钥(给别人,用于加密),私钥(给自己,用于解密)。

    2. 在当前用户的家目录下会产生一个 .ssh 隐藏目录,里面会产生两个文件:id_rsa(私钥),id_rsa.pub(公钥)。

    3. 把公钥拷贝给要登录的服务器:ssh-copy-id -i .ssh/id_rsa.pub root@bigdata111

    4. 在对方服务器的 .ssh/ 目录下就会多一个 authorized_keys 文件,里面存储着别的服务器发来的所有公钥。

  8. 通过 Web 界面访问:

    HDFS:http://192.168.220.111:50070
    Yarn:http://192.168.220.111:8088

    ps:具体的服务器地址取决于自己的配置。

    记录下这历史性的一刻:

    在这里插入图片描述

    在这里插入图片描述

    ps:再运行一下之前那个 wordcount 程序,看看会发生什么。

    抛出异常,原因:原来数据的目录时本地 Linux 上的,现在已经开启伪分布式模式,需要使用 HDFS 的目录。

    1. hdfs dfs -mkdir /input,该命令会在 HDFS 的根目录 / 下创建一个 input 目录。(执行该命令时,需要启动 HDFS start-all.sh
    2. hdfs dfs -put ~/input/data.txt /input,该命令会把我们本地的 ~/input/data.txt 文件上传到 HDFS 的 /input 目录下。
    3. 查看 HDFS 根目录下的文件:hdfs dfs -ls /
    4. 查看 HDFS 根目录下的文件(包含子目录):hdfs dfs -lsr /
    5. 执行原来的 mapreduce 程序:hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /input/data.txt /output/1117,该命令会读取 HDFS 的 /input 目录下的 data.txt 文件,进行词频统计,统计的结果会输出到 HDFS 的 /output/1117 目录下。
    6. 在程序运行的过程中可以访问:http://192.168.220.111:8088/ 查看运行中的 mapreduce 程序。
    7. 最后程序执行完毕,执行 hdfs dfs -ls /output/1117查看里面生成的文件内容。

全分布模式

特点:需要多台服务器构建集群,真正的分布式环境,用于生产。

准备工作

  1. 关闭防火墙:

    本次停止:systemctl stop firewalld.service
    永久关停:systemctl disable firewalld.service

  2. 安装JDK

  3. 为集群中的每台机器配置IP到主机名的映射:

     192.168.220.112 bigdata112
     192.168.220.113 bigdata113
     192.168.220.114 bigdata114
    
  4. 配置免密码登录,两两之间都要配置

    4.1. 每台机器产生自己的公钥和私钥:ssh-keygen -t rsa

    4.2. 每台机器把自己的公钥给别人和自己:

     	ssh-copy-id -i .ssh/id_rsa.pub root@bigdata112
     	ssh-copy-id -i .ssh/id_rsa.pub root@bigdata113
     	ssh-copy-id -i .ssh/id_rsa.pub root@bigdata114
    
  5. 保证每台机器的时间同步:

    同时向三个终端发送如下命令:date -s "2018-11-18 14:47:57",来协调时间的一致,如果时间不一致,后续在执行 mapreduce 程序的时候有可能出现问题。

在主节点上进行安装

  1. 解压 tar 包,向 .bash_profile 中设置 Hadoop 的环境变量:

    tar -zxvf hadoop-2.7.3.tar.gz -C ~/training/

    集群中的每台机器都要设置环境变量

    HADOOP_HOME=/root/training/hadoop-2.7.3
    export HADOOP_HOME
    
    PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
    export PATH
    
  2. 修改 hadoop-env.sh 文件,将第 25 行的内容修改为:

    export JAVA_HOME=/root/training/jdk1.8.0_144
    
  3. 修改 hdfs-site.xml 文件:

    <!--表示数据块的冗余度,默认:3-->
    <property>
       <name>dfs.replication</name>
       <value>2</value>
    </property>
    
  4. 修改 core-site.xml 文件:

    <!--配置NameNode地址,9000是RPC通信端口-->
    <property>
       <name>fs.defaultFS</name>
       <value>hdfs://bigdata112:9000</value>
    </property>	
    
    <!--HDFS数据保存在Linux的哪个目录,默认值是Linux的tmp目录-->
    <property>
       <name>hadoop.tmp.dir</name>
       <value>/root/training/hadoop-2.7.3/tmp</value>
    </property>	
    
  5. 拷贝 mapred-site.xml.template 生成一份 mapred-site.xml:

    cp mapred-site.xml.template mapred-site.xml
    

    修改内容如下:

    <!--MR运行的框架-->
    <property>
       <name>mapreduce.framework.name</name>
       <value>yarn</value>
    </property>	
    
  6. 修改 yarn-site.xml 文件:

    <!--Yarn的主节点RM的位置-->
    <property>
       <name>yarn.resourcemanager.hostname</name>
       <value>bigdata112</value>
    </property>	
    
    <!--MapReduce运行方式:shuffle洗牌-->
    <property>
       <name>yarn.nodemanager.aux-services</name>
       <value>mapreduce_shuffle</value>
    </property>
    
  7. 修改 slaves 文件,配置从机的位置:

    bigdata113
    bigdata114
    
  8. 格式化 namenode:hdfs namenode -format

  9. 把主节点上配置好的 hadoop 复制到从节点上:

    scp -r hadoop-2.7.3/ root@bigdata113:/root/training
    scp -r hadoop-2.7.3/ root@bigdata114:/root/training
    
  10. 在主节点上启动:start-all.sh

    值得纪念的一刻:

    datanode

    也可以通过执行 hdfs dfsadmin -report命令,查看 HDFS 的 namenode 和 datanode 节点的状态。

    [root@bigdata113 ~]# hdfs dfsadmin -report
    Configured Capacity: 100865679360 (93.94 GB)
    Present Capacity: 96658509824 (90.02 GB)
    DFS Remaining: 96658493440 (90.02 GB)
    DFS Used: 16384 (16 KB)
    DFS Used%: 0.00%
    Under replicated blocks: 0
    Blocks with corrupt replicas: 0
    Missing blocks: 0
    Missing blocks (with replication factor 1): 0
    
    -------------------------------------------------
    Live datanodes (2):
    
    Name: 192.168.220.113:50010 (bigdata113)
    Hostname: bigdata113
    Decommission Status : Normal
    Configured Capacity: 50432839680 (46.97 GB)
    DFS Used: 8192 (8 KB)
    Non DFS Used: 2103767040 (1.96 GB)
    DFS Remaining: 48329064448 (45.01 GB)
    DFS Used%: 0.00%
    DFS Remaining%: 95.83%
    Configured Cache Capacity: 0 (0 B)
    Cache Used: 0 (0 B)
    Cache Remaining: 0 (0 B)
    Cache Used%: 100.00%
    Cache Remaining%: 0.00%
    Xceivers: 1
    Last contact: Sun Nov 18 15:05:23 CST 2018
    
    
    Name: 192.168.220.114:50010 (bigdata114)
    Hostname: bigdata114
    Decommission Status : Normal
    Configured Capacity: 50432839680 (46.97 GB)
    DFS Used: 8192 (8 KB)
    Non DFS Used: 2103402496 (1.96 GB)
    DFS Remaining: 48329428992 (45.01 GB)
    DFS Used%: 0.00%
    DFS Remaining%: 95.83%
    Configured Cache Capacity: 0 (0 B)
    Cache Used: 0 (0 B)
    Cache Remaining: 0 (0 B)
    Cache Used%: 100.00%
    Cache Remaining%: 0.00%
    Xceivers: 1
    Last contact: Sun Nov 18 15:05:23 CST 2018
    

安装过程中出现的问题

  1. value 标签错写成 valual,导致执行 start-all.sh 的时候抛异常。

  2. 之前在主节点上搭建了伪分布式环境,已经格式化了 hdfs,导致在搭建全分布式环境启动 HDFS 和 Yarn 的时候,从节点虽然已启动了 DataNode 进程但是在 web 页面上却显示存活的节点数为 0。按照网上的教程,删除存储数据的目录,重新格式化无果。删除 hadoop 重装,问题解决。

全分布模式最终的集群结构

Hadoop全分布模式

猜你喜欢

转载自blog.csdn.net/a909301740/article/details/84147035
今日推荐