Cloudera Impala對你存儲在Apache Hadoop在HDFS,HBase的數據提供直接查詢互動的SQL。除了像Hive使用相同的統一存儲平台,Impala也使用相同的元數據,SQL語法(Hive SQL),ODBC驅動程序和用戶界面(Hue Beeswax)。Impala還提供了一個熟悉的面向批量或實時查詢和統一平台。 二、Impala安裝1.安裝要求 (1)軟件要求
(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、命令行功能
set命令參數說明:
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的客戶端才能夠直接進行正確查詢。因此,如果使用impala客戶端進行的一些操作修改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
|