Exp2.Hadoop集群安装与yarn管理

1.程序运行及截图
注:单机和伪分布式均在docker下的ubuntu:16.04容器环境下完成
1.1单机Hadoop系统安装和运行
运行grep程序
在这里插入图片描述
在这里插入图片描述
可以正确输出dfs开头的单词,hadoop单机系统搭建成功。
1.2单机伪分布式Hadoop系统安装和运行
(1).免密码SSH访问配置成功,ssh localhost成功
在这里插入图片描述
(2).配置core-site.xml和hdfs-site.xml同时也要配置 hadoop-env.sh 文件(之前添加java路径信息的文件),在文件末尾添加一下信息:
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
在这里插入图片描述
(3).启动NameNode daemon和DataNode daemon

在这里插入图片描述
jps查看到集群状态正常
浏览NameNode的Web接口:
由于是在docker下的容器中,所以只能在主机中访问,用ip代替localhost,访问:http://172.17.0.2:9870/

在这里插入图片描述
在这里插入图片描述
(4)创建执行MapReduce作业的HDFS目录
在这里插入图片描述
这里的username是root,不能随便创建。

运行grep程序:
在这里插入图片描述
在这里插入图片描述
grep程序运行正常,正确输出dfs开头的单词
伪分布式系统搭建完成。
停止deamon
在这里插入图片描述
基于yarn的单机伪分布式
(1).启动ResourceManage daemon和NodeManage daemon
注意Yarn是在dfs下运行的,所以此时也要start-dfs.sh
在这里插入图片描述
jps查看进程正常
(2)浏览ResourceManager的Web接口
同样在主机中访问,用ip代替localhost,访问:http://172.17.0.2:8088/
在这里插入图片描述
Web端口正常
(3).运行程序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Grep程序正确运行,yarn可在伪分布式环境下正确运行
1.3集群Hadoop系统安装和运行(基于 Docker )
(1).Hadoop安装主要为集群做准备,故修改hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml和workers文件
我拉取镜像之后创建了五个容器
在这里插入图片描述
但是五个容器运行有些卡顿,后修改为三个
启动h01’作为master节点,故暴露端口号以供访问web页面

(2)启动集群
第一次启动要进行格式化,后续不必
在这里插入图片描述
此时访问本机的 8088 与 9870 端口就可以看到监控信息(截图不展示了,后续运行程序会展示节点信息)
使用命令 ./hadoop dfsadmin -report 可查看分布式文件系统的状态
在这里插入图片描述
五个主机作为datanode均正常运行(只展示一个节点的状态信息)

(3)运行grep程序,直接卡死
运行worldcount程序正常证明hadoop集群安装正常,但是yarn的资源调度参数需要调整
在这里插入图片描述
在这里插入图片描述
(4)调整yarn 关于资源参数
主要是配置如下三个方面:每个Map和Reduce可用物理内存限制;对于每个任务的JVM对大小的限制;虚拟内存的限制;单个容器可申请的最小与最大内存是最关键,其过大是直接导致虚拟机卡死的重要因素。(后面会详细介绍)
在这里插入图片描述
调整参数后运行grep程序,运行成功
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
访问本机的 8088 与 9870 端口就可以看到监控信息
在这里插入图片描述
在这里插入图片描述
2.问题及解决方案总结
关于主机名host的问题,主要为java.net.UnknowHostExcertion:的问题
在这里插入图片描述
解决方法:
可能是因为/hosts文件的错误,缺少ip 和主机名的映射,添加[127.0.0.1 主机名]的映射
也可能是由于etc/sysconfig/network文件错误,确认HOSTNAME=localhost.localdomain 是否正确(为localhost或者自己的主机名),同时也要保证localhost在/etc/hosts文件中映射为正确的IP地址,然后重新启动网络服务。
java.net.ConnectionException:Connection refused相关的问题
在这里插入图片描述
这个问题可能是由很多配置或者启动问题导致的,要详细阅读后续提示,具体是哪个端口连接不上。
截图中是一个常见的配置错误的问题。
首先解释一下文件core-site.xml中参数配置的具体含义,



fs.defaultFS
hdfs://h01:9000

hadoop.tmp.dir file:/data/hadoop/hadoop-2.6.0/tmp fs.checkpoint.period 3600 所以要保证在不同阶段(单机、伪分布、集群)时候,NameNode的地址是要正确的。

也有可能是防火墙的问题
我在集群中配置的端口是9000,防火墙是iptables,开放该端口:iptables -A INPUT -p tcp NEW --dport 9000 -j ACCEPT
esrvice iptables save 将操作保存到/etc/sysconfig/iptables ,若提示命令不存在,则先安装 yum install iptables-services

没有初始化或者初始化错误也会出现这个问题,重新初始化即可

Root相关的问题
在这里插入图片描述
课件上遗漏对hadoop-env.sh 文件的相关配置修改
加入以下配置:
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

Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster
Java类配置遗漏的问题
找到 H A D O O P H O M E / e t c / m a p r e d − s i t e . x m l , 增 加 以 下 配 置 < p r o p e r t y > < n a m e > y a r n . a p p . m a p r e d u c e . a m . e n v < / n a m e > < v a l u e > H A D O O P M A P R E D H O M E = HADOOP_HOME/etc/mapred-site.xml,增加以下配置 <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME= HADOOPHOME/etc/mapredsite.xml,<property><name>yarn.app.mapreduce.am.env</name><value>HADOOPMAPREDHOME={HADOOP_HOME}


mapreduce.map.env
HADOOP_MAPRED_HOME= H A D O O P H O M E < / v a l u e > < / p r o p e r t y > < p r o p e r t y > < n a m e > m a p r e d u c e . r e d u c e . e n v < / n a m e > < v a l u e > H A D O O P M A P R E D H O M E = {HADOOP_HOME}</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME= HADOOPHOME</value></property><property><name>mapreduce.reduce.env</name><value>HADOOPMAPREDHOME={HADOOP_HOME}

yarn 关于资源配置参数设置
由于我是在虚拟机下运行的docker,运行内存小导致了grep程序运行卡死的情况,要反复调整yarn 关于资源配置参数设置来使程序正常运行和虚拟机不卡死,这主要和虚拟机分配的内存大小和CPU数量来决定参数,具有个体差异性。
首先介绍一下yarn-site.xml 中各个关于资源配置的参数
yarn.scheduler.minimum-allocation-mb
yarn.scheduler.maximum-allocation-mb
说明:单个容器可申请的最小与最大内存,应用在运行申请内存时不能超过最大值,小于最小值则分配最小值,从这个角度看,最小值有点想操作系统中的页。注:这两个值一经设定不能动态改变(此处所说的动态改变是指应用运行时)。
默认值:1024/8192

yarn.scheduler.minimum-allocation-vcores
yarn.scheduler.maximum-allocation-vcores
参数解释:单个可申请的最小/最大虚拟CPU个数。比如设置为1和4,则运行MapRedce作业时,每个Task最少可申请1个虚拟CPU,最多可申请4个虚拟CPU。
默认值:1/32

yarn.nodemanager.resource.memory-mb
yarn.nodemanager.vmem-pmem-ratio
说明:每个节点可用的最大内存,RM中的两个值不应该超过此值。即:用此值除以RM中的最小容器内存。虚拟内存率,是占task所用内存的百分比,默认值为2.1倍;注意:第一个参数是不可修改的,一旦设置,整个运行过程中不可动态修改,且该值的默认大小是8G,即使计算机内存不足8G也会按着8G内存来使用。
默认值:8G /2.1

yarn.nodemanager.resource.cpu-vcores
参数解释:NodeManager总的可用虚拟CPU个数。
默认值:8

同时也要调整mapred-site.xml中各个关于资源配置的参数

mapreduce.map.memory.mb
mapreduce.reduce.memory.mb
说明:这两个参数指定用于MapReduce的两个任务(Map and Reduce task)的内存大小,其值应该在RM中的最大最小container之间。如果没有配置则通过如下简单公式获得:
max(MIN_CONTAINER_SIZE, (Total Available RAM) / containers))
一般的reduce应该是map的2倍。注:这两个值可以在应用启动时通过参数改变;

AM中其它与内存相关的参数,还有JVM相关的参数,这些参数可以通过,如下选项配置:
mapreduce.map.java.opts
mapreduce.reduce.java.opts
说明:这两个参主要是为需要运行JVM程序(java、scala等)准备的,通过这两个设置可以向JVM中传递参数的,与内存有关的是,-Xmx,-Xms等选项。此数值大小,应该在AM中的map.mb和reduce.mb之间。

我个人配置过程中大概总结如下,当配置Yarn内存的时候主要是配置如下三个方面:每个Map和Reduce可用物理内存限制;对于每个任务的JVM对大小的限制;虚拟内存的限制;单个容器可申请的最小与最大内存是最关键,过大是直接导致虚拟机卡死的重要因素。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页