0%

Hadoop实操概述

  • Hadoop介绍
  • Hadoop部署

  • 大数据基础平台安装实操目标

Hadoop介绍

分布式存储组件:HDFS

  • 分布式存储系统
  • 提供了高可靠性、高扩展性、高吞吐率和高容错率的数据存储服务

资源管理系统:YARN

  • 负责集群资源的统一管理和调度

分布式计算框架:MapReduce

  • 分布式计算框架
  • 具有易于编程、高容错和高扩展等优点

版本技术衍进

HDFS

结构

特点

  • 扩展性:横向无限扩展

  • 高容错性:备份机制

  • 适合PB级以上海量数据的存储

节点

  • Namenode

  • Datanode

基本原理

  • 将文件切分成等大数据块,存储到多台机器上
  • 将数据切分、容错、负载均衡等功能透明化
  • 可将HDFS看成一个容量巨大、具有高容错性的磁盘

YARN

  • Hadoop 2.0新增系统
  • 负责集群的资源管理和调度
  • 使得多种计算框架可以运行在一个集群中

节点

  • Resource Manager

  • Node Manager

MapReduce

两个阶段

  • map

  • reduce

特点

  • 良好扩展性
  • 高容错性
  • 适合PB级以上海量的离线处理

计算流程

Zookeeper

进程:QuorumPeerMain

QJM

进程:JournalNode

汇总

HDFS: Namenode 、Datanode、JournalNode(主从Namenode数据同步)、zkfc(Namenode故障转移)

YARN: Resource Manager、Node Manager

MapReduce: map、reduce

Zookeeper: QuorumPeerMain

Hadoop部署

部署模式

  • 本地模式
  • 伪分布式模式

  • 完全分布式模式

集群部署设置

大数据基础平台安装实操目标

mysql安装使用

1、创建安装用户及目录规划

1
2
3
4
5
6
useradd -d /iddbs iddbs
cat /etc/passwd
cat /etc/group
passwd iddbs
mkdir /dbdata
chown -R iddbs:iddbs /dbdata
目录名称 作用
/iddbs MySQL程序目录
/iddbs/mysql-5.7.36 MySQL执行程序目录
/iddbs/software 常用软件存放目录
/iddbs/scripts 常用脚本存放目录
/dbdata MySQL总数据目录
/dbdata/$port MySQL实例目录
/dbdata/$port/${port}.cfg MySQL实例配置文件
/dbdata/$port/data MySQL实例数据存放目录
/dbdata/$port/binlog MySQL实例Binlog存放目录
/dbdata/$port/logs MySQL error/slow/general存放目录
/dbdata/$port/tmp MySQL实例临时目录
/dbdata/backup MySQL备份目录

2、上传并解压安装包

1
2
3
tar -zxvf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz

mv mysql-5.7.36-linux-glibc2.12-x86_64 /iddbs/mysql-5.7.36

3、准备my.cnf文件

4、初始化

1
/iddbs/mysql-5.7.36/bin/mysqld --defaults-file=/dbdata/3306/3306.cfg --user=iddbs --initialize-insecure

5、启动MySQL服务

1
/iddbs/mysql-5.7.36/bin/mysqld_safe --defaults-file=/dbdata/3306/3306.cfg &

6、登录MySQL数据库

1
/iddbs/mysql-5.7.36/bin/mysql  -uroot -p  -S /dbdata/3306/mysql.sock

7、创建数据库owndb

1
create database owndb;

8、给owndb远程登录权限

1
2
3
grant all privileges on *.* to 'root'@'%' identified by 'N@2510las' with grant option;

flush privileges;

9、给owndb创建用户owndbuser

1
2
3
create user 'owndbuser'@'%' identified by 'Polais6G';

flush privileges;

10、给owndb用户owndbuser授权

1
2
3
grant all on owndb.* to 'owndbuser'@'%';

flush privileges;

大数据基础平面部署准备

IP 主机名 作用
192.168.80.132 e3base01 QuorumPeerMain、Namenode、datanode、zkfc、journalnode、resourcemanager、nodemanager
192.168.80.133 e3base02 QuorumPeerMain、Namenode、datanode、zkfc、journalnode、resourcemanager、nodemanager
192.168.80.134 e3base03 QuorumPeerMain、datanode、journalnode、nodemanager
192.168.80.131 mysql01 mysql

1、找一台主机克隆,克隆后配置好对应环境。

2、配置IP

1
vim /etc/sysconfig/network-scripts/ifcfg-ens33

3、关闭防火墙

1
2
3
systemctl disable firewalld #永久关闭

systemctl stop firewalld #暂时关闭

4、修改主机名

1
hostnamectl set-hostname e3base01

5、配置/etc/hosts

1
2
3
4
5
6
7
vim /etc/hosts

192.168.80.141 e3base01

192.168.80.142 e3base02

192.168.80.143 e3base03

6、创建e3base 用户,并创建对应的用数据目录/chunk1 之后授权给e3base:e3base

1
2
3
4
5
6
7
useradd -d /e3base e3base

mkdir /chunk1

chown -R e3base:e3base /chunk1

passwd e3base

7、修改ulimit 的值

1
ulimit -u 65536 /ulimit -n 1048576 /ulimit -s 262144 /ulimit -c 65536

8、创建/var/run/hadoop-hdfs/ 授权给 e3base:e3base 修改权限为755

ps:只要重启虚拟机,这个路径就会消失,所以每次重新创建

1
2
3
4
5
mkdir /var/run/hadoop-hdfs/

chown -R e3base:e3base /var/run/hadoop-hdfs/

chmod -R 755 /var/run/hadoop-hdfs/

9、安装JDK

10、配置环境变量

1
vim .bash_profile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
export PATH

export IN_HOME=/e3base

export E3_INFO_HOME=/e3base/e3-info


\##jdk

export JAVA_HOME=/e3base/jdk

export PATH=$JAVA_HOME/bin:$PATH


\##zookeeper

export ZOO_HOME=$IN_HOME/zookeeper

export PATH=$ZOO_HOME/bin:$PATH


\#hadoop

export HADOOP_HOME=$IN_HOME/hadoop

export PATH=$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$PATH



\#hive

export HIVE_HOME=$IN_HOME/hive

export PATH=$HIVE_HOME/bin:$PATH
1
source .bash_profile

测试:

1
java -verison

11、克隆主机

12、修改主机的IP

1
vim /etc/sysconfig/network-scripts/ifcfg-ens33

13、修改主机名

1
2
3
hostnamectl set-hostname e3base02

hostnamectl set-hostname e3base03

14、配置ssh免密

root模式下修改:

SELINUX=disable

1
vi /etc/selinux/config

三台主机执行以下命令

1
2
3
ssh-keygen -t rsa	#生成私钥和密钥

ssh-copy-id e3base01 #发放密匙

在e3base01 主机执行

1
2
scp authorized_keys e3base02:/e3base/.ssh/
scp authorized_keys e3base03:/e3base/.ssh/

zookeeper部署

1、安装解压zookeeper-3.4.5-cdh5.14.0-e3base3.0.0.tar.gz到/e3base/cdh5140

2、创建软连接(快捷方式)

1
ln -s /e3base/cdh5140/zookeeper-3.4.5-cdh5.14.0-e3base3.0.0 /e3base/zookeeper

3、添加zookeeper相关的环境变量。

1
vi .bash_profile
1
2
3
4
5
export IN_HOME=/e3base/

export ZOO_HOME=$IN_HOME/zookeeper

export PATH=$ZOO_HOME/bin:$PATH

使其生效:

1
source .bash_profile

4、创建$E3_INFO_HOME/zookeeper/data目录。

1
mkdir -p $E3_INFO_HOME/zookeeper/data

5、修改/e3base/zookeeper/conf/zookeeper-env.sh

1
2
3
export JAVA_HOME=/e3base/jdk

export ZOO_LOG_DIR=/e3base/e3-info/zookeeper/logs

6、修改/e3base/zookeeper/conf/zoo.cfg配置:

1
2
3
4
5
6
7
8
9
10
11
dataDir=/e3base/e3-info/zookeeper/data

clientPort=11001

server.1=e3base01:11002:11003

server.2=e3base02:11002:11003

server.3=e3base03:11002:11003

maxClientCnxns=20500

参数解释:

  • dataDir指定了在第一步中建立的目录,作为zookeeper操作的数据目录。

  • clientPort指定了zookeeper客户端连接的端口。该端口可以进行配置更改。配置为11001。

  • server.id=host:port1:port2(如server.1=e3base04:11002:11003)中server后的数字id表示该主机是第几号服务器;host是这个服务器的 ip 地址或主机名;port1表示zookeeper服务器通信端口;port2表示选举端口。

  • maxClientCnxns 连接zookeeper服务的最大客户端数量,推荐20500。

7、将程序拷贝到其他2台主机:

1
2
3
4
5
scp -r zookeeper-3.4.5-cdh5.14.0-e3base3.0.0 e3base02:/e3base/cdh5140/
scp -r zookeeper-3.4.5-cdh5.14.0-e3base3.0.0 e3base03:/e3base/cdh5140/

# 分别在2台主机上执行创建软连接
ln -s /e3base/cdh5140/zookeeper-3.4.5-cdh5.14.0-e3base3.0.0/ /e3base/zookeeper

8、在zoo.cfg 配置的dataDir目录,部署zookeeper服务的主机目录/e3base/e3-info/zookeeper/data下创建myid文件,文件中写入该主机在zoo.cfg配置信息server.id=host:port1:port2项中对应的数字id。

1
2
3
4
5
在e3base03上执行: echo 1 > $E3_INFO_HOME/zookeeper/data/myid 

在e3base04上执行: echo 2 > $E3_INFO_HOME/zookeeper/data/myid

在e3base05上执行: echo 3 > $E3_INFO_HOME/zookeeper/data/myid

9、zookeeper启动

登陆zookeeper集群中每台主机启动zookeeper,命令:

1
zkServer.sh start

通过jps查看各主机上进程是否均已启动。

主机 进程名
在启动的对应主机上查看 QuorumPeerMain

启动后可以使用查看zookeeper进程状态,命令:

1
zkServer.sh status

正常的集群状态有两种mode:leader、follower

可使用客户端命令进行测试,是否zookeeper启动正常,命令:

1
zkCli.sh -server e3base01:11001,e3base02:11001,e3base03:11001(-server后加参数为zookeeper集群服务的地址和端口)

10、zookeep停止

1
zkServer.sh stop

HDFS部署

1、将安装程序hadoop-2.6.0-cdh5.14.0-e3base3.0.0.tar.gz在/e3base/cdh5140目录下解压

2、设置软连接

1
ln -s /e3base/cdh5140/hadoop-2.6.0-cdh5.14.0-e3base3.0.0 /e3base/hadoop

3、配置环境变量

1
2
3
4
5
export IN_HOME=/e3base/
export HADOOP_HOME=$IN_HOME/hadoop
export PATH=$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$PATH
使其生效:
source .bash_profile

4、hadoop-env.sh文件配置

特别注意配置文件中的以下参数需要根据实际情况进行修改:

1
2
3
4
5
export JAVA_HOME=/usr/java/jdk1.8
export HADOOP_HOME=/e3base/hadoop
export E3_INFO_HOME=/e3base/e3-info
export HADOOP_LOG_DIR=$E3_INFO_HOME/hadoop/logs
export HADOOP_PID_DIR=$E3_INFO_HOME/hadoop/pids

参数解释:

  • JAVA_HOME配置上安装jdk的目录。
  • HADOOP_HOME 配置hadoop应用目录。
  • HADOOP_LOG_DIR指定的是Hadoop的日志路径,默认的设置是$HADOOP_HOME/logs,一般需要将其配置到一个磁盘空间比较大的目录下,设置成$E3_INFO_HOME/hadoop/logs。
  • HADOOP_PID_DIR指定的是hadoop进程id的存放路径,默认在/tmp下,不修改可能导致无法正常启停,设置成$E3_INFO_HOME/hadoop/pids。

注:配置文件中HADOOP_HEAPSIZE、HADOOP_NAMENODE_OPTS、HADOOP_DATANODE_OPTS参数中的JVM堆内存大小,如在测试环境,请注意修改这些参数中的-Xms -Xms -Xmn值符合当前主机环境,如堆内存值配置过大超过系统可用内存,会导致服务启动失败。

5、core-site.xml文件配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<configuration>

<property>

<name>fs.defaultFS</name>

<value>hdfs://drmcluster</value>

</property>

<property>

<name>ha.zookeeper.quorum</name>

<value>e3base01:11001,e3base02:11001,e3base03:11001</value>

</property>

<property>

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

<value>/e3base/e3-info/hadoop/tmp/hadoop-${user.name}</value>

</property>

</configuration>

参数解释:

  • fs.default.name指定了HDFS的文件系统名称,value格式hdfs://xxxxxx/ 。

  • ha.zookeeper.quorum指定了用于hadoop namenode失效切换的zookeeper集群信息,填写格式ip:port,多个主机之间以逗号分隔。配置值与zookeeper安装部署保持一致。

  • hadoop.tmp.dir指定了hadoop临时文件存放目录,配置为/e3base/e3-info/hadoop/tmp/hadoop-${user.name}。

6、hdfs-site.xml文件配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<configuration> 

<property>

<name>dfs.nameservices</name>

<value>drmcluster</value>

</property>

<property>

<name>dfs.namenode.nn1.hostname</name>

<value>e3base01</value>

</property>

<property>

<name>dfs.namenode.nn2.hostname</name>

<value>e3base02</value>

</property>

<property>

<name>dfs.namenode.shared.edits.dir</name> <value>qjournal://e3base01:12007;e3base02:12007;e3base03:12007/drmcluster</value>

</property>

<property>

<name>dfs.journalnode.edits.dir</name>

<value>/e3base/e3-info/hadoop/jn</value>

</property>

<property>

<name>dfs.namenode.name.dir</name>

<value>file:///e3base/e3-info/hadoop/nn</value>

</property>

<property>

<name>dfs.datanode.data.dir</name>

<value>/chunk1/hdfs</value>

</property>

</configuration>
  • dfs.nameservices指定了集群服务名称,配置为drmcluster。

  • dfs.namenode.nn1.hostname,dfs.namenode.nn2.hostname分别指定配置namenode服务的主机名,根据实际情况修改。

  • dfs.ha.namenodes.drmcluster指定了第一个配置项drmcluster集群服务中用于namenode HA的节点名称,配置为nn1、nn2。

  • dfs.journalnode.edits.dir指定了journal node集群中各主机存储数据的本地磁盘路径,配置成/e3base/e3-info/hadoop/jn。

  • dfs.namenode.name.dir 配置成file:///e3base/e3-info/hadoop/nn

  • dfs.namenode.shared.edits.dir和dfs.namenode.name.dir指定了namenode元数据的存储目录,dfs.namenode.shared.edits.dir目录指定了QJM方式实现的元数据存储的路径(qjournal://e3base03:12007;e3base04:12007;e3base05:12007/drmcluster,e3base0*指定了journalnode集群,12007 JournalNode服务通信端口,drmcluster是dfs.nameservices指定了集群服务名称)。

  • dfs.datanode.data.dir指定了数据节点存放数据的目录,不做raid。(一般设置为挂载多块硬盘的路径),若值设置为/data1/hdfs,/data2/hdfs,/data3/hdfs,则需要在根目录下创建对应的目录,每个/data*目录需挂载到一块数据盘上。

7、slaves文件配置

1
2
3
4
5
6
7
8
9
/***********************slaves文件内容***********************/

e3base03

e3base04

e3base05

/************************************************************/

slaves文件中配置了hadoop集群所包含的所有datanode节点,每行对应一个主机名。HDFS和YARN公用。

8、机架感知配置

在/e3base/cdh5140/hadoop/etc/hadoop目录下,修改topology.data文件。根据datanode节点修改相应的IP和主机名,以及机架名(rack)。如果datanode都在同一机架,机架名可相同。

1
2
3
4
5
192.168.248.133 e3base01 /rack1

192.168.248.134 e3base02 /rack2

192.168.248.133 e3base03 /rack3

9、将程序拷贝到其他2台主机:

1
2
3
4
5
scp -r hadoop-2.6.0-cdh5.14.0-e3base3.0.0 e3base02:/e3base/cdh5140
scp -r hadoop-2.6.0-cdh5.14.0-e3base3.0.0 e3base03:/e3base/cdh5140

# 分别在2台主机上执行创建软连接
ln -s /e3base/cdh5140/hadoop-2.6.0-cdh5.14.0-e3base3.0.0/ /e3base/hadoop

10、创建对应的路径(只要重启虚拟机,这个路径就会消失,所以每次重新创建)(root下)!!!

1
2
3
4
5
mkdir -p /var/run/hadoop-hdfs/ 

chown -R e3base:e3base /var/run/hadoop-hdfs/

chmod -R 755 /var/run/hadoop-hdfs/

11、初始化HDFS

(1)初始化zkfc

在ZK中创建znode来存储automatic Failover的数据,任选一个NN执行完成即可。在一个namenode上进入$HADOOP_HOME/bin执行:

1
/e3base/hadoop/bin/hdfs zkfc -formatZK

(2)先启动journal node进程。

在每一个journalnode上进入$HADOOP_HOME执行:

1
/e3base/hadoop/sbin/hadoop-daemon.sh start journalnode

执行完成后,通过jps查看JournalNode进程是否启动正常。

(3)初始化主namenode节点

在需要做主namenode节点主机上进入$HADOOP_HOME/bin执行如下命令实现初始化HDFS目录、文件:

1
/e3base/hadoop/bin/hdfs namenode -format

(4)初始化备namenode节点

启动主namenode节点:

1
/e3base/hadoop/sbin/hadoop-daemon.sh start namenode

在另外备namenode节点拷贝主namenode节点的元数据,保证两个节点数据一致:

1
/e3base/hadoop/bin/hdfs namenode -bootstrapStandby

12、启动HDFS

(1)启动hdfs

1
/e3base/hadoop/sbin/start-dfs.sh

(2)单节点启动namenode进程

1
/e3base/hadoop/sbin/hadoop-daemon.sh start namenode

(3)单节点启动zkfc进程

1
/e3base/hadoop/sbin/hadoop-daemon.sh start zkfc

(4)单节点启动datanode进程

1
/e3base/hadoop/sbin/hadoop-daemon.sh start datanode

(5)单节点启动journalnode进程

1
/e3base/hadoop/sbin/hadoop-daemon.sh start journalnode

(6)启动所有datanode进程

1
/e3base/hadoop/sbin/hadoop-daemons.sh start datanode

ps:如配置了hadoop环境变量,无需进入/e3base/hadoop/sbin/执行

13、HDFS停止

(1)停止hdfs

1
/e3base/hadoop/sbin/stop-dfs.sh

(2)单节点停止namenode进程

1
/e3base/hadoop/sbin/hadoop-daemon.sh stop namenode

(3)单节点停止zkfc进程(两个namenode单独停止)

1
/e3base/hadoop/sbin/hadoop-daemon.sh stop zkfc

(4)单节点停止datanode进程

1
/e3base/hadoop/sbin/hadoop-daemon.sh stop datanode

(5)单节点启动journalnode进程

1
/e3base/hadoop/sbin/hadoop-daemon.sh stop journalnode

(6)停止所有datanode进程

1
/e3base/cdh5140/hadoop/sbin/hadoop-daemons.sh stop datanode

ps:如配置了hadoop环境变量,无需进入/e3base/hadoop/sbin/执行

13、HDFS进程查看

jps

主机 进程名
$HADOOP_HOME /etc/hadoop下hdfs.xml文件中dfs.namenode.rpc-address.mycluster..*对应的主机 NameNode
$HADOOP_HOME /etc/hadoop下hdfs.xml文件中dfs.namenode.rpc-address.mycluster..*对应的主机(同NN) DFSZKFailoverController(zkfc)
$HADOOP_HOME /etc/hadoop下hdfs.xml文件中dfs.namenode.shared.edits.dir配置项包含的主机 JournalNode
$HADOOP_HOME /etc/hadoop下slaves文件中包含的主机 DataNode

13、HDFS状态查看

(1) namenode状态查看

执行:

1
hdfs haadmin -getServiceState serviceid

1
2
3
hdfs haadmin -getServiceState nn1

hdfs haadmin -getServiceState nn2

注:

两种状态:active、standby。serviceid为该主机在$HADOOP_HOME /etc/hadoop下hdfs.xml文件中dfs.namenode.rpc-address.mycluster.*对应的值。

(2) namenode状态手动切换

nn1为active,手动切换成nn2为active,执行:

1
hadoop/bin/hdfs haadmin -DFSHAadmin -failover nn1 nn2

(3) namenode离开安全模式

hdfs 是否进入安全模式检查:

1
hdfs dfsadmin -safemode get

离开安全模式,执行:

1
hadoop/bin/hdfs dfsadmin -safemode leave

(4) HDFS 健康状态检查

1
hdfs dfsadmin -report

(5) HDFS数据块完整性检查

1
hdfs fsck / 

14、HDFS命令使用

(1)文件列表的命令为:

1
2
3
hdfs dfs -ls

hdfs dfs -ls路径

不指名路径,默认用户工作目录,为hdfs下的/user/$USER目录($USER为当前用户)

(2)增加文件目录:

1
hdfs dfs -mkdir文件目录路径

(3)用put将文件从本地文件复制到HDFS中去:

1
hdfs dfs -put <localsrc> ... <dst>

(4)从HDFS中取回文件:

1
hdfs dfs -get <localsrc> ... <dst>

(5)删除文件:

1
hdfs dfs -rm example.txt

15、HDFS监控页面使用

查看namenode:

1
2
3
4
http://namenodeIP or hostname:port]
(http://masterIP or hostname:port/master-status)

http://192.168.229.132:12003/
  • namenodeIP or hostname为状态为active的namenode对应IP或hostname

  • port为dfs.namenode.http-address.drmcluster.nn1 或 dfs.namenode.http-address.drmcluster.nn2 对应的端口,目前为(12003)

查看 datanode:

1
2
3
4
http://datanodeIP or hostname:port]
(http://regionserverIP or hostname:port /rs-status)

http://192.168.229.132:12004/
  • datanodeIP or hostname为datanode对应IP或hostname

  • port为dfs.datanode.http.address 对应的端口,目前为(12004)。

效果如图:

yarn部署

1、环境变量配置

1
2
3
4
5
export IN_HOME=/e3base/cdh5140
export HADOOP_HOME=$IN_HOME/hadoop
export PATH=$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$PATH

source .bash_profile

2、yarn-env.sh文件配置

1
2
3
4
5
6
export JAVA_HOME=/e3base/jdk
export HADOOP_HOME=/e3base/cdh5140/hadoop
export E3_INFO_HOME=/e3base/e3-info
export YARN_PID_DIR=$E3_INFO_HOME/hadoop/pids
export YARN_LOG_DIR=$E3_INFO_HOME/hadoop/logs
128m 128m
  • JAVA_HOME配置上安装jdk的目录,JDK安装路径,默认情况下执行读取linux环境变量${JAVA_HOME}。。

  • YARN_LOG_DIR指定的是yarn的日志路径。

  • YARN_PID_DIR 指定的是YARN的进程的pid存放路径。

ps:配置文件中YARN_RESOURCEMANAGER_OPTS、YARN_NODEMANAGER_OPTS参数中的JVM堆内存大小,如在测试环境,请注意修改这些参数中的-Xms -Xms -Xmn值符合当前主机环境,如堆内存值配置过大超过系统可用内存,会导致服务启动失败

3、yarn-site.xml文件配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<configuration>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>e3base01:11001,e3base02:11001,e3base03:11001</value>
</property>
<property>
<name>yarn.resourcemanager.rm1</name>
<value>e3base01</value>
</property>
<property>
<name>yarn.resourcemanager.rm2</name>
<value>e3base02</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/chunk1/yarn/local</value>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/chunk1/yarn/logs</value>
</property>
<property>
<name>yarn.admin.acl</name>
<value>e3base</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/hadoop-yarn/aggrelogs</value>
</property>
</configuration>

4、fair-scheduler.xml文件配置

集群总容量/内核数量

1
2
3
4
5
6
<queue name="root">
<minResources>1024 mb, 1 vcores</minResources>
<maxResources>40960 mb, 40 vcores</maxResources>
<queue name="default">
<minResources>1024 mb, 1 vcores</minResources>
<maxResources>40960 mb, 40 vcores</maxResources>

5、主机间同步

1
2
scp yarn-env.sh yarn-site.xml fair-scheduler.xmle3base02:/e3base/hadoop/etc/hadoop/
scp yarn-env.sh yarn-site.xml fair-scheduler.xmle3base03:/e3base/hadoop/etc/hadoop/

6、在mapred-env.sh中增加配置:

1
2
3
export HADOOP_HOME=/e3base/hadoop
export E3_INFO_HOME=/e3base/e3-info
export HADOOP_MAPRED_LOG_DIR=$E3_INFO_HOME/hadoop/logs

7、mapred-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<configuration>
<property>
<name>mapreduce.jobhistory.hostname</name>
<value>e3base02</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>${mapreduce.jobhistory.hostname}:13021</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>${mapreduce.jobhistory.hostname}:13022</value>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/mr-history/idone</value>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/mr-history/done</value>
</property>
</configuration>
  • Mapreduce.jobhistory.hostname 填写jobhistory服务主机名

  • mapreduce.jobhistory.address:MapReduce JobHistory Server地址,地址形式为 主机地址:端口。(注:如部署Jobhistory服务主机处于内外网环境,需配置主机地址为0.0.0.0)在YARN中执行MR代码时,作业向该服务汇报作业的执行历史,从而记录作业的执行信息,供查询用。

  • mapreduce.jobhistory.webapp.address:MapReduce JobHistory Server Web UI地址。通过web页面查看MR执行状态的地址。配置方式同上。

  • mapreduce.jobhistory.intermediate-done-dir:MapReduce作业产生的日志存放位置

  • mapreduce.jobhistory.done-dir:MR JobHistory Server管理的日志的存放位置

8、yarn启动

(1) 与hdfs同时启动集群

在hadoop active namenode主机上执行如下命令:

1
start-all.sh  

启动hdfs和yarn,若配置了zookeeper,同时启动zkfc

(2)在主管理节点上运行下面指令,仅启动YARN

1
start-yarn.sh

(3)在resourcemanager节点启动jobhistoryserver进程

1
mr-jobhistory-daemon.sh start historyserver 

(4) 在YARN中的两个管理节点分别启动resourcemanager进程

1
yarn-daemon.sh start resourcemanager

(5) 在YARN集群中的每个计算节点启动nodemanager进程

1
yarn-daemon.sh start nodemanager

(6) 启动YARN所有nodemanager节点

1
yarn-daemons.sh start nodemanager

注:YARN的HA启动在主resourcemanager节点执行start-yarn.sh后,在备节点执行yarn-daemon.sh start resourcemanager

9、yarn停止

(1) 与hdfs同时停止hdfs集群

在hadoop active namenode主机e3base01上执行如下命令:

1
stop-all.sh  

(2) 在主管理节点上运行下面指令,仅停止YARN

1
stop-yarn.sh

(3) 在namenode的备节点停止jobhistoryserver进程

1
mr-jobhistory-daemon.sh stop historyserver 

(4) 在YARN中的两个管理节点分别停止resourcemanager进程

1
yarn-daemon.sh stop resourcemanager

(5) 在YARN集群中的每个计算节点停止nodemanager进程

1
yarn-daemon.sh stop nodemanager

(6) 停止YARN所有nodemanager节点

1
yarn-daemons.sh stop nodemanager

10、yarn进程查看

主机 进程名
在$HADOOP_HOME/etc/hadoop/slaver中对应主机上查看 NodeManager
在主管理节点 ResourceManager

11、yarn指令执行

在YARN集群中的任意一个节点中执行下列指令:

1
2
3
yarn rmadmin -getServiceState rm1

yarn rmadmin -getServiceState rm2

返回的结果是active或者stanby。只有且必须是两种状态之一,否则YARN工作不正常。

查看YARN集群的节点状态。执行下列指令

1
yarn node -list -all

若返回的节点数量和集群中的$HADOOP_HOME/etc/hadoop/slave的主机一样且显示RUNNING状态,则YARN的计算节点工作正常

查看所有任务

1
yarn application -list

12、监控页面http://${yarn.resourcemanager.rm1}: 13006

13、运行wordcount示例:

(1)创建几个HDFS目录

1
2
3
hadoop fs -mkdir -p /zwl/wordcount (输入数据源目录)

hadoop fs -mkdir -p /output/ (输出结果目录)

2.创建源数据文件 vi inputword

1
2
3
4
5
6
7
8
9
hello abountyun

hello master

hello slave

hello slave

abountyun first

3.将本地文件上传到HDFS

1
hdfs dfs -put inputword /zwl/wordcount

查看文件内容

1
hdfs dfs -text /zwl/wordcount/inputword

(4) 执行mapreduce程序

1
2
3
cd /e3base/hadoop/share/hadoop/mapreduce

hadoop jar ./hadoop-mapreduce-examples-2.6.0-cdh5.14.0.jar wordcount /zwl/wordcount /output/wordcount

等待执行完毕

(5)查看输出结果

1
hdfs dfs -text /output/wordcout/part-r-00000

运行过程如下:

输出内容如下:

访问http://ResourceManager主机ip:13006/ 可查看任务执行情况