hadoop程式同時輸出到hdfs和hbase中

2021-08-20 02:12:52 字數 1479 閱讀 8911

感覺網上相關資訊較少,於是把自己使用的方法記錄一下

reducer要繼承自tablereducer,這樣才能在main函式中配置輸出的表

tablemapreduceutil.inittablereducerjob($(table), invertedindexreducer.class, job);
輸出使用multipleoutputs來做到多方向輸出,context可以不使用

main中新增multipleoutputs的輸出格式,並給予相應的名稱

multipleoutputs.addnamedoutput(job,"hdfs",textoutputformat.class,text.class,text.class);

multipleoutputs.addnamedoutput(job,"hbase", tableoutputformat.class,immutablebyteswritable.class,put.class);

reducer中要宣告乙個multipleoutputs

private multipleoutputs mos;
在setup中加入初始化,@suppresswarnings(「unchecked」)用來忽略相關warning

@override

@suppresswarnings("unchecked")

protected

void

setup(context context) throws ioexception, interruptedexception

在reduce函式中,在需要輸出的位置加上

//輸出資料到hbase

mos.write("hbase",new immutablebyteswritable(bytes.tobytes(last)),put);

//輸出詳細資訊到hdfs

mos.write("hdfs",new text(last), new text(str));

最後在cleanup函式中加入close,否則將出現不輸出的問題

public

void

cleanup(context context) throws ioexception, interruptedexception

在main函式中加入lazyoutputs可以防止hadoop自動生成空檔案

lazyoutputformat.setoutputformatclass(job,textoutputformat.class);

linux命令tee 將資訊同時輸出到螢幕和檔案

當程式輸出內容過多,容易導致終端顯示不全。可以通過將輸出內容寫入檔案的形式儲存執行的log。如果在linux下希望將程式或命令執行的資訊,在輸入到檔案的同時,也能夠顯示在螢幕上,可以使用tee這個命令。下圖是對這個命令的形象介紹 例 執行 python test.py 如果只希望執行資訊顯示在螢幕上...

python 資訊同時輸出到控制台與檔案

python程式設計中,往往需要將結果用print等輸出,如果希望輸出既可以顯示到ide的螢幕上,也能存到檔案中 如txt 中,該怎麼辦呢?可通過日誌logging模組輸出資訊到檔案或螢幕。但可能要設定log的level或輸出端,對於同時需要記錄debug error等資訊的較為合適,官方教程推薦學...

程式的輸出和輸出到標準錯誤中的輸出

今天編譯執行程式的時候,發現在程式中的斷點輸出 和 輸出到作業系統標準錯誤中的輸出是不一樣的!哇哇,哈哈,開心,又多了解了一點知識。上一段golang 的 package main import errors fmt os log func main set goos linux 後編譯位linux...