Hive 常見問題與技巧【Updating】

1Q: 是否有像相似於phpmyadmin同樣的hive查詢客戶端,能以界面的方式查詢hive語句和導出數據 php

A: 有的,客戶端的話可使用squirrel來鏈接hive,squirrel是一個通用的數據庫查詢客戶端,還有有一個開源項目phphiveadmin也不錯, html

web方式訪問hive,這裏也有一個hive web client(https://github.com/lalaguozhe/hiveweb-1) java

2Q: 執行語句時候,可否控制reducer的個數 git

A: 能夠在執行hive語句以前先 set mapred.reduce.tasks=<number> github

3Q: 是否可能在輸出的時候在結果第一行打印列名 web

A: 能夠在執行hive語句以前先 set hive.cli.print.header=true; sql

4Q: Hive是否支持跨數據庫查詢,好比database arch的table1和database algo的table2 進行join 數據庫

A: 能夠,只要有用戶有這兩張表的select權限便可,用戶須要用「database.table」的方式來指定數據庫下的表 apache

5Q: Hive是否有內置的函數,能夠對輸出的數據進行處理 json

A: Hive提供了豐富的內置函數,參見https://cwiki.apache.org/Hive/languagemanual-udf.html

用戶也能夠本身實現自定義的UDF方法來知足更復雜的查詢需求

6Q: Hive支持exist in麼?

A: 不支持,可是能夠經過改寫語句達到相同的效果,好比對於查詢語句:

SELECT a.key, a.value FROM a WHERE a.key in (SELECT b.key FROM B);

能夠改寫成:

SELECT a.key, a.val

FROM a LEFT SEMI JOIN b on (a.key = b.key)

PS:上述答案過期了,目前 hive 已經支持 in 查詢了。

http://blog.csdn.net/yfkiss/article/details/8073608

7Q:Hive是否支持本地執行模式

A:Hive支持本地執行模式,當數據量小的時候,本地執行比提交到集羣上執行效率提高很大

set hive.exec.mode.local.auto=true(默認false)

當一個job知足以下條件才能真正使用本地模式:

1.job的輸入數據大小必須小於參數hive.exec.mode.local.auto.inputbytes.max(默認值128MB)

2.job的map處理的文件數大於參數hive.exec.mode.local.auto.input.files.max(默認值4)

3.job的reduce數必須爲0或者1,無論是用戶設置的仍是系統推測出來的

用參數hive.mapred.local.mem(默認0)來設置local mode下mapper和reducer task jvm heap size

8Q: 關鍵詞UNION ALL的用法

A:The number and names of columns returned by each select_statement has to be the same. Otherwise, a schema error is thrown.

UNION ALL兩邊的字段名,和字段數都必須一致,能夠用as xxx來統一字段名,而且目前UNION ALL只能做爲子查詢。

9Q:hive left outer join的問題:where 與 on 條件的區別

http://blog.csdn.net/lalaguozhe/article/details/9498947

10Q:其它技巧請見:

http://my.oschina.net/leejun2005/blog/121945

十一、對於 jar 包調用失敗 NullPointerException 的問題

FAILED: Error in metadata: java.lang.NullPointerException
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

你可能須要再 hive-site.xml 中添加 jar 的路徑:

具體參考:http://abloz.com/2013/03/28/the-hive-execute-statements-times-nullpointerexception.html

<property>
	<name>
		hive.aux.jars.path
	</name>
	<value>
		file:///home/june/soft/hive-0.9.0-bin/lib/hive-json-serde.jar
	</value>
</property>

十二、經過僞列定位出錯的原始文件和行號:http://blog.csdn.net/lalaguozhe/article/details/11467593

一般用戶在HIVE中用SELECT語句出來結果,沒法肯定結果是來自哪一個文件或者具體位置信息,HIVE中考慮到了這點,在Virtual Column虛列中能夠指定三個靜態列:
1.  INPUT__FILE__NAME        map任務讀入File的全路徑
2.  BLOCK__OFFSET__INSIDE__FILE       若是是RCFile或者是SequenceFile塊壓縮格式文件則顯示Block file Offset,也就是當前快在文件的第一個字偏移量,若是是TextFile,顯示當前行的第一個字節在文件中的偏移量
3.  ROW__OFFSET__INSIDE__BLOCK        RCFile和SequenceFile顯示row number, textfile顯示爲0
注:若要顯示ROW__OFFSET__INSIDE__BLOCK ,必須設置set hive.exec.rowoffset=true;

select hostname, INPUT__FILE__NAME,BLOCK__OFFSET__INSIDE__FILE,ROW__OFFSET__INSIDE__BLOCK from t_NginxLog where dt='2013-09-01' limit 10;





REF:

Hive 常見問題(持續更新。。。)

http://blog.csdn.net/lalaguozhe/article/details/9081971

hive 0.10 0.11新增特性綜述

http://blog.csdn.net/lalaguozhe/article/details/11730817

hive0.11升級碰到的坑

http://blog.csdn.net/lalaguozhe/article/details/17504761

相關文章
相關標籤/搜索