Cloudera Impala對你存儲在Apache Hadoop在HDFS,HBase的數據提供直接查詢互動的SQL。除了像Hive使用同樣的統一存儲平臺,Impala也使用同樣的元數據,SQL語法(Hive SQL),ODBC驅動程序和用戶界面(Hue Beeswax)。Impala還提供了一個熟悉的面向批量或實時查詢和統一平臺。
二、Impala安裝1.安裝要求
(1)軟件要求
- ??Red Hat Enterprise Linux (RHEL)/CentOS 6.2 (64-bit)
- ??CDH 4.1.0 or later
- ??Hive
-
??MySQL
注意:Impala不支持在Debian/Ubuntu, SuSE, RHEL/CentOS 5.7系統中安裝。
(2)硬件要求在Join查詢過程中須要將數據集載入內存中進行計算,因此對安裝Impalad的內存要求較高。
2、安裝準備(1)操作系統版本號查看
>more/etc/issue
CentOSrelease 6.2 (Final)
Kernel \ron an \m
(2)機器準備10.28.169.112mr5
10.28.169.113mr6
10.28.169.114mr7
10.28.169.115mr8
各機器安裝角色
mr5:NameNode、ResourceManager、SecondaryNameNode、Hive、impala-state-store
mr6、mr7、mr8:DataNode、NodeManager、impalad
(3)用戶準備在各個機器上新建用戶hadoop,并打通ssh
(4)軟件準備到cloudera官網下載:
Hadoop:
hadoop-2.0.0-cdh4.1.2.tar.gz
hive:
hive-0.9.0-cdh4.1.2.tar.gz
impala:
impala-0.3-1.p0.366.el6.x86_64.rpm
impala-debuginfo-0.3-1.p0.366.el6.x86_64.rpm
impala-server-0.3-1.p0.366.el6.x86_64.rpm
impala-shell-0.3-1.p0.366.el6.x86_64.rpm
impala依賴包下載:
bigtop-utils-0.4( http://beta.cloudera.com/impala/redhat/6/x86_64/impala/0/RPMS/noarch/ )
其它依賴包下載地址: http://mirror.bit.edu.cn/centos/6.3/os/x86_64/Packages/
4、hadoop-2.0.0-cdh4.1.2安裝(1)安裝包準備
hadoop用戶登錄到mr5機器,將hadoop-2.0.0-cdh4.1.2.tar.gz上傳到/home/hadoop/文件夾下并解壓:
? ? tar zxvf hadoop-2.0.0-cdh4.1.2.tar.gz
(2)配置環境變量改動mr5機器hadoop用戶主文件夾/home/hadoop/下的.bash_profile環境變量:
exportJAVA_HOME=/usr/jdk1.6.0_30
exportJAVA_BIN=${JAVA_HOME}/bin
exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export??JAVA_OPTS="-Djava.library.path=/usr/local/lib-server -Xms1024m -Xmx2048m -XX:MaxPermSize=256m -Djava.awt.headless=true-Dsun.net.client.defaultReadTimeout=600
00-Djmagick.systemclassloader=no -Dnetworkaddress.cache.ttl=300-Dsun.net.inetaddr.ttl=300"
exportHADOOP_HOME=/home/hadoop/hadoop-2.0.0-cdh4.1.2
exportHADOOP_PREFIX=$HADOOP_HOME
exportHADOOP_MAPRED_HOME=${HADOOP_HOME}
exportHADOOP_COMMON_HOME=${HADOOP_HOME}
exportHADOOP_HDFS_HOME=${HADOOP_HOME}
exportHADOOP_YARN_HOME=${HADOOP_HOME}
export PATH=$PATH:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin
exportJAVA_HOME JAVA_BIN PATH CLASSPATH JAVA_OPTS
exportHADOOP_LIB=${HADOOP_HOME}/lib
exportHADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
(3)改動配置文件在機器mr5上hadoop用戶登錄改動hadoop的配置文件(配置文件文件夾:hadoop-2.0.0-cdh4.1.2/etc/hadoop)
(1)、slaves :
加入下面節點
mr6
mr7
mr8
(2)、hadoop-env.sh :
添加下面環境變量
exportJAVA_HOME=/usr/jdk1.6.0_30
exportHADOOP_HOME=/home/hadoop/hadoop-2.0.0-cdh4.1.2
exportHADOOP_PREFIX=${HADOOP_HOME}
export HADOOP_MAPRED_HOME=${HADOOP_HOME}
exportHADOOP_COMMON_HOME=${HADOOP_HOME}
exportHADOOP_HDFS_HOME=${HADOOP_HOME}
exportHADOOP_YARN_HOME=${HADOOP_HOME}
exportPATH=$PATH:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin
exportJAVA_HOME JAVA_BIN PATH CLASSPATH JAVA_OPTS
exportHADOOP_LIB=${HADOOP_HOME}/lib
exportHADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
(3)、core-site.xml :
??fs.default.name
??hdfs://mr5:9000
??The name of the defaultfile system.Either the literal string "local" or a host:port forNDFS.
??true
io.native.lib.available
??true
??hadoop.tmp.dir
??/home/hadoop/tmp
??A base for other temporarydirectories.
(4)、hdfs-site.xml :
dfs.namenode.name.dir
??file:/home/hadoop/dfsdata/name
??Determines where on thelocal filesystem the DFS name node should store the name table.If this is acomma-delimited list of directories,then name table is replicated in all of thedirectories,for redundancy.
??true
dfs.datanode.data.dir
file:/home/hadoop/dfsdata/data
??Determines where on thelocal filesystem an DFS data node should store its blocks.If this is acomma-delimited list of directories,then data will be stored in all nameddirectories,typically on different devices.Directories that do not exist areignored.
??
??true
??dfs.replication
??3
??dfs.permission
??false
(5)、mapred-site.xml:
mapreduce.framework.name
??yarn
mapreduce.job.tracker
??hdfs://mr5:9001
??true
mapreduce.task.io.sort.mb
??512
mapreduce.task.io.sort.factor
??100
mapreduce.reduce.shuffle.parallelcopies
??50
??mapreduce.cluster.temp.dir
file:/home/hadoop/mapreddata/system
??true
mapreduce.cluster.local.dir
file:/home/hadoop/mapreddata/local
??true
(6)、yarn-env.sh :
添加下面環境變量
exportJAVA_HOME=/usr/jdk1.6.0_30
exportHADOOP_HOME=/home/hadoop/hadoop-2.0.0-cdh4.1.2
exportHADOOP_PREFIX=${HADOOP_HOME}
exportHADOOP_MAPRED_HOME=${HADOOP_HOME}
exportHADOOP_COMMON_HOME=${HADOOP_HOME}
exportHADOOP_HDFS_HOME=${HADOOP_HOME}
exportHADOOP_YARN_HOME=${HADOOP_HOME}
exportPATH=$PATH:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin
exportJAVA_HOME JAVA_BIN PATH CLASSPATH JAVA_OPTS
exportHADOOP_LIB=${HADOOP_HOME}/lib
exportHADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
(7)、yarn-site.xml:
yarn.resourcemanager.address
mr5:8080
yarn.resourcemanager.scheduler.address
mr5:8081
yarn.resourcemanager.resource-tracker.address
mr5:8082
yarn.nodemanager.aux-services
mapreduce.shuffle
yarn.nodemanager.aux-services.mapreduce.shuffle.class
org.apache.hadoop.mapred.ShuffleHandler
yarn.nodemanager.local-dirs
file:/home/hadoop/nmdata/local
thelocal directories used by the nodemanager
yarn.nodemanager.log-dirs
file:/home/hadoop/nmdata/log
thedirectories used by Nodemanagers as log directories
(4)復制到其它節點
(1)、在mr5上配置完第2步和第3步后,壓縮hadoop-2.0.0-cdh4.1.2
rm hadoop-2.0.0-cdh4.1.2.tar.gz
tar??zcvf hadoop-2.0.0-cdh4.1.2.tar.gz??hadoop-2.0.0-cdh4.1.2
然后將hadoop-2.0.0-cdh4.1.2.tar.gz遠程復制到mr6、mr7、mr8機器上
scp/home/hadoop/hadoop-2.0.0-cdh4.1.2.tar.gz hadoop@mr6:/home/hadoop/
scp/home/hadoop/hadoop-2.0.0-cdh4.1.2.tar.gz hadoop@mr7:/home/hadoop/
scp/home/hadoop/hadoop-2.0.0-cdh4.1.2.tar.gz hadoop@mr8:/home/hadoop/
(2)、將mr5機器上hadoop用戶的配置環境的文件.bash_profile遠程復制到mr6、mr7、mr8機器上
scp/home/hadoop/.bash_profile hadoop@mr6:/home/hadoop/
scp/home/hadoop/.bash_profile hadoop@mr7:/home/hadoop/
scp/home/hadoop/.bash_profile hadoop@mr8:/home/hadoop/
拷貝完畢后,在mr5、mr6、mr7、mr8機器的/home/hadoop/文件夾下運行
source.bash_profile
使得環境變量生效
(5)啟動hdfs和yarn以上步驟都運行完畢后,用hadoop用戶登錄到mr5機器依次運行:
hdfsnamenode -format
start-dfs.sh
start-yarn.sh
通過jps命令查看:
mr5成功啟動了NameNode、ResourceManager、SecondaryNameNode進程;
mr6、mr7、mr8成功啟動了DataNode、NodeManager進程。
(6)驗證成功狀態通過下面方式查看節點的健康狀態和作業的運行情況:
瀏覽器訪問(本地須要配置hosts)
http://mr5:50070/dfshealth.jsp
5、hive-0.9.0-cdh4.1.2安裝
(1)安裝包準備
使用hadoop用戶上傳hive-0.9.0-cdh4.1.2到mr5機器的/home/hadoop/文件夾下并解壓:
? ???tar zxvf hive-0.9.0-cdh4.1.2
(2)配置環境變量
在.bash_profile加入環境變量:
exportHIVE_HOME=/home/hadoop/hive-0.9.0-cdh4.1.2
exportPATH=$PATH:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${HIVE_HOME}/bin
exportHIVE_CONF_DIR=$HIVE_HOME/conf
exportHIVE_LIB=$HIVE_HOME/lib
加入完后運行下面命令使得環境變量生效:
..bash_profile
(3)改動配置文件
改動hive配置文件(配置文件文件夾:hive-0.9.0-cdh4.1.2/conf/)
在hive-0.9.0-cdh4.1.2/conf/文件夾下新建hive-site.xml文件,并加入下面配置信息:
? ?? ?
? ?? ?? ?? ?? ?hive.metastore.local
? ?? ?? ?? ?? ?true
? ?? ?
? ?? ?? ?? ?? ?javax.jdo.option.ConnectionURL
? ?? ?? ?? ?? ?jdbc:mysql://10.28.169.61:3306/hive_impala?createDatabaseIfNotExist=true
? ?? ?
? ?? ?? ?? ?? ?javax.jdo.option.ConnectionDriverName
? ?? ?? ?? ?? ?com.mysql.jdbc.Driver
? ?? ?
? ?? ?
? ?? ?? ?? ?? ? javax.jdo.option.ConnectionUserName
? ?? ?? ?? ?? ? hadoop
? ?? ?
? ?? ?? ?? ?? ? javax.jdo.option.ConnectionPassword
? ?? ?? ?? ?? ?123456
? ?
? ?? ?? ?? ?? ? hive.security.authorization.enabled
? ?? ?? ?? ?? ? false
? ?? ?
? ?? ?? ?? ?? ? hive.security.authorization.createtable.owner.grants
? ?? ?? ?? ?? ? ALL
? ?? ?
? ?? ?? ?? ?? ? hive.querylog.location
? ?? ?? ?? ?? ? ${user.home}/hive-logs/querylog
? ?? ?
(4)驗證成功狀態
完畢以上步驟之后,驗證hive安裝是否成功
在mr5命令行運行hive,并輸入”show tables;”,出現下面提示,說明hive成功安裝:
>hive
hive>show tables;
OK
Time taken:18.952 seconds
hive>
6、impala安裝
說明:
(1)、下面1、2、3、4步是在root用戶分別在mr5、mr6、mr7、mr8下運行
(2)、下面第5步是在hadoop用戶下運行
(1)安裝依賴包:安裝mysql-connector-java:
? ? yum install mysql-connector-java
安裝bigtop
rpm -ivh bigtop-utils-0.4+300-1.cdh4.0.1.p0.1.el6.noarch.rpm
安裝libevent
rpm -ivhlibevent-1.4.13-4.el6.x86_64.rpm
如存在其它須要安裝的依賴包,能夠到下面鏈接:
http://mirror.bit.edu.cn/centos/6.3/os/x86_64/Packages/ 進行下載。
(2)安裝impala的rpm,分別運行rpm -ivh impala-0.3-1.p0.366.el6.x86_64.rpm
rpm -ivh impala-server-0.3-1.p0.366.el6.x86_64.rpm
rpm -ivh impala-debuginfo-0.3-1.p0.366.el6.x86_64.rpm
rpm -ivh impala-shell-0.3-1.p0.366.el6.x86_64.rpm
(3)找到impala的安裝文件夾完畢第1步和第2步后,通過下面命令:
find / -name impala
輸出:
/usr/lib/debug/usr/lib/impala
/usr/lib/impala
/var/run/impala
/var/log/impala
/var/lib/alternatives/impala
/etc/default/impala
/etc/alternatives/impala
找到impala的安裝文件夾:/usr/lib/impala
(4)配置Impala在Impala安裝目錄/usr/lib/impala下創建conf,將hadoop中的conf目錄下的core-site.xml、hdfs-site.xml、hive中的conf目錄下的hive-site.xml拷貝到當中。
在core-site.xml文件里加入例如以下內容:
dfs.client.read.shortcircuit
true
dfs.client.read.shortcircuit.skip.checksum
false
在hadoop和impala的hdfs-site.xml文件里加入例如以下內容并重新啟動hadoop和impala:
? ?? ?? ?? ?
dfs.datanode.data.dir.perm
755
dfs.block.local-path-access.user
hadoop
dfs.datanode.hdfs-blocks-metadata.enabled
true
(5)啟動服務
(1)、在mr5啟動Impala state store,命令例如以下:
>GLOG_v=1 nohup statestored-state_store_port=24000 &? ?? ?? ?? ?? ?? ?? ?
假設statestore正常啟動,能夠在/tmp/statestored.INFO查看。假設出現異常,能夠查看/tmp/statestored.ERROR定位錯誤信息。
(2)、在mr6、mr7、mr8啟動Impalad,命令例如以下:
mr6:
>GLOG_v=1 nohup impalad -state_store_host=mr5-nn=mr5 -nn_port=9000 -hostname=mr6 -ipaddress=10.28.169.113 &
mr7:? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?
>GLOG_v=1 nohup impalad -state_store_host=mr5-nn=mr5 -nn_port=9000 -hostname=mr7 -ipaddress=10.28.169.114 &
mr8:? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?
>GLOG_v=1 nohup impalad -state_store_host=mr5-nn=mr5 -nn_port=9000 -hostname=mr8 -ipaddress=10.28.169.115 &? ?? ?
? ?? ? 假設impalad正常啟動,能夠在/tmp/impalad.INFO查看。假設出現異常,能夠查看/tmp/ impalad.ERROR定位錯誤信息。
(6)使用shell
使用impala-shell啟動Impala Shell,分別連接各Impalad主機(mr6、mr7、mr8),刷新元數據,之后就能夠運行shell命令。相關的命令例如以下(能夠在隨意節點運行):
>impala-shell
[Not connected]> connect mr6:21000
[mr6:21000] >refresh
[mr6:21000]>connectmr7:21000
[mr7:21000]>refresh
[mr7:21000]>connectmr8:21000
[mr8:21000]>refresh
(7)驗證成功狀態使用impala-shell啟動Impala Shell,分別連接各Impalad主機,刷新元數據,之后就能夠運行shell命令。相關的命令例如以下(能夠在隨意節點運行):
>impala-shell
[Not connected]> connect mr6:21000
[mr6:21000]>refresh
[mr6:21000] >show databases
default
[mr6:21000] >
出現以上提示信息,說明成功安裝。
三、Impala的使用
1、命令行功能
命令
|
描寫敘述
|
備注
|
connect | 連接Impala節點 | connect mr8:21000 |
describe | 查看表結構 | describe tab1 |
explain | 解析SQL語句 | explain select * from tab.. |
help | 幫助命令,查看命令的說明 | help connect |
insert | 插入數據命令 |
insert overwrite
insert into |
quit | 退出命令 | ? |
refresh | 刷新源數據庫 | ? |
select | 查詢語句命令 | ? |
set | 設置impala查詢選項 | ? |
shell | 運行本地linux命令 | ? |
show | 查看表和數據庫命令 | ? |
use | 選擇使用數據庫 | ? |
version | 查看Impala版本號 | ? |
set命令參數說明:
參數
|
默認值
|
PARTITION_AGG | false |
NUM_SCANNER_THREADS | 0 |
MAX_IO_BUFFERS | 0 |
MAX_SCAN_RANGE_LENGTH | 0 |
NUM_NODES | 0 |
DISABLE_CODEGEN | false |
MAX_ERRORS | 0 |
ABORT_ON_ERROR | false |
BATCH_SIZE | 0 |
ALLOW_UNSUPPORTED_FORMATS | false |
2、當前支持的語言元素
Impala的查詢語言是基于Hive的HiveQL,眼下impala不支持針對表和分區的DDL,可是支持DML。事實上大部分的HiveQL不須要改動就能夠在impala上面運行的,包含JOIN, AGGREGATE, DISTINCT, UNION ALL, ORDER BY, LIMIT 和subquery等等。
(1)、select
l??數據類型:boolean, tinyint, smallint, int, bigint, float, double, timestamp, string
l??DISTINCT
l??FROM 子句支持子查詢.
l??WHERE, GROUP BY, HAVING
l??ORDER BY,可是須要和limit一起使用
l??JOINS: Left、 right、 semi、 full and outer
l??UNION ALL
l??LIMIT
l??External tables
l??關系運算符:>、<、=等
l??算術運算符:加法、減法等
l??邏輯boolean操作符:and、or、not,可是impala不支持相應的&&、||、!
l??COUNT, SUM, CAST, LIKE, IN, BETWEEN, 和COALESCE
說明:
l??Join的時候大表一定要放在左邊
l??Join subsequent tables according to which table has the mostselective filter. Joining the
table with the most selective filterresults in the fewest number of rows are being returned.
(2)、insert
當前版本號的impala,insert僅僅支持已經創建好的表和分區。全部表和分區結構的創建和改動僅僅能通過HIVE來完畢。
如今支持的insert包含:
l??INSERT INTO
l??INSERT OVERWRITE
說明:
Insert命令可能會導致Hive的元數據發送改變,所以在使用impala運行查詢時最好先運行一下refresh命令刷新一下hive元數據。
(3)、refresh
為了準確地響應查詢,impala必需要知道當前Hive中數據庫的全部元數據,這樣impala的client才可以直接進行正確查詢。因此,假設使用impalaclient進行的一些操作改動hive的元數據后,最好impala的每個節點都又一次refresh,保證元數據是最新的。可是并非所以的impala操作都需要refresh元數據。
在下面幾種情況下impalad實例須要refresh元數據:
l??當前impalad實例改動了元數據
l??其它比方hive或者其它的impalad實例改動了元數據
l??通過impala-shell命令行或者ODBC驅動程序連接impala進行的操作導致數據庫發生改變
Impalad實例不須要refresh的情況:
l??當集群中僅僅有一個impalad實例的時候,即使這個實例改動了元數據,該impalad實例會自己主動更新自己的數據庫元數據信息。這樣的情況下是不須要refresh的。
l??假設被改動元數據的數據庫是一個后臺數據庫,也即impalad實例不須要連接該數據庫以獲得元數據的數據庫,這樣的情況下也是不須要refresh的。
Hive元數據被改動的典型情況包含:
l??通過Hive進行了ALTER,CREATE, DROP 或 INSERT操作
l??通過impalad進行了INSERT操作
l? ?
(4)、DESCRIBE
l??DESCRIBE tableName:列出表的結構信息
(5)、SHOW
l??SHOW TABLES :列出全部的表
l??SHOW DATABASES :列出全部的數據庫
l??SHOW SCHEMAS :列出全部的schema
(6)、USE
l??USE DATABASE
Impala的主要資源
- 源碼下載: http://github.com/cloudera/impala
- 二進制: https://ccp.cloudera.com/display/SUPPORT/Downloads
- 文檔: https://ccp.cloudera.com/display/IMPALA10BETADOC/Cloudera+Impala+1.0+Beta+Documentation
- 郵件列表: mailto: impala-user@cloudera.org
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
