【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第1张图片

目录 

三大模式:

完全分布式搭建:

分析:

编写集群分发脚本xsync:

1.scp(secure copy)安全拷贝:

2.rsync远程同步工具:

3.xsync集群分发脚本:

SSH无密登录配置:

配置SSH:

1.基本语法:

2.ssh连接时出现Host key verification failed的解决办法:

无密钥配置:

1.免密钥登录原理:

2.生成公钥和私钥:

3.将公钥拷贝到需要免密码登录的目标机器:

集群配置:

集群部署规划:

注意:

配置文件说明:

默认配置文件:

自定义配置文件:

配置集群:

核心配置文件:

HDFS配置文件:

YARN配置文件:

MapReduce配置文件:

在集群上分发配置好的Hadoop配置文件:

查看分发配置好的Hadoop文件:

群起集群:

配置workers

启动集群:

测试集群:

上传文件到集群:

上传文件后查看文件放在什么位置:

拼接:

下载:

执行:

集群启动/停止方式总结:

重新格式化集群操作:

配置历史服务器:

配置mapred-site.xml:

在hadoop02启动历史服务器:

配置日志的聚集:

配置yarn-site.xml

集群时间同步:

集群启动/停止脚本:

问题解决:

查看三台服务器Java进程:jpsall脚本

常用端口说明:


官网:Apache Hadoop

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第2张图片

三大模式:

  • 本地模式:数据存储在Linux服务器本地
  • 伪分布式:数据存储在HDFS
  • 完全分布式:数据存储在HDFS/多态服务器工作

完全分布式搭建:

分析:

  • 准备三台客户机(关闭防火墙、静态IP、主机名称)
  • 安装JDK
  • 配置环境变量
  • 配置集群
  • 单点启动
  • 配置SSH
  • 群起并测试集群

编写集群分发脚本xsync:

1.scp(secure copy)安全拷贝:

scp定义:

scp可以实现服务器和服务器之间恶的数据拷贝(from server1 to server2)

scp基本语法:

scp -r $pdir/$fname $user@host:$pdir/$fname

命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称

scp -r jdk1.8.0_212/ [email protected]:/opt/module/

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第3张图片

scp -r [email protected]:/opt/module/hadoop-3.1.3 ./

scp -r root@hadoop02:/opt/module/* root@hadoop04:/opt/module/

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第4张图片

2.rsync远程同步工具:

  • rsync主要用于备份和镜像。速度快、避免赋值相同内容和支持符号连接
  • rsync和scp主要区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。

基本语法:

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

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

选项

功能

-a

递归拷贝

-v

显示复制过程

3.xsync集群分发脚本:

  • 循环复制文件到所有节点的相同目录下
  • 脚本命令:xsunc 要同步的文件名
  • 脚本要在任何路径下都可以使用(脚本放在声明了全局变量的路径)

进入/root/bin目录:

/root/bin目录下创建脚本

脚本实现:

#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
  echo Not Enough Arguement!
  exit;
fi
#2. 遍历集群所有机器
for host in hadoop02 hadoop03 hadoop04
do
  echo ====================  $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:$pdir
    else
      echo $file does not exists!
    fi
  done
done

赋予脚本可执行权限:

chmod 777 xsync

分发脚本文件:

xsync bin/

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第5张图片

分发配置文件:(同步环境变量)

xsync /etc/profile.d/my_env.sh

sudo ./bin/xsync /etc/profile.d/my_env.sh

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第6张图片

source /etc/profile:刷新资源


SSH无密登录配置:

配置SSH:

1.基本语法:

ssh 另外一台电脑的ip地址

2.ssh连接时出现Host key verification failed的解决办法:

The authenticity of host '192.168.1.103 (192.168.1.103)' can't be established.
RSA key fingerprint is cf:1e:de:d7:d0:4c:2d:98:60:b4:fd:ae:b1:2d:ad:06.
Are you sure you want to continue connecting (yes/no)? 

直接输入yes

无密钥配置:

1.免密钥登录原理:

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第7张图片

2.生成公钥和私钥:

进入root家目录:cd /root

查看所有文件(包括隐藏文件):ll -a

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第8张图片

进入cd .ssh目录

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第9张图片

ssh-keygen -t rsa

然后敲(三个回车),就会生成两个文件id rsa(私钥)、id rsa.pub(公钥)

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第10张图片

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第11张图片

3.将公钥拷贝到需要免密码登录的目标机器:

ssh-copy-id hadoop02

ssh-copy-id hadoop03

ssh-copy-id hadoop04

注意:使用root账户(不同的账户)需要重新配置免密码登录

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第12张图片

配置完成后,执行xsync命令时,不需要再次输入密码:

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第13张图片


集群配置:

集群部署规划:

注意:

  • NameNode和SecondaryNode不要安装在一台服务器,这两个占用内存资源较大。
  • ResourceManager也很消耗内存,不要和NameNode和SecondaryNode配置在同一台机器上。

Hadoop02

Hadoop03

Hadoop04

HDFS

NameNode、DataNode

DataNode

SecondaryNameNode、DataNode

YARN

NodeManager

ResourceManager、NodeManager

NodeManager

配置文件说明:

Hadoop配置文件分为两大类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改响应的属性。

默认配置文件:

文件名

文件存放在Hadoop的jar包中位置

【core-default.xml】

hadoop-common-3.1.3.jar/core-default.xml

【hdfs-default.xml】

hadoop-hdfs-3.1.3.jar/hdfs-defalut.xml

【yarn-default,xml】

hadoop-yarn-common-3.1.3.jar/yarn-default.xml

【mapred-default.xml】

hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml

自定义配置文件:

core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。

配置集群:

核心配置文件:

配置core-site.xml

cd $HADOOP_HOME/etc/hadoop
vim core-site.xml

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第14张图片





		
    
        fs.defaultFS
        hdfs://hadoop02:8020
    

		
    
        hadoop.tmp.dir
        /opt/module/hadoop-3.1.3/data
    

    
        hadoop.proxyuser.atguigu.hosts
        *
    
    
        hadoop.proxyuser.atguigu.groups
        *
    
    
        hadoop.http.staticuser.user
        atguigu
    
  

HDFS配置文件:

配置hdfs-site.xml

vim hdfs-site.xml




  
  	
    
        dfs.namenode.secondary.http-address
        hadoop02:9870
    
  
  	
  	
    		dfs.namenode.secondary.http-address
        hadoop04:9868
  	
  

YARN配置文件:

配置yarn-site.xml

vim yarn-site.xml




  
  	
    
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    
  
  	
    
        yarn.resourcemanager.hostname
        hadoop03
    
  
    
    
        yarn.nodemanager.env-whitelist
        JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
    
    
        yarn.scheduler.minimum-allocation-mb
        512
    
    
        yarn.scheduler.maximum-allocation-mb
        4096
    
    
        yarn.nodemanager.resource.memory-mb
        4096
    
    
        yarn.nodemanager.pmem-check-enabled
        false
    
    
        yarn.nodemanager.vmem-check-enabled
        false
    

MapReduce配置文件:

配置Mapred-site.xml

vim mapred-site.xml




  
  	
    
        mapreduce.framework.name
        yarn
    

    
    
        mapreduce.jobhistory.address
        hadoop02:10020
    

    
    
        mapreduce.jobhistory.webapp.address
        hadoop02:19888
    

在集群上分发配置好的Hadoop配置文件:

/opt/module/hadoop-3.1.3/etc:进入hadoop配置文件目录

xsync hadoop/:分发文件

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第15张图片

查看分发配置好的Hadoop文件:

cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml

群起集群:

配置workers

vim /opt/module/hadoop-3.1.3/etc/hadoop/workers

注意:在编写配置这个配置文件时,不能有空格,或者空行!!!

hadoop02
hadoop03
hadoop04

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第16张图片

cd /opt/module/hadoop-3.1.3/etc/hadoop

xsync workers:分发配置文件,同步所有节点的配置文件

启动集群:

如果集群是第一次启动,需要在hadoop02节点格式化NameNode(注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到以往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止nameNode和dataNode进程,并且要删除所有机器的data和logs目录,然后再进行格式化)

/opt/module/hadoop-3.1.3:进入hadoop目录

hdfs namenode -format:格式化操作

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第17张图片

格式化完成后会多出data、logs目录:

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第18张图片

/opt/module/hadoop-3.1.3/sbin

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第19张图片

sbin/star-dfs.sh:启动HDFS

问题解决:

启动出现以下问题

[root@localhost sbin]# start-all.sh
Starting namenodes on [hadoop]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [hadoop]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
2018-07-16 05:45:04,628 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Starting resourcemanager
ERROR: Attempting to operate on yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting operation.
Starting nodemanagers
ERROR: Attempting to operate on yarn nodemanager as root
ERROR: but there is no YARN_NODEMANAGER_USER defined. Aborting operation.

vim /etc/profile:进入配置文件

加入以下内容:

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

source /etc/profile:刷新配置文件

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第20张图片

jps:查看运行

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第21张图片

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第22张图片

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第23张图片

程序启动后,通过web浏览器访问:

http://192.168.10.101:9870/dfshealth.html#tab-overview

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第24张图片

注意:

如果web浏览器不能访问页面,注意以下操作:

  • 防火墙是否打开,端口号是否开发
  • 主机地址是否配置正确

在配置了ResourceManager的节点(hadoop103)启动YARN

sbin/start-yarn.sh

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第25张图片

问题解决:

ERROR: Attempting to operate on yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting operation.

出现以上报错信息需要到 sbin 目录下 更改 start-yarn.sh 和 stop-yarn.sh 信息,在两个配置文件的第一行添加:

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

最后再输入命令 /sbin/start-yarn.sh 启动 yarn

使用web浏览器访问:http://192.168.10.102:8088/cluster

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第26张图片

hadoop fs -mkdir /wcinput:创建目录

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第27张图片

测试集群:

上传文件到集群:

hadoop fs -mkdir /wcinput(Hadoop目录):创建一个文件目录

hadoop fs -put wcinput/demo.txt(文件) /wcinput(Hadoop目录):上传文件到Hadoop

上传文件后查看文件放在什么位置:

1.查看HDFS文件储存位置:

/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-433336804-192.168.10.101-1628733575726/current/finalized/subdir0/subdir0

2.使用cat命令可以查看文件内容

拼接:

cat 文件名 >> 映射文件.jar

tar -zxvf 文件名.jar

下载:

/opt/module/hadoop-3.1.3:进入hadoop主目录

bin/hadoop fs -get 文件名 存放路径

执行:

/opt/module/hadoop-3.1.3:进入hadoop主目录

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutput

集群启动/停止方式总结:

jps:查看当前hadoop进程

cd /opt/module/hadoop-3.1.3:进入hadoop主目录

sbin/star-dfs.sh:启动hdfs(在hdfs启动的那台服务器上执行)

sbin/start-yarn.sh:启动yarn(在yarn启动的那台服务器上执行)

cd /opt/module/hadoop-3.1.3:进入hadoop主目录

sbin/stop-yarn.sh:停止yarn(在yarn启动的那台服务器上执行)

sbin/stop-dfs.sh:停止hdfs(在hdfs启动的那台服务器上执行)

重新格式化的时候必须删除每一台服务器上的data和logs再进行格式化

/opt/module/hadoop-3.1.3:进入hadoop目录

hdfs namenode -format:格式化操作

重新格式化集群操作:

1.删除所有节点的data和logs:

rm -rf 文件夹名称:递归删除

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第28张图片

2.停止所有节点上的服务:

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第29张图片

3.重新格式化服务器:

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第30张图片

4.重新启动服务:

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第31张图片

配置历史服务器:

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第32张图片

为了查看程序的历史运行情况,需要配置一下历史服务器!

配置mapred-site.xml:

cd /opt/module/hadoop-3.1.3/etc/hadoop:进入目录

vim mapred-site.xml



    mapreduce.jobhistory.address
    hadoop02:10020




    mapreduce.jobhistory.webapp.address
    hadoop02:19888

xsync mapred-site.xml:分发配置好的文件到各个节点服务器上

重新启动yarn:

sbin/stop-yarn.sh

sbin/start-yarn.sh

在hadoop02启动历史服务器:

cd /opt/module/hadoop-3.1.3:进入hadoop主目录

bin/mapred --daemon start historyserver:启动历史服务器

mapred --daemon stop historyserver:停止历史服务器

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第33张图片

配置日志的聚集:

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

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

注意:开启日志聚集功能,需要重启NodeManager、ResourceManager、HistoryManager

配置yarn-site.xml


    yarn.log-aggregation-enable
    true

  
    yarn.log.server.url  
    http://${yarn.timeline-service.webapp.address}/applicationhistory/logs


    yarn.log-aggregation.retain-seconds
    604800


    yarn.timeline-service.enabled
    true


    yarn.timeline-service.hostname
    ${yarn.resourcemanager.hostname}


    yarn.timeline-service.http-cross-origin.enabled
    true


    yarn.resourcemanager.system-metrics-publisher.enabled
    true

分发到各个节点上,重启服务!!!

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第34张图片

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第35张图片

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第36张图片

集群时间同步:

如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准;

如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步。

找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,生产环境根据任务对时间的准确程度要求周期同步。测试环境为了尽快看到效果,采用1分钟同步一次。

【大数据】☀️搞定Hadoop集群☀️Hadoop运行模式-完全分布式_第37张图片

集群启动/停止脚本:

cd root/bin:进入bin目录

vim myhadoop.sh:创建脚本文件

#!/bin/bash

if [ $# -lt 1 ]
then
    echo "No Args Input..."
    exit ;
fi

case $1 in
"start")
        echo " =================== 启动 hadoop集群 ==================="

        echo " --------------- 启动 hdfs ---------------"
        ssh hadoop02 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
        echo " --------------- 启动 yarn ---------------"
        ssh hadoop03 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
        echo " --------------- 启动 historyserver ---------------"
        ssh hadoop02 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
        echo " =================== 关闭 hadoop集群 ==================="

        echo " --------------- 关闭 historyserver ---------------"
        ssh hadoop02 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
        echo " --------------- 关闭 yarn ---------------"
        ssh hadoop03 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
        echo " --------------- 关闭 hdfs ---------------"
        ssh hadoop02 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
    echo "Input Args Error..."
;;
esac

chmod 777 myhadoop.sh:赋予脚本执行权限

问题解决:

[root@hadloop2 hadoop-3.3.0]# sbin/start-dfs.sh 
Starting namenodes on [hadoop2]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [hadoop1]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.

cd $HADOOP_HOME:进入Hadoop主目录

  • 对于start-dfs.sh和stop-dfs.sh文件,添加下列参数:
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root  
  • 对于start-yarn.sh和stop-yarn.sh文件,添加下列参数:
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

查看三台服务器Java进程:jpsall脚本

#!/bin/bash

for host in hadoop02 hadoop03 hadoop04
do
        echo =============== $host ===============
        ssh $host jps 
done

常用端口说明:

端口名称

Hadoop2.X

Hadoop3.X

NameNode内部通信端口

8020/9000

8020/9000/9820

NameNode HTTP UI(对用户的查询端口)

50070

9870

MapReduce查看执行任务端口

8088

8088

历史服务器通信端口

19888

19888

你可能感兴趣的:(大数据,1024程序员节,big,data,hadoop,hdfs,ssh)