1. impala(官網)
- 實時交互SQL大數據查詢工具
- 它提供SQL語義,能查詢存儲在Hadoop的HDFS和HBase中的PB級大數據。
- Impala的最大特點也是最大賣點就是它的快速。
- Impala完全拋棄了Hive+MapReduce這個不太適合做SQL查詢的緩慢范式
- 通過使用與商用並行關系數據庫中類似的分布式查詢引擎,可以直接從HDFS或HBase中用SELECT、JOIN和統計函數查詢數據,從而大大降低了延遲
2. Hive 與 impala
- Impala與Hive都是構建在Hadoop之上的數據查詢工具各有不同的側重適應面
- 但從客戶端使用來看Impala與Hive有很多的共同之處,如數據表元數據、ODBC/JDBC驅動、SQL語法、靈活的文件格式、存儲資源池、用戶界面(Hue Beeswax)等。
- Hive適合於長時間的批處理查詢分析,而Impala適合於實時交互式SQL查詢
可以先使用hive進行數據轉換處理,之后使用Impala在Hive處理后的結果數據集上進行快速的數據分析。
3. impala 和hive 語法和數據基本相通
1)invalidate metadata;
可以把hive元數據(數據)刷新同步過來
3)impala的jdbc接口
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class UpdateMeta { static String JDBC_DRIVER = "com.cloudera.impala.jdbc41.Driver"; static String CONNECTION_URL = "jdbc:impala://192.168.0.22:21050/db_1"; ### jdbc:impala://域名/數據庫 public static void main(String[] args) { Connection con = null; ResultSet rs = null; PreparedStatement ps = null; try { Class.forName(JDBC_DRIVER); con = DriverManager.getConnection(CONNECTION_URL); ps = con.prepareStatement("select max(dtime),count(dtime) from achi"); rs = ps.executeQuery(); while (rs.next()) { System.out.println(rs.getString(1) + '\t' + rs.getLong(2)); } } catch (Exception e) { e.printStackTrace(); } finally { //關閉rs、ps和con } } }
4 CDH
hadoop是一個開源項目,所以很多公司在這個基礎進行商業化,Cloudera對hadoop做了相應的改變
Cloudera公司的發行版,我們將該版本稱為CDH(Cloudera Distribution Hadoop)
5. kudu
- 列式存儲引擎
- 更多詳情參考
6. parquet 表
1)面向分析型業務的列式存儲格式;既可以支持關系型數據,也可以支持嵌套的數據類型
2)列式存儲的優點
- 可以跳過不符合條件的數據,只讀取需要的數據,降低IO數據量。
- 壓縮編碼 可以降低磁盤存儲空間。由於同一列的數據類型是一樣的,可以使用更高效的壓縮編碼(例如Run Length Encoding和Delta Encoding)進一步節約存儲空間。
- 只讀取需要的列,支持向量運算,能夠獲取更好的掃描性能。
3)parquet表的insert之前要設置 set hive.merge.mapfiles=false;
如果它的輸入包含不止一個mapreduce,比如join/group by/distinct,要建一個RCF的中轉表,然后再select into
6. hive的三種常用存儲格式
Hive的三種文件格式:TEXTFILE、SEQUENCEFILE、RCFILE
- TEXTFILE和SEQUENCEFILE的存儲格式都是基於行存儲的
- RCFILE是基於行列混合的思想,先按行把數據划分成N個row group,在row group中對每個列分別進行存儲。
- 詳細查看