目錄html
全部cloudera軟件下載地址java
http://archive.cloudera.com/cdh5/cdh/5/node
http://archive.cloudera.com/cdh5/mysql
impala是cloudera提供的一款高效率的sql查詢工具,提供實時的查詢效果,官方測試性能比hive快10到100倍,其sql查詢比sparkSQL還要更加快速,號稱是當前大數據領域最快的查詢sql工具,impala是參照谷歌的新三篇論文(Caffeine、Pregel、Dremel)當中的Dremel實現而來,其中舊三篇論文分別是(BigTable,GFS,MapReduce)分別對應咱們即將學的HBase和已經學過的HDFS以及MapReducelinux
impala是基於hive並使用內存進行計算,兼顧數據倉庫,具備實時,批處理,多併發等優勢sql
impala是基於hive的大數據分析查詢引擎,直接使用hive的元數據庫metadata,意味着impala元數據都存儲在hive的metastore當中,而且impala兼容hive的絕大多數sql語法。因此須要安裝impala的話,必須先安裝hive,保證hive安裝成功,而且還須要啓動hive的metastore服務shell
一、 impala比較快,很是快,特別快,由於全部的計算均可以放入內存當中進行完成,只要你內存足夠大數據庫
二、 擯棄了MR的計算,改用C++來實現,有針對性的硬件優化apache
三、 具備數據倉庫的特性,對hive的原有數據作數據分析vim
四、支持ODBC,jdbc遠程訪問
一、基於內存計算,對內存依賴性較大
二、改用C++編寫,意味着維護難度增大
三、基於hive,與hive共存亡,緊耦合
四、穩定性不如hive,不存在數據丟失的狀況
Impala的架構模塊:
查詢執行
impalad分爲frontend和backend兩個層次, frondend用java實現(經過JNI嵌入impalad), 負責查詢計劃生成, 而backend用C++實現, 負責查詢執行。
frontend生成查詢計劃分爲兩個階段:
(1)生成單機查詢計劃,單機執行計劃與關係數據庫執行計劃相同,所用查詢優化方法也相似。
(2)生成分佈式查詢計劃。 根據單機執行計劃, 生成真正可執行的分佈式執行計劃,下降數據移動, 儘可能把數據和計算放在一塊兒。
上圖是SQL查詢例子, 該SQL的目標是在三表join的基礎上算彙集, 並按照彙集列排序取topN。
impala的查詢優化器支持代價模型: 利用表和分區的cardinality,每列的distinct值個數等統計數據, impala可估算執行計劃代價, 並生成較優的執行計劃。 上圖左邊是frontend查詢優化器生成的單機查詢計劃, 與傳統關係數據庫不一樣, 單機查詢計劃不能直接執行, 必須轉換成如圖右半部分所示的分佈式查詢計劃。 該分佈式查詢計劃共分紅6個segment(圖中彩色無邊框圓角矩形), 每一個segment是能夠被單臺服務器獨立執行的計劃子樹。
impala支持兩種分佈式join方式, 表廣播和哈希重分佈:
表廣播方式保持一個表的數據不動, 將另外一個表廣播到全部相關節點(圖中t3);
哈希重分佈的原理是根據join字段哈希值從新分佈兩張表數據(譬如圖中t1和t2)。
分佈式計劃中的彙集函數分拆爲兩個階段執行。第一步針對本地數據進行分組聚合(Pre-AGG)以下降數據量, 並進行數據重分步, 第二步, 進一步彙總以前的彙集結果(mergeAgg)計算出最終結果。
與彙集函數相似, topN也是分爲兩個階段執行, (1)本地排序取topN,以下降數據量; (2) merge sort獲得最終topN結果。
Backend從frontend接收plan segment並執行, 執行性能很是關鍵,impala採起的查詢性能優化措施有向量執行。 一次getNext處理一批記錄, 多個操做符能夠作pipeline。LLVM編譯執行, CPU密集型查詢效率提高5倍以上。IO本地化。 利用HDFS short-circuit local read功能,實現本地文件讀取Parquet列存,相比其餘格式性能最高提高5倍。
須要提早安裝好hadoop,hive,這二個框架,而且hive須要在全部的impala安裝的節點上面都要有,由於impala須要引用hive的依賴包,hadoop的框架須要支持C程序訪問接口,查看下圖,若是有該路徑下有這麼些文件,就證實支持C接口 .
因爲impala沒有提供tar包供咱們進行安裝,只提供了rpm包,因此咱們在安裝impala的時候,須要使用rpm包來進行安裝,rpm包只有cloudera公司提供了,因此咱們去cloudera公司網站進行下載rpm包便可,可是另一個問題,impala的rpm包依賴很是多的其餘的rpm包,能夠一個個的將依賴找出來,也能夠將全部的rpm包下載下來,製做成咱們本地yum源來進行安裝。咱們這裏就選擇製做咱們本地的yum源來進行安裝
,因此首先咱們須要下載到全部的rpm包,下載地址以下
http://archive.cloudera.com/cdh5/repo-as-tarball/5.14.0/cdh5.14.0-centos6.tar.gz
下載好了以後,保留下,留做備用
因爲咱們下載的tar包很是大,大概5個G,解壓以後也最少須要5個G的空間,而咱們的虛擬機磁盤有限,不夠用了,因此咱們能夠爲咱們的虛擬機掛載一塊磁盤,專門用於存儲咱們的tar包
在咱們的虛擬機關機的狀態下,在VMware當中新增一塊磁盤
分區,格式化,掛載新磁盤
磁盤掛載
df -lh fdisk -l #開始分區 fdisk /dev/sdb #這個命令執行後依次輸 n p 1 回車 回車 w fdisk -l #格式化咱們的分區 mkfs -t ext4 -c /dev/sdb1 #格式化咱們的分區 mkdir /data02 #將咱們的分區掛載到/data02目錄下 mount -t ext4 /dev/sdb1 /data02 df -lh #將咱們的掛載磁盤設置開機啓動,避免開機以後掛載的磁盤就沒了 echo "/dev/sdb1 /data02 ext4 defaults 0 0" >> /etc/fstab
掛載完成以後,記得從新啓動node03機器上面的mysql服務,datanode服務,nodemanager服務,zookeeper服務
啓動mysql的服務命令:
/etc/init.d/mysqld start
將咱們5個G的壓縮文件上傳/data02(本身的目錄下)目錄下,並進行解壓
#將咱們5個G的壓縮文件上傳/data02(本身的目錄下)目錄下,並進行解壓 cd /data02/ tar -zxvf cdh5.14.0-centos6.tar.gz
鏡像源是centos當中下載相關軟件的地址,咱們能夠經過製做咱們本身的鏡像源指定咱們去哪裏下載impala的rpm包,這裏咱們使用httpd這個軟件來做爲服務端,啓動httpd的服務來做爲咱們鏡像源的下載地址
這裏咱們選用第三臺機器做爲鏡像源的服務端
node03機器上執行如下命令
#node03機器上執行如下命令 yum -y install httpd service httpd start cd /etc/yum.repos.d vim localimp.repo [localimp] name=localimp baseurl=http://node03/cdh5.14.0/ gpgcheck=0 enabled=1
建立apache httpd的讀取連接
ln -s /data02/cdh/5.14.0 /var/www/html/cdh5.14.0
頁面訪問本地yum源,出現這個界面表示本地yum源製做成功
node03/cdh5.14.0
將製做好的localimp配置文件發放到全部須要安裝impala的節點上去
#將製做好的localimp配置文件發放到全部須要安裝impala的節點上去 cd /etc/yum.repos.d/ scp localimp.repo node02:$PWD scp localimp.repo node01:$PWD
注意:若是須要使用httpd來代理rpm的倉庫,發佈成爲一個http的服務訪問
必定要禁用linux的selinux服務
vim /etc/selinux/config
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. #SELINUX=enforcing SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
安裝規劃
服務名稱 | node01 | node02 | node03 |
---|---|---|---|
impala-catalog | 不安裝 | 不安裝 | 安裝 |
impala-state-store | 不安裝 | 不安裝 | 安裝 |
impala-server | 安裝 | 安裝 | 安裝 |
主節點node03執行如下命令進行安裝
yum install impala -y yum install impala-server -y yum install impala-state-store -y yum install impala-catalog -y yum install impala-shell -y
從節點node01與node02安裝如下服務
yum install impala-server -y
node03 機器修改hive-site.xml內容以下
hive-site.xml配置
vim /export/servers/hive-1.1.0-cdh5.14.0/conf/hive-site.xml
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://node03.hadoop.com:3306/hive?createDatabaseIfNotExist=true</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>123456</value> </property> <property> <name>hive.cli.print.current.db</name> <value>true</value> </property> <property> <name>hive.cli.print.header</name> <value>true</value> </property> <property> <name>hive.server2.thrift.bind.host</name> <value>node03.hadoop.com</value> </property> ------------------------------------------------------------------------------------------------- #修改部份內容 ------------------------------------------------------------------------------------------------- <property> <name>hive.metastore.uris</name> <value>thrift://node03.hadoop.com:9083</value> </property> <property> <name>hive.metastore.client.socket.timeout</name> <value>3600</value> </property> ------------------------------------------------------------------------------------------------- #修改部份內容 ------------------------------------------------------------------------------------------------- </configuration>
在 node03
機器上面執行
cd /export/servers/ scp -r hive-1.1.0-cdh5.14.0/ node02:$PWD scp -r hive-1.1.0-cdh5.14.0/ node01:$PWD
啓動hive的metastore服務
node03
機器啓動hive的metastore服務
cd /export/servers/hive-1.1.0-cdh5.14.0 nohup bin/hive --service metastore & nohup bin/hive -- service hiveserver2 &
有兩個RunJar表示啓動成功
:
注意:必定要保證mysql的服務正常啓動,不然metastore的服務不可以啓動
全部節點建立文件夾
mkdir -p /var/run/hdfs-sockets
修改全部節點的hdfs-site.xml
添加如下配置,修改完以後重啓hdfs
集羣生效
vim /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/hdfs-site.xml
添加到文件末尾:
<property> <name>dfs.client.read.shortcircuit</name> <value>true</value> </property> <property> <name>dfs.domain.socket.path</name> <value>/var/run/hdfs-sockets/dn</value> <!--/var/run/hdfs-socket爲目錄,dn爲文件--> </property> <property> <name>dfs.client.file-block-storage-locations.timeout.millis</name> <value>10000</value> </property> <property> <name>dfs.datanode.hdfs-blocks-metadata.enabled</name> <value>true</value> </property>
注意:root用戶不須要這一步操做了,實際工做當中普通用戶須要這一步操做
#建立文件夾 /var/run/hdfs-sockets/ #給這個文件夾賦予權限,例如若是咱們用的是普通用戶,那就直接賦予普通用戶的權限 #例如: chown -R hadoop:hadoop /var/run/hdfs-sockets/
由於我這裏直接用的root用戶,因此不須要賦權限了
重啓hdfs文件系統
node01
服務器上面執行如下命令
cd /export/servers/hadoop-2.6.0-cdh5.14.0/ sbin/stop-dfs.sh sbin/start-dfs.sh
impala
的配置目錄爲:
/etc/impala/conf
這個路徑下面須要把core-site.xml,hdfs-site.xml以及hive-site.xml拷貝到這裏來,可是咱們這裏使用軟鏈接的方式會更好
全部節點
執行如下命令建立連接到impala
配置目錄下來
ln -s /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/core-site.xml /etc/impala/conf/core-site.xml ln -s /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/hdfs-site.xml /etc/impala/conf/hdfs-site.xml ln -s /export/servers/hive-1.1.0-cdh5.14.0/conf/hive-site.xml /etc/impala/conf/hive-site.xml
全部節點
更改impala
默認配置文件以及添加mysql的鏈接驅動包
vim /etc/default/impala
IMPALA_CATALOG_SERVICE_HOST=node03 IMPALA_STATE_STORE_HOST=node03
全部節點
建立mysql
的驅動包的軟鏈接
ln -s /export/servers/hive-1.1.0-cdh5.14.0/lib/mysql-connector-java-5.1.38.jar /usr/share/java/mysql-connector-java.jar
全部節點
修改bigtop的java_home路徑
vim /etc/default/bigtop-utils export JAVA_HOME=/export/servers/jdk1.8.0_141
啓動impala服務
主節點node03
啓動如下三個服務進程
service impala-state-store start service impala-catalog start service impala-server start
從節點啓動node01
與node02
啓動impala-server
service impala-server start
查看impala
進程是否存在
ps -ef | grep impala
注意:啓動以後全部關於impala的日誌默認都在/var/log/impala 這個路徑下,node03
機器上面應該有三個進程,node02
與node01
機器上面只有一個進程,若是進程個數不對,去對應目錄下查看報錯日誌
瀏覽器頁面訪問:
訪問impalad的管理界面
訪問statestored的管理界面
訪問catalog的管理界面
下一篇計劃:impala使用教程