Hive 常见问题与技巧【Updating】
2019獨角獸企業重金招聘Python工程師標準>>>
1Q: 是否有像類似于phpmyadmin一樣的hive查詢客戶端,能以界面的方式查詢hive語句和導出數據
A: 有的,客戶端的話可以使用squirrel來連接hive,squirrel是一個通用的數據庫查詢客戶端,還有有一個開源項目phphiveadmin也不錯,
web方式訪問hive,這里也有一個hive web client(https://github.com/lalaguozhe/hiveweb-1)
2Q: 執行語句時候,能否控制reducer的個數
A: 可以在執行hive語句之前先?set mapred.reduce.tasks=<number>
3Q: 是否可能在輸出的時候在結果第一行打印列名
A: 可以在執行hive語句之前先?set hive.cli.print.header=true;
4Q: Hive是否支持跨數據庫查詢,比如database arch的table1和database algo的table2 進行join
A: 可以,只要有用戶有這兩張表的select權限即可,用戶需要用“database.table”的方式來指定數據庫下的表
5Q: Hive是否有內置的函數,可以對輸出的數據進行處理
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
11、對于 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>12、通過偽列定位出錯的原始文件和行號: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;
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
轉載于:https://my.oschina.net/leejun2005/blog/164249
總結
以上是生活随笔為你收集整理的Hive 常见问题与技巧【Updating】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: KVM 动态迁移
- 下一篇: Hibernate入门之关系篇:多对一和