Hadoop3.1.3完全分布式环境搭建

1. 虚拟机环境准备

  1. 首先要准备一台虚拟机,CentOS7操作系统,最小化安装,新建用户myHadoop,IP地址是102,记得关闭防火墙,学习阶段容易忘可以禁用(更多细节不在此说明)。
  2. 安装可能需要依赖,避免后期有些命令无法使用。
    sudo yum install -y epel-release
    sudo yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static tree iotop
    

2. 安装JDK

  1. 解压
    tar -zxvf jdk-8u212-linux-x64.tar.gz   # 需要记住解压路径
    
  2. 配置环境变量
    根据profile文件注释,系统不建议我更改此文件,因此根据文档要求我在 /etc/proprofile.d 目录下新建自定义系统文件my_env.sh
    # 这段代码是profile文件的注释
    # It's NOT a good idea to change this file unless you know what you
    # are doing. It's much better to create a custom.sh shell script in
    # /etc/profile.d/ to make custom changes to your environment, as this
    # will prevent the need for merging in future updates.
    
    [myHadoop@hadoop102 profile.d]$ sudo vim my_env.sh 
    # JAVA
    JAVA_HOME=/opt/module/jdk1.8.0_212		# 将解压路径填入
    PATH=$PATH:$JAVA_HOME/bin
    export PATH JAVA_HOME
    
  3. 刷新环境配置文件并验证
    [myHadoop@hadoop102 profile.d]$ source /etc/profile
    [myHadoop@hadoop102 ~]$ java -version
    java version "1.8.0_212"
    Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
    Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
    

3. hadoop环境安装

  1. 解压,步骤与Java类似;

  2. 配置环境变量

    # 修改文件别忘了 sudo
    # JAVA
    JAVA_HOME=/opt/module/jdk1.8.0_212
    PATH=$PATH:$JAVA_HOME/bin
    
    # Hadoop
    HADOOP_HOME=/opt/module/hadoop-3.1.3
    PATH=$PATH:$HADOOP_HOME/bin
    PATH=$PATH:$HADOOP_HOME/sbin
    
    export PATH JAVA_HOME HADOOP_HOME
    
  3. 刷新配置文件并验证

    [myHadoop@hadoop102 profile.d]$ source /etc/profile
    [myHadoop@hadoop102 ~]$ hadoop version
    Hadoop 3.1.3 
    
  4. 修改集群配置文件(所有配置文件都在 /安装路径/hadoop/etc/hadoop目录下 )
    - hadoop-env.sh

    export JAVA_HOME=/opt/module/jdk1.8.0_212
    


    - core-site.xml

     <!-- 指定NameNode的地址 -->
     <property>
     	<name>fs.defaultFS</name>
     	<value>hdfs://hadoop102:9820</value>
     </property>
    
     <!-- 指定hadoop数据的存储目录
     <property>
     	<name>hadoop.data.dir</name>
     	<value>/opt/module/hadoop-3.1.3/data</value>
     </property>
    


    - hdfs-site.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    
    <configuration>
     <!-- 指定NameNode数据的存储目录 -->
     <!-- 本地文件路径已经在core-site.xml文件中配置过 -->
     <property>
     	<name>dfs.namenode.name.dir</name>
     	<value>file://${hadoop.data.dir}/name</value>
     </property>
    
     <!-- 指定Datanode数据的存储目录 -->
     <property>
     	<name>dfs.datanode.data.dir</name>
     	<value>file://${hadoop.data.dir}/data</value>
     </property>
    
     <!-- 指定SecondaryNameNode数据的存储目录 -->
     <property>
     	<name>dfs.namenode.checkpoint.dir</name>
     	<value>file://${hadoop.data.dir}/namesecondary</value>
     </property>
    
     <!-- nn web端访问地址-->
     <property>
     	<name>dfs.namenode.http-address</name>
     	<value>hadoop102:9870</value>
     </property>
    
     <!-- 2nn web端访问地址-->
     <property>
     	<name>dfs.namenode.secondary.http-address</name>
     	<value>hadoop104:9868</value>
     </property>
    </configuration>
    


    - yarn-site.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    
    <configuration>
      <property>
      	<name>yarn.nodemanager.aux-services</name>
      	<value>mapreduce_shuffle</value>
      </property>
    
      <!-- 指定ResourceManager的地址-->
      <property>
      	<name>yarn.resourcemanager.hostname</name>
      	<value>hadoop103</value>
      </property>
    
      <!-- 环境变量的继承 -->
      <property>
      	<name>yarn.nodemanager.env-whitelist</name>
      	<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
      </property>
    
      <!-- 日志聚集功能 -->
      <property>
      	<name>yarn.log-aggregation-enable</name>
      	<value>true</value>
      </property>
    
      <property>  
      	<name>yarn.log.server.url</name>  
      	<value>http://hadoop102:19888/jobhistory/logs</value>  
      </property> 
    
      <!-- 日志保存时间 -->
      <property>
      	<name>yarn.log-aggregation.retain-seconds</name>
      	<value>604800</value>
      </property>
    </configuration>
    


    - mapred-site.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    
    <configuration>
    	<!—指定MapReduce程序运行在Yarn上 -->
    	<property>
    		<name>mapreduce.framework.name</name>
    		<value>yarn</value>
    	</property>
    
    	<!-- 历史服务器端地址 -->
    	<property>
    		<name>mapreduce.jobhistory.address</name>
    		<value>hadoop102:10020</value>
    	</property>
    
    	<!-- 历史服务器web端地址 -->
    	<property>
        	<name>mapreduce.jobhistory.webapp.address</name>
    		<value>hadoop102:19888</value>
    	</property>
    </configuration>
    


    - Workers,将集群内所有主机名添加

    hadoop102
    hadoop103 
    hadoop104
    
  5. 关闭虚拟机,克隆。将新克隆的虚拟机打开,修改IP地址和主机名。

  6. 配置SSH免密登录。启动三台虚拟机,在每台虚拟机上都要做如下操作:

    [myHadoop@hadoop102 ~]$ cd ~/.ssh/ # 若没有.ssh目录,先输入 ssh hadoop102 生成该目录
    [myHadoop@hadoop102 .ssh]$ ssh-keygen -t rsa # 敲四下回车生成密钥对
    [myHadoop@hadoop102 .ssh]$ ssh-copy-id hadoop102 # 将密钥对发给集群内所有节点,包括自己
    [myHadoop@hadoop102 .ssh]$ ssh-copy-id hadoop103
    [myHadoop@hadoop102 .ssh]$ ssh-copy-id hadoop104
    
  7. 在主节点hadoop102上格式化集群

    [myHadoop@hadoop102 hadoop-3.1.3]$ ./bin/hdfs namenode -format
    

    successfully formatted
    出现该语句即格式化成功!

  8. 启动集群
    在NameNode主节点hadoop102启动hdfs服务,在ResourceManager主节点hadoop103上启动yarn服务。

    [myHadoop@hadoop102 hadoop-3.1.3]$ start-dfs.sh	# 注意节点不同
    [myHadoop@hadoop103 hadoop-3.1.3]$ start-yarn.sh # 注意节点不同
    
  9. 使用Java命令查看进程

    [myHadoop@hadoop102 hadoop-3.1.3]$ jps
    [myHadoop@hadoop103 hadoop-3.1.3]$ jps
    [myHadoop@hadoop104 hadoop-3.1.3]$ jps
    

    hadoop102上应出现如下四个进程(进程号可能不同)
    在这里插入图片描述
    hadoop103上应出现如下四个进程(进程号可能不同)
    在这里插入图片描述
    hadoop104上应出现如下四个进程(进程号可能不同)
    在这里插入图片描述

问题总结

搭建好集群后做一些总结

  1. 集群规划
hadoop102hadoop103hadoop104
NameNode
DataNode
SecondayNameNode
ResourceManager
NodeManger

   这样分配的意义是为了避免单节点负载过重。

  2. 注意以下基础问题:防火墙没关闭主机名称配置错误IP地址配置错误ssh没有配置好配置文件修改不细心配置环境变量后没有刷新

  3. 若发现 NameNode 和 DataNode 总有一个会宕机,应:

  • 关闭集群;
  • 删除hadoop目录下生成的 data 和 logs 目录;
  • 仔细检查步骤2中可能出现的问题;
  • 重新格式化,重新启动集群
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值