1 Hadoop 3.2.4分布式环境搭建

1 系统配置

  • 3台centOS虚拟机

    # 配置hosts解析
    vim /etc/hosts192.168.88.129    hadoop1
    192.168.88.130  hadoop2
    192.168.88.131  hadoop3
    
  • 修改主机名

    hostnamectl set-hostname hadoop1
    hostnamectl set-hostname hadoop2
    hostnamectl set-hostname hadoop3
    
  • 关闭防火墙

    #关闭防火墙
    systemctl stop firewalld.service
    #禁用开机启动
    systemctl disable firewalld.service#重启防火墙
    systemctl restart firewalld.service
    #查看防火墙状态
    systemctl status firewalld.service
    

    生产环境不允许直接关闭防火墙!!!只能配置策略,开通特定的端口!!

  • 禁用selinux

    修改 /etc/selinux/config 设置 SELINUX=disabled

    vim /etc/selinux/config
    
  • 重启使主机名等配置生效

  • 创建hadoop用户,并设置密码

    useradd hadoop
    passwd hadoop
    

    所有主机上都创建

    密码:fmi135246

  • 配置hadoop用户的root权限

    vim /etc/sudoers
    

    %wheel下一行添加内容

    hadoop ALL=(ALL) NOPASSWD:ALL
    

    NOPASSWD:ALL 表示使用sudo 命令时免输入密码 , 需要放在 %wheel 下一行 , 否则可能失效

  • 设置ssh免密登录

    # 进入密钥目录(有可能不存在)
    cd ~/.ssh
    # 删除旧密钥
    rm -rf ~/.ssh
    # 生成密钥
    ssh-keygen -t rsa
    # 公钥复制到ssh指定的密钥文件 authorized_keys
    cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys#修改文件权限(不设置可能导致失败)
    chmod 600 ~/.ssh/authorized_keys
    # 测试免密登录
    ssh -vvv hadoop1# 退出ssh登录
    exit
    

    ssh -vvv -vvv 表示输出调试信息,如果免密失败,可以从调试信息中查看原因,我在测试中,非root用户,必须修改 authorized_keys 文件的权限,否则设置免密不成功

  • 将hadoop1的公钥内容添加到其他主机的~/.ssh/authorized_keys中,这样hadoop1可以免密登录其他主机

    # 在hadoop1上执行
    ssh-copy-id hadoop1
    ssh-copy-id hadoop2
    ssh-copy-id hadoop3
    

    其他主机上同理执行

2 JDK安装

  • 解压安装包到 /opt/module

    # 创建目录
    sudo mkdir -p /opt/module
    # 修改权限
    sudo chown -R hadoop:hadoop /opt/module
    # 解压安装包到/opt/module
    tar -xvf jdk-8u341-linux-x64.tar.gz -C /opt/module/
    # 修改jdk目录名mv /opt/module/jdk1.8.0_341/ /opt/module/jdk
    
  • 配置环境变量

    可直接将jdk路径配置到 /etc/profile 文件,或者在 /etc/profile.d/新建 my_env.sh

    # 编辑文件
    sudo vim /etc/profile.d/my_env.sh# 添加内容
    export JAVA_HOME=/opt/module/jdk
    export PATH=$PATH:$JAVA_HOME/bin# 使变量生效
    source /etc/profile# 测试jdk
    java -version
    

    使用上个命令的参数 !$ ,或者 alt + .

3 安装hadoop

  • 解压到 /opt/module/hadoop

    tar -xvf hadoop-3.2.4.tar.gz -C /opt/modulesudo mv /opt/module/hadoop-3.2.4 /opt/module/hadoop
    
  • 配置环境变量到 /etc/profile.d/my_env.sh

    # 添加内容
    export JAVA_HOME=/opt/module/jdk
    export PATH=$PATH:$JAVA_HOME/bin
    export HADOOP_HOME=/opt/module/hadoop
    export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin#export HDFS_NAMENODE_USER=root
    #export HDFS_DATANODE_USER=root
    #export HDFS_SECONDARYNAMENODE_USER=root
    #export YARN_RESOURCEMANAGER_USER=root
    #export YARN_NODEMANAGER_USER=root
    

    $HADOOP_HOME/bin 和 $HADOOP_HOME/sbin 必须加入环境变量

  • 配置文件分发到其他主机

    scp /etc/profile.d/my_env.sh hadoop2:/etc/profile.d/
    scp /etc/profile.d/my_env.sh hadoop3:/etc/profile.d/
    

rsync -av pdir/pdir/pdir/fname user@user@user@host:pdir/pdir/pdir/fname

命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称

  • 使环境变量生效

    source /etc/profile
    
  • 配置hadoop-env.sh的jdk路径

    # 分别打开文件
    vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
    #vim /usr/local/hadoop/etc/hadoop/mapred-env.sh
    #vim /usr/local/hadoop/etc/hadoop/yarn-env.sh
    

    添加 JAVA_HOME配置

    export JAVA_HOME=/usr/local/jdk
    

    验证配置

    hadoop version
    
  • 复制jdk和hadoop到其他主机

    #通过ssh创建目录并修改权限
    ssh hadoop2 'sudo mkdir -p /opt/module;sudo chown -R hadoop:hadoop /opt/module'
    ssh hadoop3 'sudo mkdir -p /opt/module;sudo chown -R hadoop:hadoop /opt/module'
    # 复制安装文件到hadoop2主机
    scp -r /opt/module hadoop@hadoop2:/opt/
    scp -r /opt/module hadoop@hadoop3:/opt/
    
  • 登录其他主机配置jdk和hadoop的环境变量,参考前面配置 /etc/profile.d/my_env.sh 的步骤

4 hadoop配置文件配置

  • home/hadoop目录下新建bin目录,并将目录加到PATH

    # 创建目录
    mkdir -p /home/hadoop/bin
    # 修改环境变量
    vim /etc/profile.d/my_env.sh
    

    修改内容为:

    export JAVA_HOME=/opt/module/jdk
    export PATH=$PATH:$JAVA_HOME/bin
    export HADOOP_HOME=/opt/module/hadoop
    export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:/home/hadoop/bin
    
  • 编写集群文件分发脚本xsync

    新建xsync文件

    vim ~/bin/xsync
    

    添加如下内容

    #!/bin/bash#1. 判断参数个数
    if [ $# -lt 1 ]
    thenecho Not Enough Arguement!exit;
    fi#2. 遍历集群所有机器
    for host in hadoop2 hadoop3
    doecho ====================  $host  ====================#3. 遍历所有目录,挨个发送for file in $@do#4. 判断文件是否存在if [ -e $file ]then#5. 获取父目录pdir=$(cd -P $(dirname $file); pwd)#6. 获取当前文件的名称fname=$(basename $file)ssh $host "mkdir -p $pdir"rsync -av $pdir/$fname $host:$pdirelseecho $file does not exists!fidone
    done
    

    添加执行权限

    chmod +x ~/bin/xsync
    

    测试将文件复制到其他主机

    xsync /home/hadoop/bin
    
  • 集群规划部署

    hadoop1 hadoop2 hadoop3
    HDFS NameNode
    DataNode
    DataNode SecondaryNameNode
    DataNode
    YARN NodeManager ResourceManager
    NodeManager
    NodeManager

    规划原则: NameNode , SecondaryNameNode , ResourceManager 均比较占内存,故应部署在不同的主机上

  • 配置文件说明

    需要配置的配置文件位于hadoop安装目录下 $HADOOP_HOME/etc/hadoop

    配置文件名 配置说明
    core-site.xml 1 配置NameNode地址
    2 配置hadoop数据存储目录
    3 配置HDFS网页登录静态用户名
    hdfs-site.xml 1 配置NameNode web端访问地址
    2 配置SecondaryNameNode web端访问地址
    yarn-site.xml 1 配置MR走shuffle
    2 配置ResourceManger地址
    mapred-site.xml 1 配置MapReduce程序运行在yarn上
    1. 配置core-site.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><!-- 指定NameNode的地址 --><property><name>fs.defaultFS</name><value>hdfs://hadoop1:8020</value></property><!-- 指定hadoop数据的存储目录,需要手动创建目录 --><property><name>hadoop.tmp.dir</name><value>/opt/module/hadoop/data</value></property><!-- 配置HDFS网页登录使用的静态用户为hadoop --><property><name>hadoop.http.staticuser.user</name><value>hadoop</value></property>
      </configuration>
      
    2. 配置hdfs-site.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><!-- nn web端访问地址--><property><name>dfs.namenode.http-address</name><value>hadoop1:9870</value></property><!-- 2nn web端访问地址--><property><name>dfs.namenode.secondary.http-address</name><value>hadoop3:9868</value></property>
      </configuration>
      
    3. 配置yarn-site.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><!-- 指定MR走shuffle --><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><!-- 指定ResourceManager的地址--><property><name>yarn.resourcemanager.hostname</name><value>hadoop2</value></property></configuration>
      
    4. 配置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>
      </configuration>
      
  • 同步配置文件到其他主机

    xsync $HADOOP_HOME/etc/hadoop/
    

    登录其他主机查看配置文件是否同步成功

  • 启动集群

    1. 配置workers

      vim $HADOOP_HOME/etc/hadoop/workers
      

      添加内容

      hadoop1
      hadoop2
      hadoop3
      

      不能有空行,行尾不能有空格

    2. 同步文件到其他主机

      xsync $HADOOP_HOME/etc
      
    3. 启动集群

      如果是第一次启动,需要现在 NameNode 节点上执行格式化

      #在NameNode节点,即hadoop1上执行
      hdfs namenode -format
      

      注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的$HADOOP_HOME/data$HADOOP_HOME/logs目录,然后再进行格式化。

      在hadoop1主机启动HDFS

      #在NameNode节点执行,即hadoop1上执行
      start-dfs.sh
      

      在hadoop2主机启动YARN

      #在ResourceManager节点执行,即hadoop2上执行
      start-yarn.sh
      
    4. 通过web服务查看NameNode和ResourceManager

      # 查看HDFS的NameNode
      http://hadoop1:9870
      # 查看YARN的ResourceManager
      http://hadoop2:8088
      

      如果页面都能正常打开则集群启动成功

    5. 查看各节点进程

      # hadoop1 主机
      [hadoop@hadoop1 hadoop]$ jps
      21745 NodeManager
      21860 Jps
      20682 NameNode
      20797 DataNode# hadoop2主机
      [hadoop@hadoop2 hadoop]$ jps
      9986 DataNode
      10535 NodeManager
      10410 ResourceManager
      10891 Jps# hadoop3主机
      [hadoop@hadoop3 hadoop]$ jps
      17488 NodeManager
      17584 Jps
      17397 SecondaryNameNode
      17289 DataNode
      

5 配置历史服务器

​ 为了查看程序的历史运行情况,可以配置历史服务器

  • 配置mapred-site.xml

    # 添加如下内容
    <!-- 历史服务器端地址 -->
    <property><name>mapreduce.jobhistory.address</name><value>hadoop1:10020</value>
    </property><!-- 历史服务器web端地址 -->
    <property><name>mapreduce.jobhistory.webapp.address</name><value>hadoop1:19888</value>
    </property>
    
  • 同步配置到其他主机

    xsync $HADOOP_HOME/etc
    
  • 在hadoop1启动历史服务器

    mapred --daemon start historyserver
    
  • 查看进程

    [hadoop@hadoop1 hadoop]$ jps
    2176 NodeManager
    1714 NameNode
    2292 Jps
    1865 DataNode
    1533 JobHistoryServer
    
  • 访问web

    http://hadoop1:19888/jobhistory
    

6 配置日志聚集

​ 日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。

​ 日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。

​ 注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryServer。

  • 配置 yarn-site.xml

    添加内容

    <!-- 开启日志聚集功能 -->
    <property><name>yarn.log-aggregation-enable</name><value>true</value>
    </property>
    <!-- 设置日志聚集服务器地址 -->
    <property>  <name>yarn.log.server.url</name>  <value>http://hadoop1:19888/jobhistory/logs</value>
    </property>
    <!-- 设置日志保留时间为7天 -->
    <property><name>yarn.log-aggregation.retain-seconds</name><value>604800</value>
    </property>
    
  • 同步配置

    xsync $HADOOP_HOME/etc
    
  • 关闭NodeManager , ResourceManager , HistroyServer

    # 在hadoop2上执行
    stop-yarn.sh# 在hadoop1上执行
    mapred --daemon stop historyserver
    
  • 开启NodeManager , ResourceManager , HistroyServer

    # 在hadoop2上执行
    start-yarn.sh# 在hadoop1上执行
    mapred --daemon start historyserver
    

7 编写Hadoop集群常用脚本

1 hadoop集群启停脚本

  1. ~/bin目录下创建 myhadoop.sh

    vim ~/bin/myhadoop.sh
    
  2. 添加内容

    #!/bin/bashif [ $# -lt 1 ]
    thenecho "No Args Input..."exit ;
    ficase $1 in
    "start")echo " =================== 启动 hadoop集群 ==================="echo " --------------- 启动 hdfs ---------------"ssh hadoop1 "/opt/module/hadoop/sbin/start-dfs.sh"echo " --------------- 启动 yarn ---------------"ssh hadoop2 "/opt/module/hadoop/sbin/start-yarn.sh"echo " --------------- 启动 historyserver ---------------"ssh hadoop1 "/opt/module/hadoop/bin/mapred --daemon start historyserver"
    ;;
    "stop")echo " =================== 关闭 hadoop集群 ==================="echo " --------------- 关闭 historyserver ---------------"ssh hadoop1 "/opt/module/hadoop/bin/mapred --daemon stop historyserver"echo " --------------- 关闭 yarn ---------------"ssh hadoop2 "/opt/module/hadoop/sbin/stop-yarn.sh"echo " --------------- 关闭 hdfs ---------------"ssh hadoop1 "/opt/module/hadoop/sbin/stop-dfs.sh"
    ;;
    *)echo "Input Args Error..."
    ;;
    esac
    
  3. 添加执行权限

    chmod +x ~/bin/myhadoop.sh
    
  4. 测试脚本

    # 停止
    myhadoop.sh stop
    # 启动
    myhadoop.sh start
    
  5. 同步文件

    xsync ~/bin
    

2 查看三台主机的java进程脚本

  1. ~/bin目录下创建 jpsall

    vim ~/bin/jpsall
    
  2. 添加内容

    #!/bin/bashfor host in hadoop1 hadoop2 hadoop3
    doecho =============== $host ===============ssh $host 'jps'
    done
    
  3. 添加执行权限

    chmod +x ~/bin/jpsall
    
  4. 测试脚本

    [hadoop@hadoop1 ~]$ jpsall
    =============== hadoop1 ===============
    4448 DataNode
    4723 NodeManager
    4889 JobHistoryServer
    4985 Jps
    4299 NameNode
    =============== hadoop2 ===============
    4372 DataNode
    4550 ResourceManager
    5053 Jps
    4686 NodeManager
    =============== hadoop3 ===============
    3420 SecondaryNameNode
    3677 Jps
    3310 DataNode
    3503 NodeManager
    
  5. 同步到其他主机

    xsync ~/bin/
    

8 默认常用端口号说明

端口 Hadoop2.X hadoop3.x
NameNode内部通信端口 8020/9000 8020/9000/9820
NameNode HTTP UI 50070 9870
MapReduce 查看执行任务端口 8088 8088
历史服务器通信端口 19888 19888

1 Hadoop 3.2.4分布式环境搭建相关推荐

  1. 最详细的Hadoop+Hbase+Hive完全分布式环境搭建教程(二)

    继续上次的教程,这次安装hbase与hive.之前有同学反应百度网盘中没有hbase安装包,这次补上了,在上篇博客的网盘链接中已经有了,最详细的Hadoop+Hbase+Hive完全分布式环境搭建教程 ...

  2. Hadoop单机和伪分布式环境搭建

    hadoop环境搭建 1.三个环境        单机.伪分布式.分布式 2.三个分支       apache版本(Apache基金会)       cdh版本(cloudera公司)       ...

  3. Hadoop入门基础教程 Hadoop之完全分布式环境搭建

    上一篇我们完成了Hadoop伪分布式环境的搭建,伪分布式模式也叫单节点集群模式, NameNode.SecondaryNameNode.DataNode.JobTracker.TaskTracker所 ...

  4. 2021年大数据环境搭建(二):分布式环境搭建

    2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 目录 分布式环境搭建 集群规 ...

  5. Hadoop2.2.0伪分布式环境搭建(附:64位下编译Hadoop-2.2.0过程)

    Hadoop2.2.0伪分布式环境搭建: 写在前面:Hadoop2.2.0默认是支持32位的OS,如果想要在64位OS下运行的话,可以通过在64位OS下面编译Hadoop2.2.0来实现,编译的操作步 ...

  6. HDFS伪分布式环境搭建-很不错

    HDFS伪分布式环境搭建 原创 ZeroOne01 2018-03-24 19:51:20 评论(0) 655人阅读 HDFS概述及设计目标 什么是HDFS: 是Hadoop实现的一个分布式文件系统( ...

  7. Zookeeper分布式环境搭建

    Zookeeper分布式环境搭建 一.分布式安装部署 1.前置条件 2.集群规划 3.解压安装 4.配置zoo.cfg文件 5.集群操作 二.配置参数解读 1.tickTime 2.initLimit ...

  8. ZooKeeper之分布式环境搭建

    第1关:仲裁模式与伪分布式环境搭建 本关任务:了解ZooKeeper的仲裁模式,掌握伪分布式安装. vi /opt/zookeeper-3.4.12/conf/zoo.cfg 增加以下内容并保存:se ...

  9. jmeter分布式环境搭建

    jmeter分布式环境搭建部署 jmeter分布式环境搭建 Jmeter运行方式:GUI和非GUI GUI.非GUI遇到的问题 如何解决? Jmeter分布式部署流程 Jmeter非GUI运行时动态参 ...

最新文章

  1. .net移动端开发_移动端开发1(前端一)
  2. discuz 的 group.php,DiscuzX用户组过期问题解决方法
  3. 深度学习常见算法之训练自己的数据
  4. 基于C#的计时管理器
  5. Exynos4412 IIC 总线驱动开发相关问题总结
  6. sql字符串拼接_Mybatis的SqlSession执行sql过程
  7. Telnet远程访问思科交换机、路由器
  8. spark消费kafka产生数据堆积怎么处理_SparkStreaming读取Kafka的两种方式
  9. python label显示图片_高大上的YOLOV3对象检测算法,使用python也可轻松实现
  10. RedisUtil工具类
  11. 【c语言】背包问题的贪心法
  12. Java-幸运抽奖系统(综合练习)
  13. 计算机软件研究方法与技术路线,项目的研究方法与技术路线
  14. 手把手教大家实现一个电子签名
  15. 思科计算机网络(1)计算机网络概述
  16. qemu内存管理——扁平视图
  17. 推荐5款Windows桌面效率工具
  18. 【Hive】什么是数据仓库?数据仓库和数据库有什么关系?
  19. webservice 菜鸟探索之旅
  20. 一个自动将状态机生成代码的软件

热门文章

  1. 编译时遇到stray '\239' inprogram,stray '\187' inprogram,stray '\191' inprogram的解决办法
  2. 核磁共振成像常用技术——杨正汉(6)
  3. 超细的CSS学习笔记(CSS详解)
  4. DreamMail无法打开邮件数据库问题的解决办法
  5. matlab计算数据MEA与RMSE误差指标
  6. 声控助手_我从构建声控机器人获得的见解
  7. LIMS在国产软件,SampleManager,西门子OpcenterRdnl在原始记录中的三种实现形式
  8. Grammarly安装
  9. 详解区块链技术,如何运作
  10. aaa认证服务器安装位置,Cisco AAA服务器 安装调试及配置验证