hadoop集群部署(yarn)

简介: 伴随着各大互联网公司开源自己的大数据框架,大数据处理领域的框架已经比较完善。到现在所谓大数据的框架已经用过habase(后来换成了elasticsearch)、zookeeper、kafka、storm,根据项目计划,接下来还要使用spark。

伴随着各大互联网公司开源自己的大数据框架,大数据处理领域的框架已经比较完善。到现在所谓大数据的框架已经用过habase(后来换成了elasticsearch)、zookeeper、kafka、storm,根据项目计划,接下来还要使用spark。虽然在众多框架中仅仅几个,但是也是已经涉及多个方面:数据存储、分布式协调、消息、实时计算等。没有找到任何一个框架能够完美解决所有问题,也就应了那句话,开发领域根本就没有银色子弹。所以即使是比较年长的hadoop(2004年到现在已经12年了,年纪也比较大了),也有能够体现其价值的地方。


最近用了storm,部署topology的时候总是感觉资源使用不平衡,于是想到了yarn能够对hadoop实现资源的协调,那是不是可以扩展一下,对storm也提供资源协调呢。google一下,果然yahho!已经开源了一个storm-yarn组件,于是学习一下,同时也把hadoop的部署复习了一遍。(关于hadoop的单机部署、伪分布式部署可以查看Hadoop环境部署)


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ojGiaG9A-1574088461291)(http://www.howardliu.cn/images/yarn_architecture.gif “yarn架构”)]


1. 基础操作

这里说的基础操作是指对hadoop环境最基本的修改,比如提供java环境、指定JAVA_HOME、格式化namenode数据、免密码登录等,这些在Hadoop环境部署中都有提到。不得不说的是,Hadoop部署虽然简单,但是如果配置不正确,可能出现这种那种奇奇怪怪的错误。(这样一想,hadoop真的比较娇气。)


2. 文件配置

接下来就该对hadoop的文件进行修改,这是重头戏,修改好之后系统就能够顺利启动了。


注意:这里修改了几个默认端口,如果没有特殊需要,可以不做修改。


2.1 服务器

建议修改hostname,设置成比较容易记忆的,比如:hadoop01.xxx.com或者resourcemanager.xxx.com等,我这里偷懒,直接使用之前设置的。


这里使用了公司的4台服务器:


s107:yarn的ResourceManager

s108:hdfs的NameNode;yarn的NodeManager;历史服务器JobHistoryServer

s109:hdfs的SecondaryNameNode;yarn的NodeManager

s110:hdfs的DataNode;yarn的NodeManager

s111:hdfs的DataNode;yarn的NodeManager

因为Secondary NameNode做日志合并的时候需要占用大量CPU和内存,所以这里将Secondary NameNode与NameNode分布在两台机器上。


另外,这里的NameNode和ResourceManager都没有做HA,在生产环境部署也是不完整的,后期会在这里补充。


2.2 core-site.xml

这个没有什么特别注意的,配置一下NameNode的host和端口、文件队列中io缓冲区大小、临时文件的路径就行:


<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://s108:9000</value>
    <description>NameNode的URI</description>
  </property>
  <property>
    <name>io.file.buffer.size</name>
    <value>131072</value>
    <description>文件队列中io缓冲区大小</description>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>file:/data/hadoop/data</value>
  </property>
</configuration>

2.3 hdfs-site.xml

这个文件是NameNode的相关配置:


<configuration>
  <property>
    <name>dfs.namenode.http-address</name>
    <value>s108:50070</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address</name>
    <value>s108:9000</value>
  </property>
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>s109:50090</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///data/hadoop/data/dfs/name</value>
    <description>NameNode在本地文件系统中存储命名空间和持久化日志的位置</description>
  </property>
  <property>
    <name>dfs.blocksize</name>
    <value>268435456</value>
    <description>HDFS文件块大小:256MB</description>
  </property>
  <property>
    <name>dfs.namenode.handler.count</name>
    <value>100</value>
    <description>NameNode服务中处理DataNode的RPC调用的线程数</description>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///data/hadoop/data/dfs/data</value>
    <description>DataNode存储数据的位置,如果是用逗号隔开的多个路径,每个路径都存一份</description>
  </property>
  <property>
    <name>dfs.replication</name>
    <value>3</value>
    <description>复制因子,数据复制数</description>
  </property>
  <property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
  </property>
</configuration>

2.4 mapred-site.xml

这个文件是配置MapReduce任务的配置:


<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    <description>设置执行job的是Yarn框架</description>
  </property>
  <property>
    <name>mapreduce.map.memory.mb</name>
    <value>1024</value>
    <description>map的最大可使用资源</description>
  </property>
  <property>
    <name>mapreduce.map.java.opts</name>
    <value>-Xmx1024M</value>
    <description>map的堆内存</description>
  </property>
  <property>
    <name>mapreduce.reduce.memory.mb</name>
    <value>3072</value>
    <description>reduce的最大可使用资源</description>
  </property>
  <property>
    <name>mapreduce.reduce.java.opts</name>
    <value>-Xmx2560M</value>
    <description>reduce堆内存</description>
  </property>
  <property>
    <name>mapreduce.task.io.sort.mb</name>
    <value>512</value>
    <description>数据排序时的内存大小</description>
  </property>
  <property>
    <name>mapreduce.task.io.sort.factor</name>
    <value>100</value>
    <description>数据排序时合并多个数据流</description>
  </property>
  <property>
    <name>mapreduce.reduce.shuffle.parallelcopies</name>
    <value>50</value>
    <description>当map数量多于reduce数量时,增加reduce并行副本数量。</description>
  </property>
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>s108:10020</value>
    <description>JobHistoryServer的URI</description>
  </property>
  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>s108:19888</value>
    <description>JobHistoryServer web服务的URI</description>
  </property>
  <property>
    <name>yarn.app.mapreduce.am.staging-dir</name>
    <value>/data/hadoop/yarn/staging</value>
    <description>job数据存储位置</description>
  </property>
  <property>
    <name>mapreduce.jobhistory.intermediate-done-dir</name>
    <value>${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate</value>
    <description>job的历史数据的临时位置</description>
  </property>
  <property>
    <name>mapreduce.jobhistory.done-dir</name>
    <value>${yarn.app.mapreduce.am.staging-dir}/history/done</value>
    <description>job的历史数据的归档位置</description>
  </property>
</configuration>

2.5 yarn-site.xml

这个是配置ResourceManager和NodeManager的:


<!--Configurations for ResourceManager and NodeManager-->
<configuration>
  <!-- Site specific YARN configuration properties -->
  <!--Configurations for ResourceManager and NodeManager-->
  <property>
    <name>yarn.acl.enable</name>
    <value>false</value>
    <description>使用使用ACL,默认是false</description>
  </property>
  <property>
    <name>yarn.admin.acl</name>
    <value>*</value>
    <description>集群中的管理员,用逗号隔开,默认是*,表示谁都可以</description>
  </property>
  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>false</value>
    <description>是否开启日志聚类运算</description>
  </property>
  <!--Configurations for ResourceManager-->
  <property>
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
  <property>
    <name>yarn.resourcemanager.address</name>
    <value>s107:8032</value>
    <description>客户端提交任务的ResourceManager的URI/description>
  </property>
  <property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>s107:8030</value>
    <description>向调度器协调资源的URI</description>
  </property>
  <property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>s107:8031</value>
    <description>为NodeManager提供的URI</description>
  </property>
  <property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>s107:8033</value>
    <description>给管理命令的URI</description>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>s107:8088</value>
    <description>ResourceManager的web服务URI</description>
  </property>
  <!--Configurations for NodeManager-->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    <description>排序服务</description>
  </property>
</configuration>

2.6 master文件

该文件需要自己创建,用于将NameNode与Secondary NameNode分别部署:


s109

2.7 salves文件

该文件用于指定DataNode的节点,默认是localhost,可以自己填写hostname或ip,每行一个:


s110
s111

至此,可以算是配置结束,还有一些调优的参数,可以根据实际情况进行调整。


3. 测试

先在每个服务器上执行hdfs namenode -format,然后在s107上执行start-yarn.sh启动YARN,在s108上执行start-dfs.sh启动HDFS,在s108上通过mr-jobhistory-daemon.sh start historyserver启动历史服务器。使用jps查看进程,可以得到文章开头所列出的进程列表。然后就使用举世闻名的wordcount进行测试。


mkdir input
echo "this is test" >> input/file
echo "this is a test" >> input/file
hadoop dfs -copyFromLocal input /input
hadoop jar ../default/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.3.jar wordcount /input /output

注意:


hadoop.tmp.dir、dfs.namenode.name.dir、dfs.datanode.data.dir三个参数指定的文件夹需要提前创建

可以在${PATH}中添加hadoop的sbin目录,将hadoop的脚本或程序添加到PATH中

需要保证hdfs的根目录中没有output文件夹,否则可以改个名字:output2…

因为使用使用Yarn管理任务,可以在浏览器访问http://s107:8088/查看执行状态


目录
相关文章
|
2月前
|
存储 分布式计算 资源调度
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
78 5
|
2月前
|
资源调度 数据可视化 大数据
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(二)
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(二)
36 4
|
2月前
|
XML 分布式计算 资源调度
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
168 5
|
2月前
|
XML 资源调度 网络协议
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
119 4
|
2月前
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
82 4
|
3月前
|
资源调度 分布式计算 Hadoop
YARN(Hadoop操作系统)的架构
本文详细解释了YARN(Hadoop操作系统)的架构,包括其主要组件如ResourceManager、NodeManager和ApplicationMaster的作用以及它们如何协同工作来管理Hadoop集群中的资源和调度作业。
144 3
YARN(Hadoop操作系统)的架构
|
3月前
|
资源调度 分布式计算 Hadoop
使用YARN命令管理Hadoop作业
本文介绍了如何使用YARN命令来管理Hadoop作业,包括查看作业列表、检查作业状态、杀死作业、获取作业日志以及检查节点和队列状态等操作。
58 1
使用YARN命令管理Hadoop作业
|
3月前
|
分布式计算 资源调度 Hadoop
Hadoop YARN资源管理-容量调度器(Yahoo!的Capacity Scheduler)
详细讲解了Hadoop YARN资源管理中的容量调度器(Yahoo!的Capacity Scheduler),包括队列和子队列的概念、Apache Hadoop的容量调度器默认队列、队列的命名规则、分层队列、容量保证、队列弹性、容量调度器的元素、集群如何分配资源、限制用户容量、限制应用程序数量、抢占申请、启用容量调度器以及队列状态管理等方面的内容。
85 3
|
3月前
|
分布式计算 资源调度 Hadoop
Hadoop YARN资源管理-公平调度器(Fackbook的Fair Scheduler)
详细介绍了Hadoop YARN资源管理中的公平调度器(Fair Scheduler),包括其概述、配置、队列结构、以及如何将作业提交到指定队列,展示了公平调度器如何通过分配文件(fair-scheduler.xml)来控制资源分配,并提供了配置示例和如何通过命令行提交作业到特定队列的方法。
167 0
Hadoop YARN资源管理-公平调度器(Fackbook的Fair Scheduler)
|
4月前
|
图形学 数据可视化 开发者
超实用Unity Shader Graph教程:从零开始打造令人惊叹的游戏视觉特效,让你的作品瞬间高大上,附带示例代码与详细步骤解析!
【8月更文挑战第31天】Unity Shader Graph 是 Unity 引擎中的强大工具,通过可视化编程帮助开发者轻松创建复杂且炫酷的视觉效果。本文将指导你使用 Shader Graph 实现三种效果:彩虹色渐变着色器、动态光效和水波纹效果。首先确保安装最新版 Unity 并启用 Shader Graph。创建新材质和着色器图谱后,利用节点库中的预定义节点,在编辑区连接节点定义着色器行为。
271 0

相关实验场景

更多