etl时hdfs 上传文件平衡需要停止吗

1.集群执行balancer命令,依旧不平衡的原因是什么?该如何解决?
2.尽量不在NameNode上执行start-balancer.sh的原因是什么?
集群平衡介绍Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,比如集群中添加新的数据节点。当HDFS出现不平衡状况的时候,将引发很多问题,比如MR程序无法很好地利用本地计算的优势,机器之间无法达到更好的网络带宽使用率,机器磁盘无法利用等等。可见,保证HDFS中的数据平衡是非常重要的。在Hadoop中,包含一个Balancer程序,通过运行这个程序,可以使得HDFS集群达到一个平衡的状态,使用这个程序的命令如下:
sh $HADOOP_HOME/bin/start-balancer.sh –t 10%复制代码
这个命令中-t参数后面跟的是HDFS达到平衡状态的磁盘使用率偏差值。如果机器与机器之间磁盘使用率偏差小于10%,那么我们就认为HDFS集群已经达到了平衡的状态。
Hadoop的开发人员在开发Balancer程序的时候,遵循了以下几点原则:1.& & 在执行数据重分布的过程中,必须保证数据不能出现丢失,不能改变数据的备份数,不能改变每一个rack中所具备的block数量。2.& & 系统管理员可以通过一条命令启动数据重分布程序或者停止数据重分布程序。3.& & Block在移动的过程中,不能暂用过多的资源,如网络带宽。4.& & 数据重分布程序在执行的过程中,不能影响name node的正常工作。
集群执行balancer依旧不平衡的原因基于这些基本点,目前Hadoop数据重分布程序实现的逻辑流程如下图所示:
084687.png (40.88 KB, 下载次数: 53)
15:05 上传
Rebalance程序作为一个独立的进程与name node进行分开执行。1 Rebalance Server从Name Node中获取所有的Data Node情况:每一个Data Node磁盘使用情况。2 Rebalance Server计算哪些机器需要将数据移动,哪些机器可以接受移动的数据。并且从Name Node中获取需要移动的数据分布情况。3 Rebalance Server计算出来可以将哪一台机器的block移动到另一台机器中去。4,5,6 需要移动block的机器将数据移动的目的机器上去,同时删除自己机器上的block数据。7&&Rebalance Server获取到本次数据移动的执行结果,并继续执行这个过程,一直没有数据可以移动或者HDFS集群以及达到了平衡的标准为止。Hadoop现有的这种Balancer程序工作的方式在绝大多数情况中都是非常适合的。现在我们设想这样一种情况:1 数据是3份备份。2 HDFS由2个rack组成。3 2个rack中的机器磁盘配置不同,第一个rack中每一台机器的磁盘空间为1TB,第二个rack中每一台机器的磁盘空间为10TB。4 现在大多数数据的2份备份都存储在第一个rack中。在这样的一种情况下,HDFS级群中的数据肯定是不平衡的。现在我们运行Balancer程序,但是会发现运行结束以后,整个HDFS集群中的数据依旧不平衡:rack1中的磁盘剩余空间远远小于rack2。这是因为Balance程序的开发原则1导致的。简单的说,就是在执行Balancer程序的时候,不会将数据中一个rack移动到另一个rack中,所以就导致了Balancer程序永远无法平衡HDFS集群的情况。针对于这种情况,可以采取2中方案:1 继续使用现有的Balancer程序,但是修改rack中的机器分布。将磁盘空间小的机器分叉到不同的rack中去。2 修改Balancer程序,允许改变每一个rack中所具备的block数量,将磁盘空间告急的rack中存放的block数量减少,或者将其移动到其他磁盘空间富余的rack中去。----------------------------------------------------------------------------------------------------------使用经验总结
由于历史原因,hadoop集群中的机器的磁盘空间的大小各不相同,而HDFS在进行写入操作时,并没有考虑到这种情况,所以随着数据量的逐渐增加,磁盘较小的datanode机器上的磁盘空间很快将被写满,从而触发了报警。此时,不得不手工执行start-balancer.sh来进行balance操作,即使将dfs.balance.bandwidthPerSec&&参数设置为10M/s,整个集群达到平衡也需要很长的时间,所以写了个crontab来每天凌晨来执行start-balancer.sh,由于此时集群不平衡的状态还没有那么严重,所以start-balancer.sh很快执行结束了。另外需要注意的地方是,由于HDFS需要启动单独的Rebalance Server来执行Rebalance操作,所以尽量不要在NameNode上执行start-balancer.sh,而是找一台比较空闲的机器。1) hadoop balance工具的用法:To start:&&bin/start-balancer.sh [-threshold &threshold&]&&Example: bin/ start-balancer.sh&&start the balancer with a default threshold of 10%&&bin/ start-balancer.sh -threshold 5&&start the balancer with a threshold of 5%&&
To stop:&&bin/ stop-balancer.sh&&2)影响hadoop balance工具的几个参数:-threshold 默认设置:10,参数取值范围:0-100,参数含义:判断集群是否平衡的目标参数,每一个 datanode 存储使用率和集群总存储使用率的差值都应该小于这个阀值 ,理论上,该参数设置的越小,整个集群就越平衡,但是在线上环境中,hadoop集群在进行balance时,还在并发的进行数据的写入和删除,所以有可能无法到达设定的平衡参数值。dfs.balance.bandwidthPerSec&&默认设置: M/S),参数含义:设置balance工具在运行中所能占用的带宽,设置的过大可能会造成mapred运行缓慢
欢迎加入about云群 、 ,云计算爱好者群,关注
主题帖子积分
注册会员, 积分 80, 距离下一级还需 120 积分
注册会员, 积分 80, 距离下一级还需 120 积分
扩容了集群,一下子加了几倍,从13到40台,总感觉map和reduce慢很多,是不平衡导致的吗
主题帖子积分
高级会员, 积分 1313, 距离下一级还需 3687 积分
高级会员, 积分 1313, 距离下一级还需 3687 积分
主题帖子积分
新手上路, 积分 9, 距离下一级还需 41 积分
新手上路, 积分 9, 距离下一级还需 41 积分
很好哦,支持!!
浏览过的版块
经常参与各类话题的讨论,发帖内容较有主见
经常帮助其他会员答疑
活跃且尽责职守的版主
为论坛做出突出贡献的会员
站长推荐 /6
about云|新出视频,openstack零基础入门,解决你ping不通外网难题
云计算hadoop视频大全(新增 yarn、flume|storm、hadoop一套视频
视频资料大优惠
大数据零基础由入门到实战
阶段1:hadoop零基础入门基础篇
阶段2:hadoop2入门
阶段3:大数据非hadoop系列课程
阶段4:项目实战篇
阶段5:大数据高级系列应用课程
阶段6:工作实用系列教程
等待验证会员请验证邮箱
新手获取积分方法
Powered by8705人阅读
Linux(58)
三、使用Oozie定期自动执行ETL1. Oozie简介(1)Oozie是什么& & & & Oozie是一个管理Hadoop作业、可伸缩、可扩展、可靠的工作流调度系统,其工作流作业是由一系列动作构成的有向无环图(DAGs),协调器作业是按时间频率周期性触发的Oozie工作流作业。Oozie支持的作业类型有Java map-reduce、Streaming map-reduce、Pig、 Hive、Sqoop和Distcp,及其Java程序和shell脚本等特定的系统作业。& & & & 第一版Oozie是一个基于工作流引擎的服务器,通过执行Hadoop Map/Reduce和Pig作业的动作运行工作流作业。第二版Oozie是一个基于协调器引擎的服务器,按时间和数据触发工作流执行。它可以基于时间(如每小时执行一次)或数据可用性(如等待输入数据完成后再执行)连续运行工作流。第三版Oozie是一个基于Bundle引擎的服务器。它提供更高级别的抽象,批量处理一系列协调器应用。用户可以在bundle级别启动、停止、挂起、继续、重做协调器作业,这样可以更好地简化操作控制。(2)为什么需要Oozie在Hadoop中执行的任务有时候需要把多个Map/Reduce作业连接到一起执行,或者需要多个作业并行处理。Oozie可以把多个Map/Reduce作业组合到一个逻辑工作单元中,从而完成更大型的任务。从调度的角度看,如果使用crontab的方式调用多个工作流作业,可能需要编写大量的脚本,还要通过脚本来控制好各个工作流作业的执行时序问题,不但脚本不好维护,而且监控也不方便。基于这样的背景,Oozie提出了Coordinator的概念,它能够将每个工作流作业作为一个动作来运行,相当于工作流定义中的一个执行节点,这样就能够将多个工作流作业组成一个称为Coordinator Job的作业,并指定触发时间和频率,还可以配置数据集、并发数等。(3)Oozie的体系结构(摘自)& & & & Oozie的体系结构如下图所示。& & & & Oozie是一种Java Web应用程序,它运行在Java servlet容器——即Tomcat——中,并使用数据库来存储以下内容:工作流定义当前运行的工作流实例,包括实例的状态和变量& & & & Oozie工作流是放置在控制依赖DAG(有向无环图 Direct Acyclic Graph)中的一组动作(例如,Hadoop的Map/Reduce作业、Pig作业等),其中指定了动作执行的顺序。我们会使用hPDL(一种XML流程定义语言)来描述这个图。& & & & hPDL是一种很简洁的语言,只会使用少数流程控制和动作节点。控制节点会定义执行的流程,并包含工作流的起点和终点(start、end和fail节点)以及控制工作流执行路径的机制(decision、fork和join节点)。动作节点是一些机制,通过它们工作流会触发执行计算或者处理任务。Oozie为以下类型的动作提供支持: Hadoop map-reduce、Hadoop文件系统、Pig、Java和Oozie的子工作流(SSH动作已经从Oozie schema 0.2之后的版本中移除了)。& & & & 所有由动作节点触发的计算和处理任务都不在Oozie之中——它们是由Hadoop的Map/Reduce框架执行的。这种方法让Oozie可以支持现存的Hadoop用于负载平衡、灾难恢复的机制。这些任务主要是异步执行的(只有文件系统动作例外,它是同步处理的)。这意味着对于大多数工作流动作触发的计算或处理任务的类型来说,在工作流操作转换到工作流的下一个节点之前都需要等待,直到计算或处理任务结束了之后才能够继续。Oozie可以通过两种不同的方式来检测计算或处理任务是否完成,也就是回调和轮询。当Oozie启动了计算或处理任务的时候,它会为任务提供唯一的回调URL,然后任务会在完成的时候发送通知给特定的URL。在任务无法触发回调URL的情况下(可能是因为任何原因,比方说网络闪断),或者当任务的类型无法在完成时触发回调URL的时候,Oozie有一种机制,可以对计算或处理任务进行轮询,从而保证能够完成任务。& & & & Oozie工作流可以参数化(在工作流定义中使用像${inputDir}之类的变量)。在提交工作流操作的时候,我们必须提供参数值。如果经过合适地参数化(比方说,使用不同的输出目录),那么多个同样的工作流操作可以并发。& & & & 一些工作流是根据需要触发的,但是大多数情况下,我们有必要基于一定的时间段和(或)数据可用性和(或)外部事件来运行它们。Oozie协调系统(Coordinator system)让用户可以基于这些参数来定义工作流执行计划。Oozie协调程序让我们可以以谓词的方式对工作流执行触发器进行建模,那可以指向数据、事件和(或)外部事件。工作流作业会在谓词得到满足的时候启动。& & & & 经常我们还需要连接定时运行、但时间间隔不同的工作流操作。多个随后运行的工作流的输出会成为下一个工作流的输入。把这些工作流连接在一起,会让系统把它作为数据应用的管道来引用。Oozie协调程序支持创建这样的数据应用管道。(4)CDH 5.7.0中的Oozie& & & & CDH 5.7.0中,Oozie的版本是4.1.0,元数据存储使用MySQL。关于CDH 5.7.0中Oozie的属性,参考以下链接:2. 建立定期装载工作流(1)修改资源配置& & & & 需要将以下两个参数的值调高:yarn.nodemanager.resource.memory-mb = 2000
yarn.scheduler.maximum-allocation-mb = 2000& & & & 否则会在执行工作流作业时报类似下面的错误:org.apache.oozie.action.ActionExecutorException: JA009: org.apache.hadoop.yarn.exceptions.InvalidResourceRequestException: Invalid resource request, requested memory & 0, or requested memory & max configured, requestedMemory=1536, maxMemory=1500& & & & 具体做法是,从CDH Web控制台修改相关参数,保存更改并重启集群。& & & & yarn.nodemanager.resource.memory-mb参数在YARN服务的NodeManager范围里,如下图所示。& & & & yarn.scheduler.maximum-allocation-mb参数在YARN服务的ResourceManager范围里,如下图所示。& & & & 从Web控制台重启集群的界面如下图所示。(2)启用Oozie Web Console& & & & 缺省配置时,Oozie Web Console是禁用的,为了后面方便监控Oozie作业的执行,需要将其改为启用。“启用 Oozie 服务器 Web 控制台”参数在Oozie服务的主要范围里,如下图所示。& & & & 具体的做法是:下载安装ext-2.2。从CDH Web控制台修改相关参数,保存更改并重启Oozie服务。& & & & 详细步骤参考以下链接:(3)启动sqoop的share metastore service& & & & 定期装载工作流需要用Oozie调用Sqoop执行,这需要开启Sqoop元数据共享存储,命令如下:sqoop metastore & /tmp/sqoop_metastore.log 2&&1 && & & & 关于Oozie无法运行Sqoop Job的问题,参考以下链接:(4)连接metastore重建sqoop job& & & & 前面建立的sqoop job,其元数据并没有存储在share metastore里,所以需要使用以下的命令重建。last_value=`sqoop job --show myjob_incremental_import | grep incremental.last.value | awk&'{print $3}'`
sqoop job --delete myjob_incremental_import
sqoop job \
--meta-connect jdbc:hsqldb:hsql://cdh2:16000/sqoop \
--create myjob_incremental_import \
--connect &jdbc:mysql://cdh1:3306/source?useSSL=false&user=root&password=mypassword& \
--table sales_order \
--columns &order_number, customer_number, product_code, order_date, entry_date, order_amount& \
--hive-import \
--hive-table rds.sales_order \
--incremental append \
--check-column order_number \
--last-value $last_value& & & & 其中$last-value是上次ETL执行后的值。(5)定义工作流& & & & 建立内容如下的workflow.xml文件:&?xml version=&1.0& encoding=&UTF-8&?&
&workflow-app xmlns=&uri:oozie:workflow:0.1& name=&regular_etl&&
&start to=&fork-node&/&
&fork name=&fork-node&&
&path start=&sqoop-customer& /&
&path start=&sqoop-product& /&
&path start=&sqoop-sales_order& /&
&action name=&sqoop-customer&&
&sqoop xmlns=&uri:oozie:sqoop-action:0.2&&
&job-tracker&${jobTracker}&/job-tracker&
&name-node&${nameNode}&/name-node&
&arg&import&/arg&
&arg&--connect&/arg&
&arg&jdbc:mysql://cdh1:3306/source?useSSL=false&/arg&
&arg&--username&/arg&
&arg&root&/arg&
&arg&--password&/arg&
&arg&mypassword&/arg&
&arg&--table&/arg&
&arg&customer&/arg&
&arg&--hive-import&/arg&
&arg&--hive-table&/arg&
&arg&rds.customer&/arg&
&arg&--hive-overwrite&/arg&
&file&/tmp/hive-site.xml#hive-site.xml&/file&
&archive&/tmp/mysql-connector-java-5.1.38-bin.jar#mysql-connector-java-5.1.38-bin.jar&/archive&
&ok to=&joining&/&
&error to=&fail&/&
&action name=&sqoop-product&&
&sqoop xmlns=&uri:oozie:sqoop-action:0.2&&
&job-tracker&${jobTracker}&/job-tracker&
&name-node&${nameNode}&/name-node&
&arg&import&/arg&
&arg&--connect&/arg&
&arg&jdbc:mysql://cdh1:3306/source?useSSL=false&/arg&
&arg&--username&/arg&
&arg&root&/arg&
&arg&--password&/arg&
&arg&mypassword&/arg&
&arg&--table&/arg&
&arg&product&/arg&
&arg&--hive-import&/arg&
&arg&--hive-table&/arg&
&arg&rds.product&/arg&
&arg&--hive-overwrite&/arg&
&file&/tmp/hive-site.xml#hive-site.xml&/file&
&archive&/tmp/mysql-connector-java-5.1.38-bin.jar#mysql-connector-java-5.1.38-bin.jar&/archive&
&ok to=&joining&/&
&error to=&fail&/&
&action name=&sqoop-sales_order&&
&sqoop xmlns=&uri:oozie:sqoop-action:0.2&&
&job-tracker&${jobTracker}&/job-tracker&
&name-node&${nameNode}&/name-node&
&command&job --exec myjob_incremental_import --meta-connect jdbc:hsqldb:hsql://cdh2:16000/sqoop&/command&
&file&/tmp/hive-site.xml#hive-site.xml&/file&
&archive&/tmp/mysql-connector-java-5.1.38-bin.jar#mysql-connector-java-5.1.38-bin.jar&/archive&
&ok to=&joining&/&
&error to=&fail&/&
&join name=&joining& to=&hive-node&/&
&action name=&hive-node&&
&hive xmlns=&uri:oozie:hive-action:0.2&&
&job-tracker&${jobTracker}&/job-tracker&
&name-node&${nameNode}&/name-node&
&job-xml&/tmp/hive-site.xml&/job-xml&
&script&/tmp/regular_etl.sql&/script&
&ok to=&end&/&
&error to=&fail&/&
&kill name=&fail&&
&message&Sqoop failed, error message[${wf:errorMessage(wf:lastErrorNode())}]&/message&
&end name=&end&/&
&/workflow-app&& & & & 其DAG如下图所示。& & & & 该工作流包括9个节点,其中有5个控制节点,4个动作节点:工作流的起点(start)、终点(end)、失败处理节点(fail,DAG图中未显示),两个执行路径控制节点(fork-node和joining,fork与join节点必须成对出现),三个并行处理的Sqoop行动节点(sqoop-customer、sqoop-product、sqoop-sales_order)用作数据抽取,一个Hive行动节点(hive-node)用作数据转换与装载。(6)部署工作流hdfs dfs -put -f workflow.xml /user/root/
hdfs dfs -put /etc/hive/conf.cloudera.hive/hive-site.xml /tmp/
hdfs dfs -put /root/mysql-connector-java-5.1.38/mysql-connector-java-5.1.38-bin.jar /tmp/
hdfs dfs -put /root/regular_etl.sql /tmp/(7)建立作业属性文件& & & & 建立内容如下的job.properties文件:nameNode=hdfs://cdh2:8020
jobTracker=cdh2:8032
queueName=default
oozie.use.system.libpath=true
oozie.wf.application.path=${nameNode}/user/${user.name}(8)运行工作流oozie job -oozie http://cdh2:11000/oozie -config /root/job.properties -run& & & & 此时从Oozie Web Console可以看到正在运行的作业,如下图所示。& & & & 点击作业所在行,可以打开作业的详细信息窗口,如下图所示。& & & & 点击动作所在行,可以打开动作的详细信息窗口,如下图所示。& & & & 可以点击Console URL右侧的图标,可以打开Map/Reduce作业的跟踪窗口,如下图所示。& & & & 当Oozie作业执行完,可以在“All Jobs”标签页看到,Status列已经从RUNNING变为SUCCEEDED,如下图所示。& & & & 此时查看cdc_time表的数据,可以看到日期已经改为当前日期,如下图所示。3. 建立协调作业定期自动执行工作流(1)建立协调作业属性文件& & & & 建立内容如下的job-coord.properties文件:nameNode=hdfs://cdh2:8020
jobTracker=cdh2:8032
queueName=default
oozie.use.system.libpath=true
oozie.coord.application.path=${nameNode}/user/${user.name}
timezone=UTC
start=T06:00Z
end=T07:15Z
workflowAppUri=${nameNode}/user/${user.name}(2)建立协调作业配置文件& & & & 建立内容如下的coordinator.xml文件:&coordinator-app name=&regular_etl-coord& frequency=&${coord:days(1)}& start=&${start}& end=&${end}& timezone=&${timezone}& xmlns=&uri:oozie:coordinator:0.1&&
&workflow&
&app-path&${workflowAppUri}&/app-path&
&configuration&
&property&
&name&jobTracker&/name&
&value&${jobTracker}&/value&
&/property&
&property&
&name&nameNode&/name&
&value&${nameNode}&/value&
&/property&
&property&
&name&queueName&/name&
&value&${queueName}&/value&
&/property&
&/configuration&
&/workflow&
&/coordinator-app&(3)部署协调作业hdfs dfs -put -f coordinator.xml /user/root/(4)运行协调作业oozie job -oozie http://cdh2:11000/oozie -config /root/job-coord.properties -run& & & & 此时从Oozie Web Console可以看到准备运行的协调作业,作业的状态为PREP,如下图所示。& & & & 此协调作业自日开始,每天14点执行一次。结束日期非常晚,这里设置的是日。需要注意一下时区的设置。Oozie默认的时区是UTC,而且即便在属性文件中设置了timezone=GMT+0800也不起作用,所以start属性设置的是06:00,实际就是北京时间14:00。& & & & 当时间到达14:00时,协调作业开始运行,状态由PREP变为RUNNING,如下图所示。& & & & 点击作业所在行,可以打开协调作业的详细信息窗口,如下图所示。& & & & 点击协调作业所在行,可以打开工作流作业的详细信息窗口,如下图所示。& & & & 点击动作所在行,可以打开动作的详细信息窗口,如下图所示。& & & & 可以点击Console URL右侧的图标,可以打开Map/Reduce作业的跟踪窗口,如下图所示。& & & & 至此介绍了使用Oozie定期自动执行ETL的一般方法。Oozie 4.1.0的官方文档链接地址如下:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1035678次
积分:14267
积分:14267
排名:第648名
原创:206篇
转载:19篇
评论:84条
阅读:15182
文章:25篇
阅读:88173
(3)(119)(15)(11)(7)(5)(14)(7)(13)(1)(12)(18)(3)场景在hadoop中的分布式文件系统hdfs中,当存储节点磁盘使用达到预警值是,我们需要新增一个数据存储节点,来存储数据!新增方法:静态添加动态添加静态添加静态新增的方式,就是相当于我们起初部署hdfs集群规划一样,停止NameNode,新增一个DateNode数据节点,这种方法不适用于线上提供服务的场景,具体操作如下:
1、停止NameNode节点
# cd hdfs_install_dir/sbin/
# ./hadoop-deamon.sh stop namenode
2、修改配置文件slaves文件,并修改/etc/hosts记录把新增的节点对应的ip和hostname追加到各节点
# cd hdfs_install_dir/etc/hadoop/
# echo &new_datanode_hostname& && ./slaves
# echo &new_datanode_ip
new_datanode_hostname& && /etc/hosts
然后再利用rsync 同步配置文件和hosts文件,到各节点
3、确保Hadoop/HDFS集群的NameNode可以对新节点进行SSH免密码登录。
4、重新启动NameNode节点
5、如果你希望各数据节点磁盘使用量达到一个相对平衡的状态,就是百分比,你还需要执行hadoop balance命令,后面会具体讲到!动态添加动态添加,不需要停止启动NameNode节点,具体步骤如下:
1、修改所有hdfs集群机器的配置文件slaves文件,并修改/etc/hosts记录把新增的节点对应的ip和hostname追加到各节点
# cd hdfs_install_dir/etc/hadoop/
# echo &new_datanode_hostname& && ./slaves
# echo &new_datanode_ip
new_datanode_hostname& && /etc/hosts
如果你使用ansible管理的话,hdfs集群的集群做一个叫hdfs的分组,两条命令搞定:
# ansible hdfs -m shell -a 'echo &new_datanode_hostname& && hdfs_install_dir/etc/hadoop/slaves'
# ansible hdfs -m shell -a 'echo &new_datanode_ip new_datanode_hostname& && /etc/hosts'
这样所有的节点slaves文件和host文件都更新了!
2、启动新增的datanode节点
# cd hdfs_install_dir/sbin
# ./hadoop-daemon.sh start datanode
3、查看是否正常加入到集群
web查看方式:http://NameNode_ip:50070/dfsnodelist.jsp?whatNodes=LIVE
命令查看方式:cd hdfs_install_dir/bin/ && ./hadoop dfsadmin -report
4、数据再平衡
添加新节点时,HDFS不会自动重新平衡。然而,HDFS提供了一个手动调用的重新平衡(reblancer)工具。这个工具将整个集群中的数据块分布调整到一个可人工配置的百分比阈值。如果在其他现有的节点上有空间存储问题,再平衡就会根据阀值,然后平衡分布数据。
执行再平衡命令,可选参数-threshold指定了磁盘容量的余量百分比,用来判定一个节点的磁盘利用率是过低还是过高。一个利用不足的数据节点其利用率低于平均利用率-阈值。过度利用的数据节点其利用率高于平均利用率+阈值。该参数设置的越小,整个集群越平衡,但会花费更多的时间进行再平衡操作。默认阈值为10%。平衡执行命令如下:
# cd hdfs_install_dir/sbin/
# ./start-balancer.sh –threshold 5
-threshold参数就是是指定平衡的阈值。
-threshold的默认是10,即每个datanode节点的实际hdfs存储使用量/集群hdfs存储量
具体解释例子如下:
datanode hdfs使用量1000G;
集群总hdfs存储量10T即10000G;
则t值为 = 0.1;
当执行balance的-t参数小于0.1时,集群进行balance;
命令为:start-balancer.sh -threshold 0.1 标注知识点1、 balance命令可以在namenode或者datanode上启动,也可以随时利用stop-balance.sh脚本停止平衡!
2、balance的默认带宽是1M/s。 如果你希望修改平衡数据的带宽大小可以用./hdfs dfsadmin -setBalancerBandwidth 命令指定
3、slave文件是用于重启时使用。集群的start和stop需要读取slave文件。启用datanode时只要在hdfs-site中配置了namenode位置,就可以将信息push给namenode。 这就是为什么slaves文件很重要的原因。感谢关注OpenSkill_CN订阅号,开源技术社区是一个致力开源、分享平台,在这里你可以分享你的技术见解和问题,分享你解决技术问题的方法文章,为我们的后来学习者提供福利!欢迎加QQ技术交流群(),如果你认同这种开源、分享的极客精神的话,帮忙转发,让更多小伙伴知道开源技术社区,欢迎注册分享!OpenSKillOpenSkill
中国最极客IT技术问答平台
致力开源 、分享!轻轻松松帮忙转发朋友圈:OpenSkill(OpenSkill_CN) 
 文章为作者独立观点,不代表大不六文章网立场
OpenSkill_CN 中国最极客IT技术问答平台 致力开源、分享. 无分享不快乐,把开源、分享做到极致,把好的东西分享给大家!热门文章最新文章OpenSkill_CN 中国最极客IT技术问答平台 致力开源、分享. 无分享不快乐,把开源、分享做到极致,把好的东西分享给大家!&&&&违法和不良信息举报电话:183-
举报邮箱:
Copyright(C)2016 大不六文章网
京公网安备78

我要回帖

更多关于 hdfs 数据平衡 的文章

 

随机推荐