- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
大型mapreduce工作(加入14
输入目录,总共加起来大约14TB的输入)失败。不
我们只能不能做我们的工作。当我们刚刚做 map 是猫/减少是
猫,我们什至无法完成。复制它似乎停滞了
数据。
我们的猜测是我们正在饱和hadoop-on-emr的容量
由aws提供。不确定我们是否饱和网络或磁盘
空间,还是什么。我们会收到这样的错误
“减少>复制(438094 of 436094,速度为0.10 MB / s)”
在hadoop控制面板上。它只是卡在那里,从未完成
复制。另一个理论是hadoop的离线分类发生在
与复制同时进行,这在某种程度上是一个瓶颈。我们已经尝试过
更多化简器,更多节点,不同大小的各种排列
工作箱,但不知何故我们找不到组合
起作用了。
由于我们迫切需要完成此任务,因此我们正在解决
这是将数据划分为较小的作业。也就是说,每14个
输入年份将被分割,然后我们将加入分区。
有没有人有使用aws托管的hadoop来处理这种规模或更大规模的工作的经验,如果是这样,您能否就仅获得cat map / cat reduce的成功提供建议?像节点数,节点大小和配置选项一样?
否则,我想我们正在达到emr的局限性。
最佳答案
克里斯·史密斯(Chris Smith)回答了这个问题,并说我可以将其发布到SO。他的回答:
因此,输入数据的大小本身并不是对EMR的限制。还有很多其他因素。
也就是说,吸收10TB的数据是一项艰巨的任务。仅仅读取那么多数据是非常残酷的,然后就需要进行存储/分类。
第一个问题是:约束因素是什么?您是否看到网络带宽已用尽?您是否看到CPU已满?磁盘I / O或iops?这些在数据节点上的外观如何?那么JobTracker和NameNodes呢(在剩余的剩余时间里将它们最大化)是不寻常的
集群很好)?如果以上都不是,则可能是Hadoop资源已被耗尽,需要进行不同的配置。
由于您没有提到争用的任何特定方面,超出了它处于哪个阶段,这使我怀疑您没有太多衡量下面发生的情况的方式。通常,在调整一项重要工作之前,您需要多次“测量然后调整”。
根据一般经验,长时间处于“减少/复制”阶段非常有力地表明“您做错了”。通常,问题是您陷入了排序/溢出/合并过程,节点以某种方式使磁盘IO最大化。 Hadoop具有许多调整参数,这些参数对于具有大量映射器和化简器的作业开始变得古怪,尤其是在两者之间存在很大的不平衡时。同样,Karmasphere和类似工具可以在这里为您提供很多帮助。需要调整的典型事项(我可能对某些名称有误):
正在记录。特别是,像dfs.namenode.logging.level之类的内容对于作业前的调整可能很重要。用冗长的日志记录完全有可能自杀。尽管自相矛盾,它也可能是您的救赎,所以...
map 输出大小通常是“减少/复制”问题的关键因素。尽可能考虑减少 map 输出大小的方法。它实际上应该比 map 输入大小小得多。删除还原阶段严格不需要的所有数据。考虑使用紧凑的二进制序列化格式(Java序列化会降低您的性能),例如 Protocol Buffer 或节俭(整数数据大获成功)。考虑您的字符串在多大程度上可以用ID /枚举表示。您可以使用组合器来减少必须通过网络发送多少数据吗?如果您有多余的CPU,请使用压缩功能(从lzo或snappy开始,但是如果仍有更多CPU需要刻录,请考虑使用gzip甚至是更强大的功能)。如果您仍然在 map task 日志中看到合并步骤需要很长时间,则可以做一些调整:
io.sort.factor:可能应该更高。根据您的工作情况,您甚至可能遭受过多的映射器的困扰。 io.sort.mb:与io.sort.factor密切相关,但有所不同。如果您开始在节点上看到很多磁盘I / O压力,我会解决这个问题。这会消耗内存,因此此参数涉及实际折衷。
mapred.job.reuse.jvm.num.tasks:仅当您的任务变得非常小时,但如果任务确实很小,则值得提高mapred.reduce.parallel.copies:如果您的CPU不受限制,那么您可能想要增加这个数字。您可能最终需要调整其他数字以平衡情况。
io.sort.record.percent:由于工作规模,该百分比是最不可能完全脱离标准的。通常,如果这是错误的,那是因为您拥有很大或很小的记录。您想要达到的黄金分割率是“16 /(16 +每条记录的字节数)”。
很难强调早期残酷的溢出对节点性能的影响。如果溢出,则意味着数据将被写出,然后再次读取,然后再次写出。在每个节点上。因此,如果您错了,添加更多节点无济于事(实际上可以做到这一点)
更差)。您想查看一份工作溢出了多少记录以及输出了多少张 map 记录。理想情况下,这些数字应相同。现在,如果您必须溢出,那么就必须溢出(尽管,这通常表示您做错了事),但是每条记录仅溢出一次到磁盘的作业只会压碎其他记录。
reducer 方面可能存在类似的问题。看一下合并阶段的计数器。理想情况下,您希望溢出的记录为0或至少<= reducer 输入记录的数量。如果更高...这就是为什么您会遇到性能问题(严重的是,这可能是
绝对残酷)。请注意各种reducer溢出设置:mapred.job.shuffle.input.buffer.percent,mapred.job.shuffle.merge.percent,mapred.inmem.merge.threshold,io.sort.factor。 mapred.inmem.merge.threshold通常是大功告成的。前两个通常也搞砸了,但这更多地取决于工作的性质,而不是取决于工作规模。
dfs.namenode.handler.count:如果要在HDFS中生成很多小文件,则肯定要提高
dfs.mapred.job.tracker.handler.count:看看有多少个任务可以使一个想法更高。如果您要创建在数百个节点上运行的数千个小任务,那么您将无法满足于10
dfs.datanode.handler.count:这与parallel.copies标志并驾齐驱。这总是使我陷入麻烦,因为我的第一个直觉是将其提高得很高,然后我在其他地方造成了日志阻塞。 ;-)无论如何,如果您考虑与多少个reducer交谈的 map 绘制者,合理地提升这一点可能是有意义的。
tasktracker.http.threads:如果您被限制在reduce-copy中,则此问题不太可能出现。无论如何,它更接近应有的位置。 mapred.local.dir:这是我经常不得不在非EMR群集上进行调整的一项,以用于具有大量 map 输出的作业。您实际上可以成为磁盘绑定(bind)和磁盘空间绑定(bind)的对象,因此我发现将路径更改为以逗号分隔的目录列表(每个驱动器一个)很有帮助。当然,使用EMR没有意义,但是仍然指出如何真正快速地耗尽磁盘空间。
mapred.local.dir.minspacestart:您可能没有意识到,但是您的 map 输出空间可能不足。调整此值以确保在开始工作之前,每个任务在系统上都有足够的剩余空间可以真正节省您的培根。
请记住,Hadoop实际上是为每个主轴具有2个内核的系统(这是摩尔定律之前的几次迭代)而设计的,所有输入和输出都保留在HDFS内(这允许输入和输出的大量捷径),1GigE每8核1个端口,而交换矩阵中的瓶颈很少。 EMR不会给您那样的东西。亚马逊试图提供一些不错的默认设置来进行调整,但是很难为每个人通用地解决该问题。 EMR的优势之一是您倾向于在每个节点上获得大量RAM,因此您应该花一些时间来确保最佳使用RAM以最大程度地减少磁盘I / O。 Hadoop对于那些使用映射器消耗大量原始数据但吐出相对较少数据的工作也确实很有帮助。每个作业中生成的所有数据都有大量的分布式排序,默认情况下,Hadoop会尝试执行此操作,同时保留大量RAM和磁盘空间用于任务。已经对数据进行了存储/分类实际上可以将大量工作从化简器推入映射器,从而避免大量开销。很有可能,这就是您的问题所在。
关于hadoop - 在Hadoop Emr上使用Hadoop来处理> 10TB的输入是否可行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12829127/
我在网上搜索但没有找到任何合适的文章解释如何使用 javascript 使用 WCF 服务,尤其是 WebScriptEndpoint。 任何人都可以对此给出任何指导吗? 谢谢 最佳答案 这是一篇关于
我正在编写一个将运行 Linux 命令的 C 程序,例如: cat/etc/passwd | grep 列表 |剪切-c 1-5 我没有任何结果 *这里 parent 等待第一个 child (chi
所以我正在尝试处理文件上传,然后将该文件作为二进制文件存储到数据库中。在我存储它之后,我尝试在给定的 URL 上提供文件。我似乎找不到适合这里的方法。我需要使用数据库,因为我使用 Google 应用引
我正在尝试制作一个宏,将下面的公式添加到单元格中,然后将其拖到整个列中并在 H 列中复制相同的公式 我想在 F 和 H 列中输入公式的数据 Range("F1").formula = "=IF(ISE
问题类似于this one ,但我想使用 OperatorPrecedenceParser 解析带有函数应用程序的表达式在 FParsec . 这是我的 AST: type Expression =
我想通过使用 sequelize 和 node.js 将这个查询更改为代码取决于在哪里 select COUNT(gender) as genderCount from customers where
我正在使用GNU bash,版本5.0.3(1)-发行版(x86_64-pc-linux-gnu),我想知道为什么简单的赋值语句会出现语法错误: #/bin/bash var1=/tmp
这里,为什么我的代码在 IE 中不起作用。我的代码适用于所有浏览器。没有问题。但是当我在 IE 上运行我的项目时,它发现错误。 而且我的 jquery 类和 insertadjacentHTMl 也不
我正在尝试更改标签的innerHTML。我无权访问该表单,因此无法编辑 HTML。标签具有的唯一标识符是“for”属性。 这是输入和标签的结构:
我有一个页面,我可以在其中返回用户帖子,可以使用一些 jquery 代码对这些帖子进行即时评论,在发布新评论后,我在帖子下插入新评论以及删除 按钮。问题是 Delete 按钮在新插入的元素上不起作用,
我有一个大约有 20 列的“管道分隔”文件。我只想使用 sha1sum 散列第一列,它是一个数字,如帐号,并按原样返回其余列。 使用 awk 或 sed 执行此操作的最佳方法是什么? Accounti
我需要将以下内容插入到我的表中...我的用户表有五列 id、用户名、密码、名称、条目。 (我还没有提交任何东西到条目中,我稍后会使用 php 来做)但由于某种原因我不断收到这个错误:#1054 - U
所以我试图有一个输入字段,我可以在其中输入任何字符,但然后将输入的值小写,删除任何非字母数字字符,留下“。”而不是空格。 例如,如果我输入: 地球的 70% 是水,-!*#$^^ & 30% 土地 输
我正在尝试做一些我认为非常简单的事情,但出于某种原因我没有得到想要的结果?我是 javascript 的新手,但对 java 有经验,所以我相信我没有使用某种正确的规则。 这是一个获取输入值、检查选择
我想使用 angularjs 从 mysql 数据库加载数据。 这就是应用程序的工作原理;用户登录,他们的用户名存储在 cookie 中。该用户名显示在主页上 我想获取这个值并通过 angularjs
我正在使用 autoLayout,我想在 UITableViewCell 上放置一个 UIlabel,它应该始终位于单元格的右侧和右侧的中心。 这就是我想要实现的目标 所以在这里你可以看到我正在谈论的
我需要与 MySql 等效的 elasticsearch 查询。我的 sql 查询: SELECT DISTINCT t.product_id AS id FROM tbl_sup_price t
我正在实现代码以使用 JSON。 func setup() { if let flickrURL = NSURL(string: "https://api.flickr.com/
我尝试使用for循环声明变量,然后测试cols和rols是否相同。如果是,它将运行递归函数。但是,我在 javascript 中执行 do 时遇到问题。有人可以帮忙吗? 现在,在比较 col.1 和
我举了一个我正在处理的问题的简短示例。 HTML代码: 1 2 3 CSS 代码: .BB a:hover{ color: #000; } .BB > li:after {
我是一名优秀的程序员,十分优秀!