Hadoop详解(02)Hadoop集群运行环境搭建

虚拟机环境准备

虚拟机节点数:3台

操作系统版本:CentOS-7.6-x86-1810

虚拟机 内存4G,硬盘99G

IP地址分配

192.168.194.102 hadoop102

192.168.194.103 hadoop103

192.168.194.104 hadoop104

  • 安装必要环境

yum install -y epel-release

yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static tree iotop git

  • 关闭防火墙,关闭防火墙开机自启

systemctl stop firewalld

systemctl disable firewalld

  • 创建普通用户(以hadoop用户),并修改用户的密码

    [root@hadoop102 ~]# useradd hadoop

    [root@hadoop102 ~]# passwd hadoop

    Changing password for user hadoop.

    New password:

    BAD PASSWORD: The password is shorter than 8 characters

    Retype new password:

    passwd: all authentication tokens updated successfully.

  • 配置hadoop用户具有root权限,方便后期加sudo执行root权限的命令

    [root@hadoop102 ~]# vim /etc/sudoers

修改/etc/sudoers文件,找到下面一行(91行),在root下面添加一行,如下所示:

## Allow root to run any commands anywhere

root    ALL=(ALL)       ALL

hadoop   ALL=(ALL)     NOPASSWD:ALL

  • 在/opt目录下创建文件夹,并修改所属主和所属组

(1)在/opt目录下创建module、software文件夹

[root@hadoop102 ~]# mkdir /opt/module

[root@hadoop102 ~]# mkdir /opt/software

(2)修改module、software文件夹的所有者和所属组均为hadoop用户

[root@hadoop102 ~]# chown hadoop:hadoop /opt/module

[root@hadoop102 ~]# chown hadoop:hadoop /opt/software

(3)修改module、software文件夹的权限

[root@hadoop102 opt]# cd /opt/

[root@hadoop102 opt]# chmod -R 777 module/ software/

(4)查看module、software文件夹的所有者和所属组

[root@hadoop102 opt]# ll

total 0

drwxrwxrwx. 2 hadoop hadoop 6 Nov 23 22:06 module

drwxrwxrwx. 2 hadoop hadoop 67 Nov 23 21:55 software

  • 卸载虚拟机自带的open JDK

查询已安装Java软件

[root@hadoop102 opt]$ rpm -qa | grep java

卸载该JDK:

[root@hadoop102 opt]$ sudo rpm -e jdk的软件包名称

查询并卸载open JDK命令(将上述两个步骤和到一块)

rpm -qa | grep -i java | xargs -n1 rpm -e –nodeps

  • 修改克隆机主机名

修改主机名称,两种方法二选一

方式一

[root@hadoop102 ~]# hostnamectl --static set-hostname hadoop102

方式二

修改/etc/hostname文件

[root@hadoop102 ~]# vi /etc/hostname

清空原来内容,添加如下内容,添加的内容即为主机名称

hadoop102

  • 配置linux克隆机主机名称映射hosts文件

编辑/etc/hosts文件

[root@hadoop102 ~]# vi /etc/hosts

在文件中添加如下内容(Shift+g调到文件末尾,o 在本行下面添加一行)

192.168.194.102 hadoop102

192.168.194.103 hadoop103

192.168.194.104 hadoop104

使用ping 命令测试配置是否成功

[root@hadoop102 ~]# ping hadoop102

[root@hadoop102 ~]# ping hadoop103

[root@hadoop102 ~]# ping hadoop104

  • 修改windows的主机映射文件(hosts文件)

    修改windows上的hosts文件是为了能够在本地Windows物理机上通过主机名称访问集群,如果不配置只能通过ip的方式访问,在访问集群时跳转页面时可能会出现主机名的链接,这样就无法正常访问了

    进入C:\Windows\System32\drivers\etc路径

    打开hosts文件并添加如下内容,然后保存

    192.168.194.102 hadoop102

    192.168.194.103 hadoop103

    192.168.194.104 hadoop104

  • 将上面的所有操作分别在hadoop103、hadoop104两台机器上重复执行

    注意在修改主机名称时调整hadoop103、hadoop104的主机名称

安装JDK

  • 将jdk1.8安装包上传到服务器/opt/software目录下

    [root@hadoop102 software]# cd /opt/software/

    [root@hadoop102 software]# ls

    jdk-8u212-linux-x64.tar.gz

  • 解压JDK到/opt/module目录下

    [root@hadoop102 software]# tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/

  • 配置JDK环境变量

修改/etc/profile文件

[root@hadoop102 software]# vi /etc/profile

在文件末尾添加如下内容

#JAVA_HOME

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

export PATH=$PATH:$JAVA_HOME/bin

保存后退出

:wq

source一下/etc/profile文件,让新的环境变量PATH生效

[root@hadoop102 software]# source /etc/profile

  • 测试JDK是否安装成功

    [root@hadoop102 software]# java -version

如果能看到以下结果,则代表Java安装成功

[root@hadoop102 software]# 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)

  • Jdk拷贝到其他两台机器

拷贝jdk安装文件

[root@hadoop102 ~]# scp -r /opt/module/jdk1.8.0_212/ hadoop103:/opt/module/

[root@hadoop102 ~]# scp -r /opt/module/jdk1.8.0_212/ hadoop104:/opt/module/

拷贝/etc/profile文件

scp /etc/profile hadoop103:/etc/

scp /etc/profile hadoop104:/etc/

分别在另外两台机器执行命令重新加载环境变量

[root@hadoop103 opt]# source /etc/profile

[root@hadoop104 opt]# source /etc/profile

分别查看jdk的安装版本

[root@hadoop103 opt]# java -version

第一次使用scp命令分发文件时会出现

Are you sure you want to continue connecting (yes/no)? yes

输入yes,然后再输入登录密码,如果配置了ssh免密登录后就不用再每次拷贝文件时都要输入密码了

Hadoop安装

安装环境准备

  • 切换用户

切换hadoop用户

注意:对hadoop的安装、管理等操作都使用普通用户,如果使用root用户需要还需要配置额外的参数

  • 安装包下载

Hadoop安装包下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/

  • SSH无密登录配置

Hadoop需要通过SSH来启动salve列表中各台主机的守护进程,因此SSH也是必须安装的,即使是安装伪分布式版本(因为Hadoop并没有区分集群式和伪分布式),Hadoop会采用与集群相同的处理方式,即依次序启动文件conf/slaves中记载的主机上的进程,只不过伪分布式中salve为localhost(即为自身),所以对于伪分布式Hadoop,SSH一样是必须的。

生成密匙

[hadoop@hadoop102 ~]$ ssh-keygen

执行ssh-keygen连按4个回车

拷贝密匙到所有服务器

[hadoop@hadoop102 ~]$ ssh-copy-id hadoop102

[hadoop@hadoop102 ~]$ ssh-copy-id hadoop103

[hadoop@hadoop102 ~]$ ssh-copy-id hadoop104

注意:ssh-copy-id拷贝密匙本机也需要拷贝,因为hadoop在启动集群时即便是启动本机上的进程时也是通过ssh操作的

测试ssh免密登录

[hadoop@hadoop102 hadoop]$ ssh hadoop102 date;

Wed Nov 24 19:25:47 CST 2021

[hadoop@hadoop102 hadoop]$ ssh hadoop103 date;

Wed Nov 24 19:25:52 CST 2021

[hadoop@hadoop102 hadoop]$ ssh hadoop104 date;

Wed Nov 24 19:25:56 CST 2021

执行ssh hadoop102 date;命令时能够正确的显示时间并不需要输入密码即配置成功

安装hadoop

  • 上传文件

将hadoop-3.1.3.tar.gz上传到服务器的/opt/software文件夹下面

  • 解压:

    [hadoop@hadoop102 ~]$ cd /opt/software/

    [hadoop@hadoop102 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/

删除说明文档文件夹(可选)

删除/opt/module/hadoop-3.1.3/share/doc/hadoop目录,该目录是hadoop的说明文档,内有大量的小文件,删除该文件夹可更快的分发hadoop安装包到其他机器,不删除也不影响使用

[hadoop@hadoop102 doc]$ cd /opt/module/hadoop-3.1.3/share/doc/

[hadoop@hadoop102 doc]$ rm -rf hadoop/

  • 查看Hadoop目录结构
  1. [hadoop@hadoop102 hadoop-3.1.3]$ ll
  2. total 176
  3. drwxr-xr-x. 2 hadoop hadoop    183 Sep 12  2019 bin
  4. drwxr-xr-x. 3 hadoop hadoop     20 Sep 12  2019 etc
  5. drwxr-xr-x. 2 hadoop hadoop    106 Sep 12  2019 include
  6. drwxr-xr-x. 3 hadoop hadoop     20 Sep 12  2019 lib
  7. drwxr-xr-x. 4 hadoop hadoop    288 Sep 12  2019 libexec
  8. -rw-rw-r--. 1 hadoop hadoop 147145 Sep  4  2019 LICENSE.txt
  9. -rw-rw-r--. 1 hadoop hadoop  21867 Sep  4  2019 NOTICE.txt
  10. -rw-rw-r--. 1 hadoop hadoop   1366 Sep  4  2019 README.txt
  11. drwxr-xr-x. 3 hadoop hadoop   4096 Sep 12  2019 sbin
  12. drwxr-xr-x. 4 hadoop hadoop     31 Sep 12  2019 share

重要目录说明

(1)bin目录:存放对Hadoop相关服务(HDFS,YARN)进行操作的脚本

(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件

(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)

(4)sbin目录:存放启动或停止Hadoop相关服务的脚本

(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例

  • Hadoop添加到环境变量

获取Hadoop安装路径

[hadoop@hadoop102 hadoop-3.1.3]$ pwd

/opt/module/hadoop-3.1.3

打开/etc/profile文件

[hadoop@hadoop102 hadoop-3.1.3]$ sudo vim /etc/profile

在文件末尾添加如下内容:(shift+g)

#HADOOP_HOME

export HADOOP_HOME=/opt/module/hadoop-3.1.3

export PATH=$PATH:$HADOOP_HOME/bin

export PATH=$PATH:$HADOOP_HOME/sbin

保存后退出

:wq

让修改后的文件生效

[hadoop@hadoop102 hadoop-3.1.3]$ source /etc/profile

测试是否安装成功

[hadoop@hadoop102 hadoop-3.1.3]$ hadoop version

Hadoop 3.1.3

Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r ba631c436b806728f8ec2f54ab1e289526c90579

Compiled by ztang on 2019-09-12T02:47Z

Compiled with protoc 2.5.0

From source with checksum ec785077c385118ac91aadde5ec9799

This command was run using /opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-common-3.1.3.jar

Hadoop运行模式

  • Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式。详见Hadoop官方网站
  • 本地运行模式(官方wordcount 了解,一般不会使用)

1)创建在hadoop-3.1.3文件下面创建一个wcinput文件夹

mkdir wcinput

2)在wcinput文件下创建一个word.txt文件

cd wcinput

3)编辑word.txt文件

vim word.txt

在文件中输入如下内容

hadoop yarn

hadoop mapreduce

hello

hello

保存退出::wq

4)回到Hadoop目录/opt/module/hadoop-3.1.3

5)执行程序

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

6)查看结果

cat wcoutput/part-r-00000

看到如下结果:

hadoop 2

hello 2

mapreduce 1

yarn 1

完全分布式运行模式

  • 集群部署规划

     

    hadoop102

    hadoop103

    hadoop104

    HDFS

    NameNode

    DataNode

    DataNode

    SecondaryNameNode

    DataNode

    YARN

    ResourceManager

    NodeManager

    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-default.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 /opt/module/hadoop-3.1.3/etc/hadoop/

vi 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://hadoop102:9820</value>

</property>

<!-- 指定hadoop数据的存储目录 -->

<property>

<name>hadoop.tmp.dir</name>

<value>/opt/module/hadoop-3.1.3/data</value>

</property>

<!-- 配置HDFS网页登录使用的静态用户为hadoop -->

<property>

<name>hadoop.http.staticuser.user</name>

<value>hadoop</value>

</property>

<!-- 配置该hadoop(superUser)允许通过代理访问的主机节点 -->

<property>

<name>hadoop.proxyuser.hadoop.hosts</name>

<value>*</value>

</property>

<!-- 配置该hadoop(superUser)允许通过代理用户所属组 -->

<property>

<name>hadoop.proxyuser.hadoop.groups</name>

<value>*</value>

</property>

<!-- 配置该hadoop(superUser)允许通过代理的用户-->

<property>

<name>hadoop.proxyuser.hadoop.groups</name>

<value>*</value>

</property>

</configuration>

HDFS配置文件

vim 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>hadoop102:9870</value>

</property>

<!-- 2nn web端访问地址-->

<property>

<name>dfs.namenode.secondary.http-address</name>

<value>hadoop104:9868</value>

</property>

</configuration>

YARN配置文件

vim 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>hadoop102</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>

<!-- yarn容器允许分配的最大最小内存 -->

<property>

<name>yarn.scheduler.minimum-allocation-mb</name>

<value>512</value>

</property>

<property>

<name>yarn.scheduler.maximum-allocation-mb</name>

<value>4096</value>

</property>

<!-- yarn容器允许管理的物理内存大小 -->

<property>

<name>yarn.nodemanager.resource.memory-mb</name>

<value>4096</value>

</property>

<!-- 关闭yarn对物理内存和虚拟内存的限制检查 -->

<property>

<name>yarn.nodemanager.pmem-check-enabled</name>

<value>false</value>

</property>

<property>

<name>yarn.nodemanager.vmem-check-enabled</name>

<value>false</value>

</property>

</configuration>

MapReduce配置文件

vim 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>

配置workers

vim workers

文件内容:

hadoop102

hadoop103

hadoop104

注意:该文件中添加的内容前后不允许有空格,文件中不允许有空行。

修改hadoop-env.sh文件

vi hadoop-env.sh

找到已经注释了"export JAVA_HOME"的代码行,写入对应的JAVA_HOME变量值

# The java implementation to use. By default, this environment

# variable is REQUIRED on ALL platforms except OS X!

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

找到已经注释了" export HADOOP_PID_DIR "的代码行,写入对应的HADOOP_PID_DIR变量值

# Where pid files are stored. /tmp by default.

export HADOOP_PID_DIR=/opt/module/hadoop-3.1.3/tmp/pids

创建HADOOP_PID_DIR目录

[hadoop@hadoop102 hadoop]$ mkdir /opt/module/hadoop-3.1.3/tmp/

说明:

JAVA_HOME的路径一定要填写绝对路径

HADOOP_PID_DIR的值可以选择不修改,默认会在/tmp目录下,修改后需要创建对应的目录,只需要创建到tmp文件夹就行,pids会自动生成。一般最好放修改位hadoop安装目录下,方便拷贝到其他节点(虚拟机)上

  • 配置注意项
  • JAVA_HOME的路径一定要填写绝对路径!
  • HADOOP_PID_DIR的值可以先填上去,后面再去创建,创建的时候最好放在hadoop安装目录下,而且只需要创建到tmp文件夹就行,pids会自动生成,方便拷贝到其他节点(虚拟机)上

将修改好配置文件后的hadoop安装文件夹 /opt/module/hadoop-3.1.3拷贝到另外两台机器

[hadoop@hadoop102 hadoop]$ scp -r /opt/module/hadoop-3.1.3/ hadoop103:/opt/module/

[hadoop@hadoop102 hadoop]$ scp -r /opt/module/hadoop-3.1.3/ hadoop104:/opt/module/

启动集群并测试

  • 格式化NameNode

如果集群是第一次启动,需要在hadoop102节点(主节点)格式化NameNode。

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

格式化NameNode命令

[hadoop@hadoop102 hadoop]$ hdfs namenode -format

  • 启动集群

启动HDFS

[hadoop@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh

启动yarn

[hadoop@hadoop102 hadoop-3.1.3]$ sbin/start-yarn.sh

Hdfs和yarn一块启动的命令:sbin/start-all.sh

  • 查看是否启动成功

hdfs和yarn成功启动的完整日志

  1. [hadoop@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
  2. Starting namenodes on [hadoop102]
  3. Starting datanodes
  4. hadoop103: WARNING: /opt/module/hadoop3.1.3/tmp/pids does not exist. Creating.
  5. hadoop103: WARNING: /opt/module/hadoop-3.1.3/logs does not exist. Creating.
  6. hadoop104: WARNING: /opt/module/hadoop3.1.3/tmp/pids does not exist. Creating.
  7. hadoop104: WARNING: /opt/module/hadoop-3.1.3/logs does not exist. Creating.
  8. Starting secondary namenodes [hadoop104]
  9. [hadoop@hadoop102 hadoop-3.1.3]$ sbin/start-yarn.sh
  10. Starting resourcemanager
  11. Starting nodemanagers

Jps查看进程,分别在三台机器上执行jps命令查看进程

  1. [hadoop@hadoop102 hadoop-3.1.3]$ jps
  2. 6900 Jps
  3. 6280 DataNode
  4. 6761 NodeManager
  5. 6652 ResourceManager
  6. 6174 NameNode
  7.  
  8. [hadoop@hadoop103 hadoop-3.1.3]$ jps
  9. 2193 NodeManager
  10. 2277 Jps
  11. 2072 DataNode
  12.  
  13. [hadoop@hadoop104 hadoop-3.1.3]$ jps
  14. 2129 NodeManager
  15. 2005 SecondaryNameNode
  16. 1928 DataNode
  17. 2217 Jps

Web页面查看

浏览器中输入http://hadoop102:9870/ 查看hdfs信息

查看hdfs的节点信息:http://hadoop102:9870/dfshealth.html#tab-datanode

访问页面后网下滚动

浏览器中输入 http://hadoop102:8088/ 查看yarn信息

查看节点信息

  • 基准测试

上传文件

[hadoop@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /input

[hadoop@hadoop102 hadoop-3.1.3]$ hadoop fs -put /opt/software/hadoop-3.1.3.tar.gz /input

查看上传的文件

下载hdfs中的文件

[hadoop@hadoop102 hadoop-3.1.3]$ hadoop fs -get /input/hadoop-3.1.3.tar.gz ./

提交yarn任务

[hadoop@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar pi 5 10

查看任务在yarn平台上运行,需要等待任务正式提交到了yanr平台上才能看到,

集群启动/停止方式总结

  • 各个服务组件逐一启动/停止

(1)分别启动/停止HDFS组件

hdfs --daemon start/stop namenode/datanode/secondarynamenode

(2)启动/停止YARN

yarn --daemon 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

配置历史服务器(可选)

为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:

  • 配置mapred-site.xml

    [hadoop@hadoop102 hadoop]$ vi mapred-site.xml

在该文件里面增加如下配置

<!-- 历史服务器端地址 -->

<property>

<name>mapreduce.jobhistory.address</name>

<value>hadoop102:10020</value>

</property>

<!-- 历史服务器web端地址 -->

<property>

<name>mapreduce.jobhistory.webapp.address</name>

<value>hadoop102:19888</value>

</property>

分发配置文件

[hadoop@hadoop102 hadoop]$ scp mapred-site.xml hadoop103:/opt/module/hadoop-3.1.3/etc/hadoop/

[hadoop@hadoop102 hadoop]$ scp mapred-site.xml hadoop104:/opt/module/hadoop-3.1.3/etc/hadoop/

配置日志的聚集(可选)

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

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

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

开启日志聚集功能具体步骤如下:

  • 配置yarn-site.xml

    [hadoop@hadoop102 hadoop]$ vim yarn-site.xml

在该文件里面增加如下配置

<!-- 开启日志聚集功能 -->

<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>

<!-- 设置日志保留时间为7天 -->

<property>

<name>yarn.log-aggregation.retain-seconds</name>

<value>604800</value>

</property>

  • 分发配置

    [hadoop@hadoop102 hadoop]$ scp yarn-site.xml hadoop103:/opt/module/hadoop-3.1.3/etc/hadoop/

    [hadoop@hadoop102 hadoop]$ scp yarn-site.xml hadoop104:/opt/module/hadoop-3.1.3/etc/hadoop/

  • 重启NodeManager 、ResourceManager和HistoryServer

停止

[hadoop@hadoop102 hadoop-3.1.3]$ stop-yarn.sh

[hadoop@hadoop102 hadoop-3.1.3]$ mapred --daemon stop historyserver

启动

[hadoop@hadoop102 hadoop-3.1.3]$ start-yarn.sh

[hadoop@hadoop102 hadoop-3.1.3]$ mapred --daemon start historyserver

  • 提交yarn任务

    [hadoop@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar pi 5 10

  • 查看日志

http://hadoop102:19888/jobhistory

编写hadoop集群常用脚本

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

    [hadoop@hadoop102 ~]$ cd /home/hadoop/

    [hadoop@hadoop102 ~]$ mkdir bin

    [hadoop@hadoop102 ~]$ cd bin/

    [hadoop@hadoop102 bin]$ vi jpsall

添加如下内容

#!/bin/bash

for host in hadoop102 hadoop103 hadoop104

do

echo =============== $host ===============

ssh $host jps $@ | grep -v Jps

done

保存后退出,然后赋予脚本执行权限

[hadoop@hadoop102 bin]$ chmod +x jpsall

测试执行

[hadoop@hadoop102 bin]$ jpsall

=============== hadoop102 ===============

11364 NameNode

12726 ResourceManager

13110 JobHistoryServer

12840 NodeManager

11471 DataNode

=============== hadoop103 ===============

4386 NodeManager

4019 DataNode

=============== hadoop104 ===============

4147 NodeManager

3576 SecondaryNameNode

3497 DataNode

遇到错误及解决办法

如果执行jpsall脚本报如下错误

[hadoop@hadoop102 bin]$ jpsall

=============== hadoop102 ===============

bash: jps: command not found

=============== hadoop103 ===============

bash: jps: command not found

=============== hadoop104 ===============

bash: jps: command not fo

问题原因:

在配置JAVA_HOME的环境变量时,很多人习惯配置在/etc/profile文件中,而不是~/.bashrc文件中。在/etc/profile文件中设置系统环境参数,比如$PATH,是仅对系统内所有用户生效。而设置~/.bashrc文件中的环境变量是针对某一个特定的用户,因此环境变量的设置也只对该用户自己有效。在使用bash命令,只要以该用户身份运行命令行就会读取该文件。

解决方法

将java环境变量配置在~/.bashrc文件中然后 source ~/.bashrc

[hadoop@hadoop102 bin]$ vi ~/.bashrc

添加如下内容

#JAVA_HOME

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

export PATH=$PATH:$JAVA_HOME/bin

重新加载文件

[hadoop@hadoop102 bin]$ source ~/.bashrc

另外两台机器同样在~/.bashrc文件中配置java环境变量

再次执行jpsall脚本查看

[hadoop@hadoop102 bin]$ jpsall

=============== hadoop102 ===============

11364 NameNode

12726 ResourceManager

13110 JobHistoryServer

12840 NodeManager

11471 DataNode

=============== hadoop103 ===============

4386 NodeManager

4019 DataNode

=============== hadoop104 ===============

4147 NodeManager

3576 SecondaryNameNode

3497 DataNode

  • hadoop集群启停脚本

包含hdfs,yarn,historyserver

[hadoop@hadoop102 bin]$ cd ~/bin/

[hadoop@hadoop102 bin]$ vi myhadoop.sh

添加如下内容

#!/bin/bash

if [ $# -lt 1 ]

then

echo "No Args Input..."

exit ;

fi

case $1 in

"start")

echo " =================== 启动 hadoop集群 ==================="

echo " --------------- 启动 hdfs ---------------"

ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"

echo " --------------- 启动 yarn ---------------"

ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"

echo " --------------- 启动 historyserver ---------------"

ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"

;;

"stop")

echo " =================== 关闭 hadoop集群 ==================="

echo " --------------- 关闭 historyserver ---------------"

ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"

echo " --------------- 关闭 yarn ---------------"

ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"

echo " --------------- 关闭 hdfs ---------------"

ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"

;;

*)

echo "Input Args Error..."

;;

esac

保存后退出,然后赋予脚本执行权限

[hadoop@hadoop102 bin]$ chmod +x myhadoop.sh

测试执行

启动集群

[hadoop@hadoop102 bin]$ myhadoop.sh start

停止集群

[hadoop@hadoop102 bin]$ myhadoop.sh stop

  • 集群分发脚本xsync

服务器之间拷贝文件时一般会使用scp或rsync工具手动对待拷贝的文件或文件夹进行分发使用时需要对每台服务器都需要执行一次scp命令,如果服务器数量很多就会很不方便。

编写集群分发脚本xsync可以更方便在各个服务器之间拷贝文件,具体操作如下:

[hadoop@hadoop102 bin]$ cd ~/bin/

[hadoop@hadoop102 bin]$ vim xsync

添加如下内容

#!/bin/bash

#1. 判断参数个数

if [ $# -lt 1 ]

then

echo Not Enough Arguement!

exit;

fi

#2. 遍历集群所有机器

for host in hadoop102 hadoop103 hadoop104

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

保存后退出,然后赋予脚本执行权限

[hadoop@hadoop102 bin]$ chmod +x xsync

测试执行分发/home/hadoop/bin目录

  1. [hadoop@hadoop102 ~]$ xsync /home/hadoop/bin/xsync 
  2. ==================== hadoop102 ====================
  3. sending incremental file list
  4.  
  5. sent 59 bytes  received 12 bytes  47.33 bytes/sec
  6. total size is 624  speedup is 8.79
  7. ==================== hadoop103 ====================
  8. sending incremental file list
  9.  
  10. sent 59 bytes  received 12 bytes  47.33 bytes/sec
  11. total size is 624  speedup is 8.79
  12. ==================== hadoop104 ====================
  13. sending incremental file list
  14.  
  15. sent 59 bytes  received 12 bytes  47.33 bytes/sec
  16. total size is 624  speedup is 8.79
  • 分发/home/atguigu/bin目录(可选)

分发/home/atguigu/bin目录保证自定义脚本在三台机器上都可以使用,但是还需要在hadoop103、hadoop104两台服务器上做ssh免密登录

常见错误及解决方案

防火墙没关闭、或者没有启动YARN

INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:8032

2)主机名称配置错误

3)IP地址配置错误

4)ssh没有配置好

5)root用户和atguigu两个用户启动集群不统一

6)配置文件修改不细心

7)未编译源码

Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

17/05/22 15:38:58 INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:8032

8)不识别主机名称

java.net.UnknownHostException: hadoop102: hadoop102

at java.net.InetAddress.getLocalHost(InetAddress.java:1475)

at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:146)

at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290)

at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287)

at java.security.AccessController.doPrivileged(Native Method)

at javax.security.auth.Subject.doAs(Subject.java:415)

解决办法:

(1)在/etc/hosts文件中添加192.168.1.102 hadoop102

(2)主机名称不要起hadoop hadoop000等特殊名称

9)DataNode和NameNode进程同时只能工作一个

10)执行命令不生效,粘贴word中命令时,遇到-和长–没区分开。导致命令失效

解决办法:尽量不要粘贴word中代码。

11)jps发现进程已经没有,但是重新启动集群,提示进程已经开启。原因是在linux的根目录下/tmp目录中存在启动的进程临时文件,将集群相关进程删除掉,再重新启动集群。

12)jps不生效。

原因:全局变量hadoop java没有生效。解决办法:需要source /etc/profile文件。

13)8088端口连接不上

[atguigu@hadoop102 桌面]$ cat /etc/hosts

注释掉如下代码

#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

#::1 hadoop102

Hadoop详解(02)Hadoop集群运行环境搭建的更多相关文章

  1. 详解Redis Cluster集群

    Redis Cluster是Redis的分布式解决方案,在Redis 3.0版本正式推出的,有效解决了Redis分布式方面的需求.当遇到单机内存.并发.流量等瓶颈时,可以采用Cluster架构达到负载 ...

  2. centos 8 集群Linux环境搭建

    一.集群Linux环境搭建 1. 注意事项 1.1 windows系统确认所有的关于VmWare的服务都已经启动 打开任务管理器->服务,查看五个VM选项是否打开. 1.2 确认好VmWare生 ...

  3. hadoop学习笔记(六):hadoop全分布式集群的环境搭建

    本文原创,如需转载,请注明作者以及原文链接! 一.前期准备: 1.jdk安装        不要用centos7自带的openJDK2.hostname    配置       配置位置:/etc/s ...

  4. Hadoop入门(五) Hadoop2.7.5集群分布式环境搭建

    本文接上文内容继续: server01 192.168.8.118 jdk.www.fengshen157.com/ hadoop NameNode.DFSZKFailoverController(z ...

  5. 【图文详解】Zookeeper集群搭建(CentOs6.3)

    Zookeeper简介: Zookeeper是一个分布式协调服务,就是为用户的分布式应用程序提供协调服务的. A.zookeeper是为别的分布式程序服务的 B.Zookeeper本身就是一个分布式程 ...

  6. Dream------spark--spark集群的环境搭建

    1.下载安装scala http://www.scala-lang.org/download/2.11.6.html   2.解压下载后的文件,配置环境变量:编辑/etc/profile文件,添加如下 ...

  7. 部署k8s集群之环境搭建和etcd单节点安装

    环境搭建以及etcd 单节点安装过程 安装之前的环境搭建 在进行k8s安装之前先把虚拟机准备好,这里准备的是三台虚拟机 主机名 ip地址 角色 master 172.16.163.131 master ...

  8. 性能测试:k8s集群监控环境搭建(kube-prometheus)

    选择kube-prometheus版本 k8s集群版本是1.22.x 5个节点 说明:如果你电脑配置低,也可以1个master节点,2个node节点 3个节点 Kube-Prometheus地址:ht ...

  9. MQ集群测试环境搭建(多节点负载均衡,共享一个kahaDB文件(nas方式))

    1. os ubuntu12.04 基础环境准备 干掉不好用的vim重新装 sudo apt-get remove vim-common sudo apt-get install vim 如果需要使用 ...

  10. 简单说明hadoop集群运行三种模式和配置文件

    Hadoop的运行模式分为3种:本地运行模式,伪分布运行模式,集群运行模式,相应概念如下: 1.独立模式即本地运行模式(standalone或local mode)无需运行任何守护进程(daemon) ...

随机推荐

  1. 研一入坑Go 文件操作

    1 package main 2 3 import ( 4 "fmt" 5 "os" 6 "path" 7 "path/filep ...

  2. 洛谷P6060 [加油武汉]传染病研究

    一道不错的数学题 Solution 看到约数个数就想到枚举约数,但对于每个询问都枚举显然不现实,但是我们可以将大致的方向锁定在这方面,是否可以预处理出一定的东西,然后低复杂度询问呢? 我们想到预处理出 ...

  3. 提高工作效率的神器:基于前端表格实现Chrome Excel扩展插件

    Chrome插件,官方名称extensions(扩展程序):为了方便理解,以下都称为插件. 我们开发的插件需要在浏览器里面运行,打开浏览器,通过右上角的三个点(自定义及控制)-更多工具-拓展程序-打开 ...

  4. 14.-F对象和Q对象

    一.F对象 一个F对象代表数据库中某条记录的字段的信息 作用 通常是对数据库中的字段值在不获取的情况下进行操作 用于属性(字段)之间的比较   语法: from django.db.models im ...

  5. 记录一次sshd服务启动失败

    记录一次sshd服务启动失败 问题描述: 服务器开机之后发现无法通过远程连接服务器终端,但是服务器并未宕机,于是考虑到sshd服务出现异常 解决思路: 查看服务器sshd服务运行情况 [root@ha ...

  6. pod(八):pod的调度——将 Pod 指派给节点

    目录 一.系统环境 二.前言 三.pod的调度 3.1 pod的调度概述 3.2 pod自动调度 3.2.1 创建3个主机端口为80的pod 3.3 使用nodeName 字段指定pod运行在哪个节点 ...

  7. mysql 子查询 联结 组合查询

    子查询 SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id='T ...

  8. select中DISTINCT的应用-过滤表中重复数据

    在表中,一个列可能会包含多个重复值,有时也许希望仅仅列出不同(distinct)的值. DISTINCT 关键词用于返回唯一不同的值. SQL SELECT DISTINCT 语法 SELECT DI ...

  9. Go语言核心36讲44

    今天,我们来讲另一个与I/O操作强相关的代码包bufio.bufio是"buffered I/O"的缩写.顾名思义,这个代码包中的程序实体实现的I/O操作都内置了缓冲区. bufi ...

  10. Pairs of Numbers 辗转相除

    # 42. Pairs of Numbershttps://blog.csdn.net/qq_43521140/article/details/107853492- 出题人:OJ- 标签:[" ...