分布式模型,是真正集群模型,由多台机器组成真实集群,各节点分工明确。
这里测试安装使用Hadoop3.2.4版本。下载hadoop-3.2.4.tar.gz
1、JAVA安装部署:查询网上资料,在Hadoop生产环境中,强烈推荐使用 RedHat OpenJDK。
OpenJDK默认是安装于/usr/lib/jvm/目录下,推荐JAVA_HOME直接指向这个目录中安装的JAVA目录。修改/etc/profile.d/java.sh:
source /etc/profile.d/java.sh
此时的JAVA已经切换为OpenJDK了。
2、分布式模型的架构图及测试环境资源:
一般在生产环境中,HDFS层的NN节点单独部署于一台机器,SNN单独部署于一台机器,然后是DN节点;YARN层,RM单独部署于一台机器,NM则部署于各DN节点,这是因为RM、NN、SNN在实际生产中负载很重。
在实验测试环境中,将RM、NN、SNN集中于一台机器,只需四台机器。
确保JAVA环境在每个节点都已经部署。
3、环境准备:
域名解析:配置一个有一个主节点和三个从节点的 Hadoop-YARN 集群。集群中所用的各节点必须有一个惟一的主机名和 IP 地址,并能够基于主机互相通信。通过/etc/hosts 文件进行主机解析,其中 node0 为主节点,其有一个别名为 master,node1、node2 和 node3为从节点。
配置hosts文件,确保域名解析,四个节点相同
用户和组:HDFS和YARN统一使用hadoop用户和hadoop组
创建用户组,并指定其组id:groupadd -g 1017 hadoop
创建用户,并指定用户组:useradd -u 1020 -g hadoop hadoop
为用户设置密码:echo 123456 | passwd --stdin hadoop
各节点创建的用户组和用户的id最好是一致。
配置秘钥认证方式登录:集群模型下,数据节点数量众多,一般是需要通过 master 节点启动或停止整个集群,这就需要在master节点上配置用于运行服务的用户(这里就是上一步创建的hadoop用户)能以密钥认证(passwordless)的方式通过ssh远程连接至各从节点。
切换至hadoop用户,生成密钥对:ssh-keygen -t rsa -P ‘’
拷贝公钥到其他节点,如到node1节点:
ssh-copy-id -i .ssh/id_rsa.pub hadoop@node1
此时,从master节点以hadoop用户访问其他节点时,就不需要密码了。
所需目录:hadoop安装目录及各数据保存目录
安装目录依然为/bdapps
数据目录:/hddata/hadoop/hdfs/{nn,snn,dn}
安装hadoop3.2.4:tar xvf hadoop-3.2.4.tar.gz -C /bdapps/
创建符号链接:ln -sv hadoop-3.2.4/ hadoop
在hadoop目录下创建logs目录,并增加组写权限:
cd hadoop
mkdir logs
chmod g+w logs
修改属主属组:chown -R hadoop:hadoop ./*
4、配置hadoop各配置文件:
core-site.xml:Hadoop核心的配置文件。将hdfs的地址由localhost改为master,用ip也可以,即192.168.147.137,即配置NameNode的地址。
yarn-site.xml:YARN的配置文件,将localhost改为master,因为测试环境将NN,SNN,RM放在同一台主机,实际生产环境,可能是分开的,此时要按照实际情况设置。
hdfs-site.xml:对HDFS的配置,如保存副本的数量,各节点的数据目录。默认副本数一般是3,测试环境只有三个DN节点,设置成2:
mapred-site.xml:配置MapReduce使用的资源管理器,这里使用的是yarn
workers文件(slaves文件):给出从节点列表,也就是DataNode节点信息。对于3版本,使用的是workers配置文件,而版本2中使用的是slaves文件。
/etc/profile.d/hadoop.sh:Hadoop的环境变量配置文件,因为其安装路径被连接到hadoop,与前面的伪分布式模型相同:
将上述配置文件拷贝到其他节点,各节点的配置文件相同,因为要保持属主属组等属性,切换至hadoop用户拷贝
su - hadoop
cd /bdapps/hadoop/etc/hadoop
scp ./* node1:/bdapps/hadoop/etc/hadoop/
/etc/profile.d/hadoop.sh则使用root用户拷贝:
scp /etc/profile.d/hadoop.sh node1:/etc/profile.d/
5、格式化HDFS:
在HDFS集群的NN启动之前需要先初始化其用于存储数据的目录。如果hdfs-site.xml中 dfs.namenode.name.dir 属性指定的目录不存在,格式化命令会自动创建之;如果事先存在,要确保其权限设置正确,此时格式操作会清除其内部的所有数据并重新 建立一个新的文件系统。需要以 hdfs 用户的身份在 master 节点执行格式化命令,测试中统一使用了hadoop用户,则以hadoop用户格式化:
hdfs namenode -format
格式化时提示了警告信息:
WARNING: HADOOP_PREFIX has been replaced by HADOOP_HOME. Using value of HADOOP_PREFIX.
在Hadoop3版本中,正式用HADOOP_HOME替代旧的HADOOP_PREFIX变量,需要在/etc/profile.d/hadoop.sh设置文件中修改一下,但不影响使用。
5、启动Hadoop进程:
启动Hadoop-YARN集群的方法有两种:一是在各节点分别启动需要启动的服务,二是在 master 节点启动整个集群。
第一种就是前面的单进程精确控制启动
第二种是分模块启动,测试使用这一种
启动前,使用jps查看各节点的进程,发现都是只有一个jps
start-dfs.sh
可以看到,NN和SNN在主节点启动了,DN在三个从节点启动了。
停止hdfs:
stop-dfs.sh
6、测试HDFS:
hdfs dfs -mkdir /test
hdfs dfs -put /etc/fstab /test/fstab
hdfs dfs -ls /test
在各DN节点查看到底存在哪些节点上,因为设置了副本为2份,所以应该在两个DN上有数据:
fstab数据保存在node1和node2上。
7、启动YARN:
start-yarn.sh
主节点上启动了ResourceManager,各从节点启动了NodeManager。
至此,Hadoop系统启动完毕。
查看监听的端口:
可以直接用浏览器查看:http://192.168.147.137:9870
这个是9870是在Hadoop3版中,NameNode的Web UI监听端口,在2版本中,此端口为50070
可以看到,活动节点是3个
从上图可以看出,在node1和node2上各有一个块,这正是上传的fstab文件,保存在node1和node2上。
yarn的Web UI监听端口还是8088:http://192.168.147.137:8088
8、运行作业测试:
yarn jar /bdapps/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.4.jar wordcount /test/fstab /test/functions /test/out
作业一直没有执行完毕,在主节点使用yarn node -list,居然没有发现从节点,原因应该是从节点在主节点的注册没有成功,修改yarn-site.xml文件,增加
此时重新启动,从节点注册成功,在主节点使用yarn node -list能够发现从节点:
再次运行,还是出现错误
yarn-site.xml中有错误的配置,改成如下
此时,再次重启hadoop,执行测试作业成功:
从Web UI中查看:
YARN 集群管理命令:
yarn 命令有许多子命令,大体可分为用户命令和管理命令两类。
用户命令:
为 Hadoop-YARN 客户端命令。这些客户端根据 yarn-site.xml 中配置的参数连接至 YARN 服务,并按需运行指定的命令。
jar: 命令通过 YARN 代码运行 jar 文件,即向 RM 提交 YARN 应用程序。运行时,其会启动 RunJar 类的主方法,检查参数列表并校验 jar 文件,而后展开 jar 文件并运行之。
application: 管理 yarn 中的各 application。
yarn application <options>常用选项有:
-status ApplicationID:获取指定 appliction 的状态信息,输出格式为 application report 格 式。
-list [-appTypes=] [-appStates=]:列出 YARN 上的应用程序列表,有两个可选的子选项 -appTypes 和 -appStates。appTypes:MAPREDUCE、YARN;appStates:ALL、NEW、NEW_SAVING、SUBMITTED、ACCEPTED、RUNNING、FINISHED、FAILED、KILLED。
-kill ApplicationID:终止正在运行或已提交的应用程序。如果指定的应用程序已经完成,其状态为 FINISHED、KILLED 或 FAILED,则直接输出相应信息;否则,将向 ResourceManager 发送终止该应用程序的请求。
node: YARN 集群由运行 NodeManager 进程的 slave 节点及运行 ResourceManager 的 master 组成。ResourceManager会记录各节点的相关信息 。
yarn node <options>常用选项有:
-list:yarn 集群内的node列表,可结合-states子选项过滤节点,而-all 子选项用于控制显示所有节点。常用的状态有 NEW, RUNNING, UNHEALTHY, DECOMMISSIONED, LOST 和 REBOOTED。
-status NodeId:以节点报告格式打印指定节点的信息。其中,NodeId 参数是一个字 符串,是 org.apache.hadoop.yarn.api.records.NodeId 类的一个对象,通常由节点的主机名和端 口号组成。
logs: 用于从已经完成的 YARN 应用程序(即状态为 FAILED、KILLED 或 FINISHED)上获取日 志信息。不过,如果需要通过命令行查看日志,需要为 YARN 集群启用 log-aggregation 属性, 在 yarn-site.xml 配置文件中定义 yarn.log-aggregation-enable 属性的值为 true 即可。
yarn logs -applicationId <application ID> <options>常用选项:
-applicationId applicationID:必备选项,用于从 ResourceManager 获取其详细信息;
-aapOwner AppOwner:可选选项,默认为当前用户;
-nodeAddress NodeAddress -containerId containerID:用于获取指定节点上指定容器的相关信息;其中 NodeAddress 的格式同 NodeId。
classpath: 命令用于显示 YARN 集群 CLASSPATH 的值。
yarn classpath
version: 用于显示当前YARN集群中yarn程序的版本号。
yarn version
管理命令 :
resourcemanager/nodemanager/timelineserver 这几个管理理命令主要用于在节点上启动相应的服务。
resourcemanager:用于启动节点上的 ResourceManager 服务;
nodemanager:用于启动节点上的 NodeManager 服务;
timelineserver:用于启动节点上的 timeline 服务器;
rmadmin: 是 ResourceManager 的客户端程序,可用于刷新访问控制策略、调度器队列及注册到 RM 上的节点等。刷新之后结果无需重启集群服务即可生效。
yarn rmadmin <options>常用选项:
-refreshQueues:重载队列的 acl、状态及调用器队列;它会根据配置文件中的配置信息重新初始化调用器;
-refreshNodes:为RM刷新主机信息,它通过读取RM节点的include和exclude文件来更新集群需要包含或排除的节点列表;
-refreshUserToGroupsMappings:根据配置的Hadoop安全组映射,通过刷新组缓存中的信息来更新用户和组之间的映射关系;
-refreshSuperUserGroupsConfiguration:刷新超级用户代理组映射,以及更新代理主机和 core-site.xml 配置文件中 hadoop.proxyuser 属性定义的代理组;
-refreshAdminAcls:根据 yarn 站点配置文件或默认配置文件中的 yarn.admin.acl 属性刷 新 RM 的管理 ACL;
-refreshServiceAcl:重新加载服务级别的授权策略文件,随后 RM 将重新加载该授权策略文件;它会检查 Hadoop 安全授权是否已启用,并为 IPC Server、ApplicationMaster、Client 和 Resource tracker 刷新 ACL。
DaemonLog:用于查看或更新 RM 及 NM 守护进程的日志级别,它会在检验管理权限通过后在内部直接连接至“http://host:port/logLevel?log=name service”。
yarn daemonlog <options> args常用选项:
-getLevel host:port name:显示指定守护进程的日志级别;
-setLevel host:port name level:设置守护进程的日志级别;
运行 YARN Application
YARN Application(应用程序)可以是一个简单的 shell 脚本、MapReduce 作业或其它任意类型的作业。需要运行 Application 时,客户端需要事先生成一个 ApplicationMaster,而后客户端把 application context 提交给 ResourceManager,随后 RM 向 AM 分配内存及运行 application 的容器。大体来说,此过程可以分成六个阶段。
- Application 初始化及提交;
- 分配内存并启动 AM;
- AM 注册及资源分配;
- 启动并监控容器;
- Application 进度报告;
- Application 运行完成;