jjzjj

Hadoop 计数器 : how to access the Reporter object outside map() and reduce()

coder 2024-01-07 原文

要使用计数器,我需要有权访问 Reporter 对象。

Reporter 对象作为参数传递给 map() 和 reduce(),因此我可以这样做: reporter.incrCounter(NUM_RECORDS, 1);

但是我需要在 MultipleOutputFormat 类中使用计数器(我正在使用方法 生成文件名键值)

问题:如何访问 MultipleOutputFormat 类中的 Reporter 对象?

最佳答案

您可以创建自己的 MultipleOutputFormat类,MyMultipleOutputFormat (这听起来有点像你在做的)并创建一个接受 Reporter 的函数(以及其他参数)然后调用基 generateFileNameForKeyValue .

如果有办法可以访问 Job从你需要记录的地方。你可以获得 context来自 job ( context.getConfiguration() 然后递增计数器 ( context.getCounter(YOUR_COUNTER.HERE).increment(1); )

我不知道您的确切情况,但尝试在一个应该作用于/作用于单个记录的函数内部使用计数器似乎是不必要的,并且可能可以在访问 Reporter 的“外部”完成。/Context简单。我可能是错的,那里需要你的情况/使用计数器,但我建议检查你是否真的需要它在那个函数内部,或者它是否也可以在外部完成。

编辑:回应几个不清楚的地方; 创建一个接受 Reporter 的函数:由于您正在扩展 MultipleOutputFormat您可以添加其他功能。如果添加 generateFileNameForKeyValueAndTrack(K key, V value, String name, Reporter reporter) 的函数定义然后你可以在该函数中进行计数器递增并让它调用 generateFileNameForKeyValue路过key , valuename .

似乎不需要在内部使用计数器:我假设您正在调用 generateFileNameForKeyValuemap里面功能。替换 map如果该假设错误,则具有任何功能。创建一个集合(不管是什么类型,只要它能做我描述的),你存储生成的文件名。每次生成文件名时,您都可以检查它是否存在于集合中并增加适当的计数器。 我可以在 generate... 中看到这样做的吸引力函数以避免重复数据,所以我(不经意间)可能会创建附加函数(上面指定)。

我希望这有助于阐明我的建议。

如果您对这篇文章有任何评论/问题,为了保持沟通顺畅(并通知我),请使用向这篇文章添加评论而不是添加答案。

关于Hadoop 计数器 : how to access the Reporter object outside map() and reduce(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4928452/

有关Hadoop 计数器 : how to access the Reporter object outside map() and reduce()的更多相关文章

  1. ruby-on-rails - Ruby on Rails 计数器缓存错误 - 2

    尝试在我的RoR应用程序中实现计数器缓存列时出现错误Unknownkey(s):counter_cache。我在这个问题中实现了模型关联:Modelassociationquestion这是我的迁移:classAddVideoVotesCountToVideos0Video.reset_column_informationVideo.find(:all).eachdo|p|p.update_attributes:videos_votes_count,p.video_votes.lengthendenddefself.downremove_column:videos,:video_vot

  2. ruby - 使用多个数组创建计数 - 2

    我正在尝试按0-9和a-z的顺序创建数字和字母列表。我有一组值value_array=['0','1','2','3','4','5','6','7','8','9','a','b','光盘','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','','u','v','w','x','y','z']和一个组合列表的数组,按顺序,这些数字可以产生x个字符,比方说三个list_array=[]和一个当前字母和数字组合的数组(在将它插入列表数组之前我会把它变成一个字符串,]current_combo['0','0','0']

  3. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  4. Ruby 计数数组对象,如果对象包含值 - 2

    我有一个数组:array=['Footballs','Baseball','football','Soccer']而且我需要计算看到Football或Baseball的次数,无论大小写和复数形式如何。这是我尝试做的,但没有成功:array.count{|x|x.downcase.include?'football'||x.downcase.include?'baseball'}编写这段代码的正确或更好的方法是什么?我正在寻找3作为答案。 最佳答案 我会将count与一个block结合使用,该block根据与您正在寻找的约束相匹配的正

  5. ruby - AWS 上远程机器上的进程计数 - 2

    我正在为在AmazonEC2实例上运行的应用程序设计一个AutoScaling系统。应用程序从SQS读取消息并对其进行处理。AutoScaling系统将监控两件事:SQS中的消息数量,所有EC2机器上运行的进程总数。例如,如果SQS中的消息数量超过3000,我希望系统自动缩放,创建一个新的EC2实例,在其上部署代码,当消息数量低于2000时,我希望系统终止EC2实例.我正在用Ruby和Capistrano做这件事。我的问题是:我无法找到一种方法来确定在所有EC2机器上运行的进程数并将该数字保存在变量中。你能帮帮我吗? 最佳答案 您可

  6. ruby-on-rails - FactoryGirl工厂特征内的序列不使用主序列计数器 - 2

    我有以下工厂:FactoryGirl.definedofactory:foodosequence(:name){|n|"Foo#{n}"}trait:ydosequence(:name){|n|"Fooy#{n}"}endendend如果我跑create:foocreate:foocreate:foo,:y我得到Foo1,Foo2,Fooy1。但我想要Foo1,Foo2,Fooy3。我怎样才能做到这一点? 最佳答案 经过smile2day'sanswer的一些提示后和thisanswer,我得出以下解决方案:FactoryGirl.

  7. ruby - 续集:如何使用分组和计数 - 2

    简单地说,我如何使用Sequel执行此查询?selecta.id,count(t.id)fromalbumsarightjointrackstont.album_id=a.idgroupbya.id 最佳答案 DB[:albums___a].right_join(:tracks___t,:album_id=>:id).select_group(:a__id).select_more{count(:t__id)} 关于ruby-续集:如何使用分组和计数,我们在StackOverflow上找

  8. ruby-on-rails - RSpec 检查数组的计数 - 2

    我正在测试我的ControllerAction以供练习。在我的Controller中,我只想从我的数据库中按名称获取所有不同的产品:defshop@products=Product.select('distincton(name)*').sort_by&:orderend我已经手动检查过了,它工作正常。现在我正在使用我的RSpec设置我的测试,我想测试@products是一个大于0的数组:RSpec.describePagesController,type::controllerdodescribe'GET#shop'doit'shouldgetallproudcts'doget:sh

  9. 大数据之Hadoop数据仓库Hive - 2

    目录:一、简介二、HQL的执行流程三、索引四、索引案例五、Hive常用DDL操作六、Hive常用DML操作七、查询结果插入到表八、更新和删除操作九、查询结果写出到文件系统十、HiveCLI和Beeline命令行的基本使用十一、Hive配置一、简介Hive是一个构建在Hadoop之上的数据仓库,它可以将结构化的数据文件映射成表,并提供类SQL查询功能,用于查询的SQL语句会被转化为MapReduce作业,然后提交到Hadoop上运行。特点:简单、容易上手(提供了类似sql的查询语言hql),使得精通sql但是不了解Java编程的人也能很好地进行大数据分析;灵活性高,可以自定义用户函数(UDF)和

  10. arrays - ruby 中的最佳排列计数算法 - 2

    我正在尝试计算由二进制形式的1和0的P数表示的数字的数量。如果P=2,则表示的数字为0011、1100、0110、0101、1001、1010,所以计数为6。我试过:[0,0,1,1].permutation.to_a.uniq但这不是大数的最佳解决方案(P可以什么可能是最好的排列技术,或者我们是否有任何直接的数学来做到这一点? 最佳答案 Numberofpermutationcanbecalculatedusingfactorial.a=[0,0,1,1](1..a.size).inject(:*)#=>4!=>24要计算重复项,

随机推荐