2014-04-01 92 views
2

我試圖在mapreduce中編寫一個簡單的字數統計程序。我的mapreduce程序僅將輸出寫入文件。但我不希望我的輸出寫入文件。我想收集這些信息或輸出(如java收藏)以用於我的程序區域的其餘部分。如何收集mapreduce作業的輸出?

就像例如,如果我在配置單元上提交任何查詢,它將返回結果集對象,但在內部,我的查詢將轉換爲mapreduce程序,並且一旦完成作業就返回結果集對象。它不會像其他mapreduce程序那樣將結果寫入文件系統。

那麼我怎樣才能收集那個輸出,或者如何在reducer或mapper中準備我自己的對象,然後在java程序的其他區域收集那個對象呢?我不希望將輸出寫入文件中。

+0

聽起來你想使用Spark而不是Hadoop。 –

回答

1

有很多方法可以處理Hadoop M-R框架的輸出。爲用戶描述MR工作的主要界面是JobConf類 你會發現

getOutputFormat() 

setOutputFormat() 

方法(S),你會/可以描述不同的結果集,如DB (HBase)存儲。需要記住的是,M-R作業處理大量數據,除非您有良好的分佈式對象體系結構,否則在Java內存中作爲對象進行管理會非常麻煩。

Alternativley你可以提供你的實際需求。

希望這有助於 帕特

0

MapReduce作業往往會消耗/產生大量的數據。它們也傾向於是獨立的應用程序,而不是某些較大的工作流程的一部分。這兩種說法在這種情況下似乎都不成立。您可以將輸出格式設置爲NullOutputFormat以防止創建任何文件。然後,您可以將結果作爲字符串添加到您的作業conf中,這將使其可用於任何可以讀取conf的內容。

0

MapReduce任務通常從HDFS或HBase獲取文件。

首先採取HDFS文件系統中的目錄的絕對路徑現在

在你的map-reduce任務的主要方法或批次,招聘類的使用setOutputFormat()來設置輸出格式

文本樣品輸出爲

Configuration conf = new Configuration(); 
    Job job = new Job(conf, "app"); 
    job.setJarByClass(Application.class); // batch/main method's class name 
    job.setMapperClass(Mapper.class); 
    job.setReducerClass(Reducer.class); 
    job.setOutputKeyClass(Text.class); 
    job.setOutputValueClass(Text.class); 
    job.setMapOutputKeyClass(Text.class); 
    job.setMapOutputValueClass(Text.class); 
    job.setInputFormatClass(TextInputFormat.class); 
    job.setOutputFormatClass(TextOutputFormat.class); 
    FileInputFormat.addInputPath(job, new Path(args[0])); 
    FileOutputFormat.setOutputPath(job, new Path(args[1])); 

現在在運行hadoop任務時,第二個參數是輸出路徑,它是HDFS子目錄的路徑。

現在,因爲文件在HDFS我們使用正常的unix命令不能訪問它,首先從HDFS將該文件轉換爲ext3/4文件格式,然後使用納米/ VI

DFS -cat {path_to_outfile_inHDFS}

讀取它
0

根據我對您的問題的理解,您正在使用Hive for mapreduce來處理HDFS數據,並且您希望通過不將輸出保存到HDFS來使用Hive輸出。您可以使用HIVE中的以下命令將o/p寫入HDFS或本地文件系統:

以下命令將表輸出到本地目錄 INSERT OVERWRITE LOCAL DIRECTORY''SELECT * FROM table_name;

以下命令將表輸出到HDFS文件 INSERT OVERWRITE DIRECTORY'/ tmp/hdfs_out'SELECT a。* FROM table_name;

以後,如果你想與此O/P工作,在HDFS的其他Java MR O/P。

爲了實現這一點,你需要之前寫你的蜂巢輸出,HDFS與下面的解決方案去用兩種不同的O/P的工作。

解決方法1:使用地圖側或縮小側部連接的JAVA語言。

[OR]

Soultion2:通過使用Jobconfig對象或Hadoop分佈式高速緩存側技術側面。