15分钟了解Apache Phoenix(HBase的开源SQL引擎)
翻譯自官方文檔(http://phoenix.apache.org/Phoenix-in-15-minutes-or-less.html),翻譯的不好,望輕拍磚!
什么是Phoenix?
Phoenix是一個HBase的開源SQL引擎。你可以使用標準的JDBC API代替HBase客戶端API來創建表,插入數據,查詢你的HBase數據。
不要在我的程序和HBase之間增加額外的層,它只會拖慢速度的?
事實上,不會。Phoenix通過以下方式實現了比你自己手寫的方式相同或者可能是更好的性能(更不用說可以少寫了很多代碼):
* 編譯你的SQL查詢為原生HBase的scan語句
* 檢測scan語句最佳的開始和結束的key
* 精心編排你的scan語句讓他們并行執行
* 讓計算去接近數據通過
* 推送你的WHERE子句的謂詞到服務端過濾器處理
* 執行聚合查詢通過服務端鉤子(稱為協同處理器)
除此之外,我們還做了一些有趣的增強功能來更多地優化性能:
* 實現了二級索引來提升非主鍵字段查詢的性能
* 統計相關數據來提高并行化水平,并幫助選擇最佳優化方案
* 跳過掃描過濾器來優化IN,LIKE,OR查詢
* 優化主鍵的鹽值來均勻分布寫壓力
好吧,它很快。但是為什么要用SQL?這已經是70年代的東西了。
一種觀點是:給大伙兒一些他們已經熟悉的東西吧。什么是更好的方式去激勵他們使用HBase呢?最好的方式就是使用JDBC和SQL,原因有以下幾點:
* 降低用戶需要寫的代碼的數量
* 讓性能優化對用戶透明
* 方便利用和整合大量的已經存在的工具
但是怎樣才能讓SQL支持我最喜愛的HBase的某些技術
不要把這(使用Phoenix后)當作是你見HBase的最后一次好吧?SQL只是一種表達你想實現的功能的方式,你不必去思考怎樣用SQL去實現功能(原文是SQL is just a way of expressing what you want to get not how you want to get it)。針對目前已經存在或者正在做的Phoenix功能,看看能否支持你喜歡的HBase的特殊用法。你有自己的想法?我們很樂意聽到你的想法:把問題寫下來給我們同時也可以加入我們的郵件列表。
說了這么多,我只是想知道如何開始?
非常棒!只要跟隨我們的安裝指南:
* 下載并解壓我們的安裝包
* 拷貝能夠與你的Hbase安裝兼容的phoenix的服務端jar包到每個集群節點的lib目錄
* 重啟你的集群節點
* 添加phoenix的客戶端jar包到你的HBase客戶端的classpath下
* 下載并設置SQuirrel作為你的SQL客戶端,這樣你就可以發起即時查詢的SQL語句來操作你的HBase集群
我不想要下載安裝其他東西了!
好吧,有道理 - 你可以創建你自己的SQL腳本并使用我們的命令行工具來執行他們(來代替前面說的下載安裝軟件的方案)。現在讓我們來看一個例子。
定位到你安裝Phoenix路徑的bin目錄來開始。
- 首先,讓我們來創建一個us_population.sql的文件,包含一個表的定義過程:
- 現在讓我們創建一個us_population.csv文件,包含一些要放到表里的數據:
- 最后,讓我們創建一個us_population_queries.sql文件,包含一個我們想在哪些數據上做的查詢。
- 在命令行終端上執行下面的命令
祝賀!你已經創建了你的第一個Phoenix表了,插入數據進去,并且執行了一個只有幾行數據的聚合查詢代碼,在15分鐘以內!
了不起 - 10行數據!還獲得了什么?
好吧,真是難對付的人。查看一下我們的bin/performance.py腳本,針對你提出的數據庫模式,去創建你想要的行數的數據,然后運行耗時的查詢。
為什么要叫Phoenix(鳳凰)呢?是不是之前有其他什么項目崩潰或者燒毀,然后這個是它的下一代版本?
很抱歉,但是我們沒有時間和空間了,所以我們下次再來回答這個問題。
總結
以上是生活随笔為你收集整理的15分钟了解Apache Phoenix(HBase的开源SQL引擎)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hive体系结构(一)架构与基本组成
- 下一篇: Hive体系结构(二)Hive的执行原理