我试着用mapreduce编写一个简单的字数计算程序。我的mapreduce程序只将输出写入文件。但我不希望我的输出被写入文件。我想收集这些信息或输出(如java收集),以便在程序区域的其余部分使用。
例如,如果我在hive上提交任何查询,它将返回一个结果集对象,但在内部,我的查询将转换为mapreduce程序,并在完成作业后返回结果集对象。与其他mapreduce程序不同,它不会将结果写入文件系统。
那么,我该如何收集输出,或者如何在reducer或mapper中准备自己的对象,并在java程序的其他区域中收集该对象呢?我不希望输出被写入文件。
4条答案
按热度按时间wvyml7n51#
mapreduce作业往往消耗/产生大量数据。它们也往往是独立的应用程序,而不是某些大型工作流的一部分。这两种说法在本案中似乎都不成立。可以将输出格式设置为nulloutputformat以防止创建任何文件。然后,您可以将结果作为字符串添加到job conf中,这将使任何可以读取conf的人都可以使用这些结果。
vql8enpb2#
据我了解,您的问题是,您正在使用HiveforMapReduce来处理hdfs数据,并且希望最终使用HiveOutput,而不是将输出保存到hdfs。您可以在配置单元中使用以下命令将o/p写入hdfs或本地文件系统:
以下命令将表输出到本地目录insert overwrite local directory“”selectfrom table\ u name;
下面的命令将表输出到hdfs文件insert overwrite目录'/tmp/hdfs\u out'选择一个from table\u name;
稍后,如果您想使用这个o/p,请使用hdfs中的另一个javamro/p。
为了实现这一点,您需要先将配置单元输出写入hdfs,然后使用下面的解决方案来处理两个不同的o/p。
解决方案1:在java语言中使用map-side或reduce-side连接。
[或]
soultion2:使用jobconfig对象或hadoop分布式缓存的并行技术。
5tmbdcev3#
有许多方法可以处理hadoop m-r框架的输出。用户描述m-r作业的主要接口是jobconf类
以及
方法,其中可以/可以描述不同的结果集合,例如db(hbase)存储。需要记住的是,m-r作业处理大量的数据,除非您有一个良好的分布式对象体系结构,否则在java内存中将这些数据作为对象进行管理会很麻烦。
或者你可以提供你的实际需求。
希望这有帮助,帕特
cl25kdpy4#
mapreduce任务通常从hdfs或hbase获取文件。
首先获取hdfs文件系统中目录的绝对路径
现在,在map reduce任务的main方法或批处理中,使用job类的setoutputformat()设置输出格式
文本输出示例为
现在,在运行hadoop任务时,第二个参数是输出路径,即hdfs的子目录的路径。
现在由于文件在hdfs中,我们不能使用普通的unix命令访问它,首先将文件从hdfs转换为ext3/4文件格式,然后使用nano/vi读取它
dfs-目录{path\u to\u outfile\u inhdfs}