如何安裝使用Impala


 

 
一、Impala簡介

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

(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

http://mr5:8088/cluster

 

 

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的客戶端才能夠直接進行正確查詢。因此,如果使用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

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM