一、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
|