最佳的復(fù)制一個(gè)partitioned表的步驟:
- 創(chuàng)建新的目標(biāo),跟舊表一樣的schema. 如:
create table new_xx like xx; - 使用 hadoop fs -cp 把舊表所有的分區(qū)文件,拷貝到目標(biāo)表的文件夾。
- 運(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)題:
- 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'='\\');
- 文本文件中,對(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 使用心得
- 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"