草庐IT

MAPREDUCE

全部标签

hadoop - 在 hadoop reducer 中加载 native 库?

我有一个native库,我需要为我的reduce方法加载,我将它添加到分布式缓存中,但是当我在我的map方法中调用System.loadLibrary(mylib.so)时,我得到一个错误和失败的map任务:Error:nomylib.soinjava.library.path即使我将它添加到分布式缓存中。我错过了一步吗?在我的工作配置中,我调用:DistributedCache.addCacheFile(uri,job.getConfiguration());其中uri是hadoop文件系统上mylib.so的路径。这个本地库依赖于许多其他库,它们都存在于hadoopfs上我的/ha

Hadoop 作业使用相同的 reducer 输出到相同的文件

我遇到了一个有趣的情况,现在正在寻找如何有意识地去做。在我的本地单节点设置中,我从终端屏幕同时运行了2个作业。我的两个作业都使用相同的reducer,它们仅在map函数(聚合键-分组依据)上有所不同,两个作业的输出都写入了第一个作业的输出(虽然第二个作业确实创建了自己的文件夹,但它是空的).我正在做的是提供跨不同级别的汇总聚合,这种行为对我来说很吸引人,我可以在一个文件中使用来自两个不同级别的聚合输出(也经过完美排序)。我的问题是如何在真实的Hadoop集群中实现相同的目标,我们有多个数据节点,即我以编程方式启动多个作业,所有作业都访问相同的输入文件,以不同方式映射数据,但使用相同的r

Hadoop 自定义分区程序问题

我遇到了一个问题,自定义中间键没有出现在我期望的分区中,这是基于自定义分区程序的“getPartition”方法的输出。我可以在我的映射器日志文件中看到分区器生成了预期的分区号,但有时具有公共(public)分区号的键不会在同一个缩减器中结束。具有共同“getPartition”输出的键如何在不同的reducer中结束?在所有“getPartition”调用之后,我在映射器日志文件中注意到对自定义中间键“hashCode”和“compareTo”方法进行了多次调用。映射器只是在分区排序中进行,还是这可能是问题的一部分?我附上了自定义中间键和分区程序的代码。注意:我确切知道1/2的键将“

hadoop - 使用 Capacity Scheduler 在 Hadoop 集群中设置队列

我尝试设置3个队列。为此,我配置了CapacityScheduler.xml,如下所示。但在此之后,jobtracker正在关闭。我还将这些队列的名称添加到mapred-site.xml中。谁知道原因。entercodehere*mapred.capacity-scheduler.queue.BatchJobsQueue.capacity70mapred.capacity-scheduler.queue.BatchJobsQueue.supports-priorityfalsemapred.capacity-scheduler.queue.BatchJobsQueue.minimum-

hadoop - Oozie 未注册 "mapred.input.dir.recursive"属性

我在使用Oozie时遇到问题。它不会从Oozie工作流中注册mapred.input.dir.recursive属性。这给我带来了问题,因为我的mapred.input.dir包含文件以及包含更多文件的子目录。我广泛地搜索了解决方案,但没有成功找到。有什么想法、意见、建议吗? 最佳答案 mapred.input.dir.recursive已弃用。相反,使用mapreduce.input.fileinputformat.input.dir.recursive 关于hadoop-Oozie未

hadoop - reducer 阶段根本没有启动。它总是 'reducer=0%'

我一直在等待reducer阶段开始,但它没有开始。我试过格式化名称节点,但仍然是同样的问题。无论reducer必须运行在哪里,我都会遇到这个问题。任何人都可以在这方面帮助我。hive>LOADDATALOCALINPATH'/home/training/Desktop/student_performs_CSV.csv'OVERWRITEINTOTABLEstud_marks;Copyingdatafromfile:/home/training/Desktop/student_performs_CSV.csvCopyingfile:file:/home/training/Desktop/

hadoop - 在 FOREACH 中计算 SUM

假设我有以下内容DATA=foreachINPUT{//..generategroup,count(name)astotal;}我最终会得到一个键按名称分组的关系('mike','someprop',10)('mike','otherprop',3)('doug','xprop',5)...我想得到每个名字的前10名的总和:ALIAS=groupDATAbyname;RESULT=foreachALIAS{SORTED=ORDERDATAbytotaldesc;TOP10=LIMITSORTED10;//doesn'twork!can'thaveGROUPinsideFOREACHAG

hadoop - 在不同的数据库列集上工作的映射器任务

我们有一个场景,我们希望单个Hadoop作业创建/管理多个映射器任务,其中每个映射器任务将查询关系数据库表中的列子集。我们研究了DataDrivenDBInputFormat,但这似乎只是为了促进分区,其中每个映射器任务可以查询关系数据库表中的行子集。感谢这方面的任何建议。谢谢。 最佳答案 我建议您编写一个映射器来读取两组列的并集。您可以在同一个映射器中执行多个映射器任务,或者只是将数据转储到一个顺序文件中,多个后续映射器仅使用该文件中所需的内容。这取决于两组映射器输出之间的相关程度,以及它们在流程后期输入到同一hadoop步骤的速

java - .pig 脚本与 java 嵌入式 pig : Which one is the fastest?

我的项目有一个ASCII输入文件,我使用pig脚本进行映射缩减。在此脚本中,我使用子字符串获取指定的字符间隔。我想问一下如果我用java取char间隔然后将jar文件嵌入到另一个pig脚本中减少我的数据,我的程序运行得更快还是不快? 最佳答案 这完全取决于您如何在map方法中实现char间隔拆分。如果您知道您的数据,则可以优化子字符串。检查这个线程:charAt()orsubstring?Whichisfaster?此外,一般来说,将jar添加到hadoop集群会增加一些文件传输和设置内部内容(类加载器、解包等)的开销,但在这种情况

hadoop - 用于单行和多行日志的自定义 RecordReader

我正在尝试创建一个MR作业,它将更改通过Flume加载到HDFS中的日志文件的格式。我正在尝试将日志转换为一种格式,其中字段由“:::”分隔。例如date/timestamp:::log-level:::rest-of-log我遇到的问题是有些日志是单行的,有些是多行的,我需要在日志的其余字段中保持多行日志的完整性。我已经编写了一个自定义的InputFormat和RecordReader来尝试执行此操作(基本上只是修改了NLineRecordReader以追加行,直到它到达日期戳,而不是附加固定数量的行)。我用来格式化日志的MR作业似乎工作正常,但RecordReader似乎无法正常工