5. Hadoop之旅——Hive使用篇(二)

最佳的復(fù)制一個(gè)partitioned表的步驟:

  1. 創(chuàng)建新的目標(biāo),跟舊表一樣的schema. 如:
    create table new_xx like xx;
  2. 使用 hadoop fs -cp 把舊表所有的分區(qū)文件,拷貝到目標(biāo)表的文件夾。
  3. 運(yùn)行 MSCK REPAIR TABLE new_xx.
    這樣就可以完成一個(gè)partition表的復(fù)制

應(yīng)對(duì)Load Data時(shí),分隔符在field中出現(xiàn)

對(duì)于TextFormat的hive表,當(dāng)文本格式的數(shù)據(jù),每列的分隔符是 逗號(hào)‘,',而其中一列中的數(shù)據(jù)也包含逗號(hào)的時(shí)候,直接load會(huì)造成列的分割混亂。 這個(gè)時(shí)候, 可以使用escaped來(lái)解決這個(gè)問(wèn)題:

  1. create table 中指定 ESCAPED BY, 指定轉(zhuǎn)義符,如下使用''作為轉(zhuǎn)義符
create teable 
……
ROW FORMAT DELIMITED FIELDS TERMINATED BY "," ESCAPED BY '\\';  
……

對(duì)于已經(jīng)存在的表,可以增加escape.delim

ALTER TABLE XXXX   
set serde 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES ('escape.delim'='\\');
  1. 文本文件中,對(duì)列中含有','的, 替換為 ',',使用轉(zhuǎn)義。

hive local 模式

在hive shell中。 當(dāng)用limit 1查看數(shù)據(jù)概況。 或者操作的數(shù)據(jù)量小,不需要在多個(gè)結(jié)點(diǎn)之間shuffle的時(shí)候。可以使用hive 的local模式,不用申請(qǐng)集群資源,反而能更快得到結(jié)果。
set hive.exec.mode.local.auto = true; 會(huì)自動(dòng)根據(jù)查詢(xún),判斷是否采用local模式

hive beeline 使用心得

  1. beeline 提交hive任務(wù),產(chǎn)生OOM異常, java.lang.OutOfMemoryError: GC overhead limit exceeded:
    beeline 任務(wù)會(huì)啟動(dòng)一個(gè)java進(jìn)程,設(shè)置了-Xmx,當(dāng)返回行數(shù)過(guò)多,內(nèi)存使用太高,會(huì)頻繁的GC,從而出現(xiàn)這個(gè)錯(cuò)誤。
    *改進(jìn)辦法: 增加beeline啟動(dòng)參數(shù)--incremental=true, 增量模式返回結(jié)果。
    例子:
/home/work/tars/hive-0.13.1-cdh5.2.0-all/bin/beeline --incremental=true -u "jdbc:hive2://XXX" --outputformat=tsv -e "set mapreduce.job.queuename=default" -e "${SQL}" > "/data/output_information"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容