java使用impala存放多条sql_Impala基于内存的SQL引擎的详细介绍
數據存儲
使用相同的存儲數據池都支持把數據存儲于HDFS, HBase。
元數據:
兩者使用相同的元數據
SQL解釋處理:
比較相似都是通過詞法分析生成執行計劃。
執行計劃:
Hive: 依賴于MapReduce執行框架,執行計劃分成 map->shuffle->reduce->map->shuffle->reduce…的模型。如果一個Query會 被編譯成多輪MapReduce,則會有更多的寫中間結果。由于MapReduce執行框架本身的特點,過多的中間過程會增加整個Query的執行時間。
Impala: 把執行計劃表現為一棵完整的執行計劃樹,可以更自然地分發執行計劃到各個Impalad執行查詢,而不用像Hive那樣把它組合成管道型的 map->reduce模式,以此保證Impala有更好的并發性和避免不必要的中間sort與shuffle。
數據流:
Hive: 采用推的方式,每一個計算節點計算完成后將數據主動推給后續節點。
Impala: 采用拉的方式,后續節點通過getNext主動向前面節點要數據,以此方式數據可以流式的返回給客戶端,且只要有1條數據被處理完,就可以立即展現出來,而不用等到全部處理完成,更符合SQL交互式查詢使用。
內存使用:
Hive: 在執行過程中如果內存放不下所有數據,則會使用外存,以保證Query能順序執行完。每一輪MapReduce結束,中間結果也會寫入HDFS中,同樣由于MapReduce執行架構的特性,shuffle過程也會有寫本地磁盤的操作。
Impala: 在遇到內存放不下數據時,當前版本1.0.1是直接返回錯誤,而不會利用外存,以后版本應該會進行改進。這使用得Impala目前處理Query會受到一 定的限制,最好還是與Hive配合使用。Impala在多個階段之間利用網絡傳輸數據,在執行過程不會有寫磁盤的操作(insert除外)
調度
Hive任務的調度依賴于Hadoop的調度策略。
Impala的調度由自己完成,目前的調度算法會盡量滿足數據的局部性,即掃描數據的進程應盡量靠近數據本身所在的物理機器。但目前調度暫時還沒有考慮負載均衡的問題。從Cloudera的資料看,Impala程序的瓶頸是網絡IO,目前Impala中已經存在對Impalad機器網絡吞吐進行統計,但目前還沒有利用統計結果進行調度。
容錯
Hive任務依賴于Hadoop框架的容錯能力,可以做到很好的failover
Impala中不存在任何容錯邏輯,如果執行過程中發生故障,則直接返回錯誤。當一個Impalad失敗時,在這個Impalad上正在運行的所有query都將失敗。但由于Impalad是對等的,用戶可以向其他Impalad提交query,不影響服務。當StateStore失敗時,也不會影響服務,但由于Impalad已經不能再更新集群狀態,如果此時有其他Impalad失敗,則無法及時發現。這樣調度時,如果謂一個已經失效的Impalad調度了一個任務,則整個query無法執行。
三、Impala Shell
1、Impala 外部shell
不進入Impala內部,直接執行的ImpalaShell
例如:
$impala-shell -h -- 通過外部Shell查看Impala幫助
$impala-shell -p select count(*) from t_stu -- 顯示一個SQL語句的執行計劃
下面是Impala的外部Shell的一些參數:
-h (--help) 幫助
-v (--version) 查詢版本信息
-V (--verbose) 啟用詳細輸出
--quiet 關閉詳細輸出
-p 顯示執行計劃
-i hostname (--impalad=hostname) 指定連接主機格式hostname:port 默認端口21000, impalad shell 默認連接本機impalad
- r(--refresh_after_connect)刷新所有元數據
-q query (--query=query) 從命令行執行查詢,不進入impala-shell
-d default_db (--database=default_db) 指定數據庫
-B(--delimited)去格式化輸出
--output_delimiter=character 指定分隔符
--print_header 打印列名
-f query_file(--query_file=query_file)執行查詢文件,以分號分隔
-o filename (--output_file filename) 結果輸出到指定文件
-c 查詢執行失敗時繼續執行
-k (--kerberos) 使用kerberos安全加密方式運行impala-shell
-l 啟用LDAP認證
-u 啟用LDAP時,指定用戶名
2、Impala內部Shell
#impala shell進入
#普通連接
impala-shell
#impala shell命令
#查看impala版本
select version;
#特殊數據庫
#default,建立的沒有指定任何數據庫的新表
#_impala_builtins,用于保存所有內置函數的系統數據庫
#庫操作
#創建
create database tpc;
#展示
show databases;
#展示庫名中含有指定(格式)字符串的庫展示
#進入
use tpc;
#當前所在庫
select current_database();
#表操作
#展示(默認default庫的表)
show tables;
#指定庫的表展示
show tables in tpc;
#展示指定庫中表名中含有指定字符串的表展示
show tables in tpc like 'customer*';
#表結構
describe city; 或 desc city;
#select insert create alter
#表導到另一個庫中(tcp:city->d1:city)
alter table city rename to d1.city
#列是否包含null值
select count(*) from city where c_email_address is null
#hive中 create、drop、alter,切換到impala-shell中需要如下操作
invalidate metadata
#hive中 load、insert、change表中數據(直接hdfs命令操作),切換到impala-shell中需要如下操作
refresh table_name
3、參考文章
總結
以上是生活随笔為你收集整理的java使用impala存放多条sql_Impala基于内存的SQL引擎的详细介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中u怎么用_Java中inter
- 下一篇: “金涧测泉脉”下一句是什么