Hadoop生成HFile直接入庫HBase心得

2021-08-27 15:52:40 字數 2651 閱讀 8729

hbase自帶了importtsv類,可以直接把tsv格式(官方教材顯示,是\t分割各個欄位的文字格式)生成hfile,並且使用另外乙個類org.apache.hadoop.hbase.mapreduce.loadincrementalhfiles直接把hfile移動到hbase對應的hdfs目錄。

ps:網上看到乙個xd說,直接生成hfile並入庫hbase效率不如先生成hfile,再通過loadincrementalhfiles移動檔案到hbase目錄高,這點沒有驗證,我的做法也是先生成,再move。

官方教材在此:

但importtsv功能對我來說不適合,例如檔案格式為:

topsid uid roler_num typ time

10 111111 255 0 1386553377000

importtsv匯入的命令為:

bin/hbase org.apache.hadoop.hbase.mapreduce.importtsv -dimporttsv.columns=hbase_row_key,kq:topsid,kq:uid,kq:roler_num,kq:type -dimporttsv.bulk.output=hdfs://storefile-outputdir

它生成的**式為:

row : 10

cf : kq

qualifier: topsid

value: 10

.....

而我要求的格式是:

row : 10-111111-255

cf : kq

qualifier: 0

value: 1

所以還是自己寫mr處理資料方便。

job:

生成的hfile檔案在hdfs的/output目錄下,已經根據cf名稱建好檔案目錄:

hdfs://namenode/output/kq/601c5029fb264dc8869a635043c24560

其中:

hfileoutputformat.configureincrementalload(job,table);

根據其原始碼知道,會自動為job設定好以下引數:

public static void configureincrementalload(job job, htable table)

throws ioexception else if (put.class.equals(job.getmapoutputvalueclass())) else if (text.class.equals(job.getmapoutputvalueclass())) else

conf.setstrings("io.serializations", conf.get("io.serializations"),

mutationserialization.class.getname(), resultserialization.class.getname(),

keyvalueserialization.class.getname());

// use table's region boundaries for top split points.

log.info("looking up current regions for table " + bytes.tostring(table.gettablename()));

liststartkeys = getregionstartkeys(table);

log.info("configuring " + startkeys.size() + " reduce partitions " +

"to match current region count");

job.setnumreducetasks(startkeys.size());

configurepartitioner(job, startkeys);

// set compression algorithms based on column families

configurecompression(table, conf);

configurebloomtype(table, conf);

configureblocksize(table, conf);

tablemapreduceutil.adddependencyjars(job);

tablemapreduceutil.initcredentials(job);

log.info("incremental table " + bytes.tostring(table.gettablename()) + " output configured.");

}

hfileoutputformat只支援寫單個column family,如果有多個cf,則需要寫多個job來實現了。

hadoop集群直接資料拷貝

需求 兩個hadoop集群直接進行資料的拷貝。思路 基於org.apache.hadoop.tools.distcp,hadoop的命令列distcp就是才操作的封裝 實現 版本相同的做法 hadoop distcp user hadoop text user hadoop text 為hadoop...

使用Ant編譯生成Hadoop的Eclipse外掛程式

align center b 使用ant編譯生成hadoop的eclipse外掛程式 b align 由於hadoop的外掛程式與eclipse的版本具有一定的關聯性,所以在後來的hadoop的安裝檔案中就沒有編譯完成的外掛程式可以使用,而是帶有外掛程式的原始碼 僅非可執行安裝檔案 需要我們手動的去...

Hadoop生成調優測試點

1.hdfs 核心引數 namenode記憶體生成配置 namenode心跳併發配置 開啟 站配置 2.hdfs集群壓測 測試hdfs寫效能 向 hdfs 集群寫 10 個 128m 的檔案 測試hdfs讀效能 3.hdfs多目錄 namenode多目錄配置 datanode多目錄配置 集群資料均衡...