impala安装
1. 部署方案
节点类型 | Ip | 机器名称 | 部署软件 |
管理节点 | 192.168.156.2 | Hadoop01 | Zookeeper journalnode Namenode(主) Resourcemanager(备)
|
192.168.156.3 | Hadoop02
| Zookeeper Journalnode Namenode(备) Resourcemanager(主) Hive Impala-state-store impala-catalog | |
数据节点 | 192.168.156.4 | Hadoop03 | Datanode Nodemanager Impala-server Zookeeper Journalnode |
192.168.156.5 | Hadoop04 | Datanode Nodemanager Impala-server | |
192.168.156.6 | Hadoop05 | Datanode Nodemanager Impala-server | |
192.168.156.7 | Hadoop06 | Datanode Nodemanager Impala-server | |
192.168.156.8 | Hadoop07 | Datanode Nodemanager Impala-server |
部署说明:
1) 此集群中总共7台机器,hadoop01和hadoop02内存是64G,hadoop03~hadoop07都是内存为230G,所以将hadoop01,hadoop02作为管理节点,hadoop03~hadoop07作为数据节点。
2) impala整体分为三部分:impala-state-store,impala-catalog,impala-server。
Ø impala-state-store在集群中主要用于协调各个运行impala的实例之间的信息关系,impala正是通过这些信息去定位查询请求所要的数据,换句话说就是主要跟踪各个impala实例的位置和状态,让各个impalad实例以集群的方式运行起来,相当于一个管理节点。
Ø impala-catalog是同步hive和impala元数据的工具服务。
Ø impala-server是impala的核心进程,数据的计算就靠这个进程来执行,是分布式的存在于集群中的worker进程,该进程应运行在DataNode机器上,impala-server的进程是impalad,每个impalad实例会接收、规划并调节来自ODBC或Impala Shell等客户端的查询。
所以在集群中,将impala-state-store,impala-catalog这两个服务必须安装在hadoop集群的namenode节点上,impala-server、impala-shell服务安装在各个datanode上。
2. 部署准备
1) impala的安装以及启停都必须在root用户下执行。
2) 安装impala之前首先需要安装impala需要的依赖包,这些依赖包都必须用yum库来安装,所以在安装之前必须挂载好本地系统镜像iso,并且配置好本地yum源。
3) 可以用“yum list | grep 包名”命令来查看yum源里有没有某些包,用“yum deplist 包名”来查看包的依赖关系。
4) 下载impala5.3.1源码和安装包
在http://archive.cloudera.com/cdh5/cdh/5/下载impala5.3.1有源码和安装包,
这里让下载源码是因为有可能在安装的过程中会缺少某些依赖包,我们就可以直接到源码里去找到对应版本的依赖包。
需要下载的impala包有:
impala-2.1.1+cdh5.3.1+0-1.cdh5.3.1.p0.17.el6.x86_64.rpm
impala-state-store-2.1.1+cdh5.3.1+0-1.cdh5.3.1.p0.17.el6.x86_64.rpm
impala-catalog-2.1.1+cdh5.3.1+0-1.cdh5.3.1.p0.17.el6.x86_64.rpm
impala-udf-devel-2.1.1+cdh5.3.1+0-1.cdh5.3.1.p0.17.el6.x86_64.rpm
impala-server-2.1.1+cdh5.3.1+0-1.cdh5.3.1.p0.17.el6.x86_64.rpm
impala-shell-2.1.1+cdh5.3.1+0-1.cdh5.3.1.p0.17.el6.x86_64.rpm
3. 安装依赖包,注意:这些依赖包在每一个节点上都要进行安装!
1) 安装mysql-connector-java
yuminstall mysql-connector-java
2) 安装bigtop
yuminstall bigtop-jsvc-0.6.0+cdh5.0.0+427-1.cdh5.0.0.p0.34.el6.x86_64
yuminstall bigtop-utils-0.7.0+cdh5.0.0+0-1.cdh5.0.0.p0.36.el6.noarch
3) 安装libevent
yuminstall libevent*
4) 安装redhat-lsb
yuminstall redhat-lsb
5) 安装python-setuptools:
yuminstall python-setuptools
6) 安装sasl
yuminstall cyrus-sasl.x86_64 –y
4. 在namenode节点(本集群中规划的是hadoop02)上安装以下impala安装包,注意:以下安装包必须在root用户下执行。
1) rpm -ivh impala-2.1.1+cdh5.3.1+0-1.cdh5.3.1.p0.17.el6.x86_64.rpm –nodeps
2) rpm -ivh impala-state-store-2.1.1+cdh5.3.1+0-1.cdh5.3.1.p0.17.el6.x86_64.rpm
3) rpm -ivh impala-catalog-2.1.1+cdh5.3.1+0-1.cdh5.3.1.p0.17.el6.x86_64.rpm
4) rpm -ivhimpala-udf-devel-2.1.1+cdh5.3.1+0-1.cdh5.3.1.p0.17.el6.x86_64.rpm
5. 在每一个datanode节点安装一下impala安装包,注意:以下安装包必须在root用户下执行。
1) rpm -ivh impala-2.1.1+cdh5.3.1+0-1.cdh5.3.1.p0.17.el6.x86_64.rpm -nodeps
2) rpm-ivh impala-shell-2.1.1+cdh5.3.1+0-1.cdh5.3.1.p0.17.el6.x86_64.rpm
3) rpm-ivh impala-udf-devel-2.1.1+cdh5.3.1+0-1.cdh5.3.1.p0.17.el6.x86_64.rpm
4) rpm-ivh impala-server-2.1.1+cdh5.3.1+0-1.cdh5.3.1.p0.17.el6.x86_64.rpm
6. 至此,impala的安装包已经安装到各个节点上,下来可以通过find / -name impala命令来查看每一个节点impala的安装目录,执行此命令后会输出:
/usr/lib/impala
/etc/default/impala
/etc/alternatives/impala
/etc/impala
/var/run/impala
/var/log/impala
/var/lib/impala
/var/lib/alternatives/impala
7. 配置impala,配置时先在一台机器上将所有该配置的变量配置好之后,然后再拷贝到所有其他的机器中,我这边先在hadoop02上进行配置。
1) 配置hdfs-site.xml
<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
<property>
<name>dfs.domain.socket.path</name>
<value>/var/run/hadoop-hdfs/dn._PORT</value>
</property>
<property>
<name>dfs.client.file-block-storage-locations.timeout.millis</name>
<value>10000</value>
</property>
<property>
<name>dfs.client.read.shortcircuit.skip.checksum</name>
<value>false</value>
</property>
<property>
<name>dfs.datanode.hdfs-blocks-metadata.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.use.legacy.blockreader.local</name>
<value>false</value>
</property>
<property>
<name>dfs.datanode.data.dir.perm</name>
<value>750</value>
</property>
<property>
<name>dfs.block.local-path-access.user</name>
<value>e3base</value>
</property>
<property>
<name>hadoop.native.lib</name>
<value>true</value>
<description>Should nativehadoop libraries, if present, be used.</description>
</property>
上述配置中,红色字体部分都需要根据实际情况进行修改,其具体说明如下:
Ø dfs.client.read.shortcircuit指定的是短路读,针对本地数据,如果启用了short-circuit reads,impala就能直接读取文件系统的数据,这样就避免需要与DataNode的通信。此设置也最大限度地减少了额外的数据副本。
Ø dfs.datanode.hdfs-blocks-metadata.enabled指定的是数据块位置以及启用data block位置跟踪,那么impala就能快速定位data block在磁盘中位置,从而更好地利用底层磁盘。
Ø hadoop.native.lib指定的是本地校验和:如果启用native check-summing,那么impala会使用一个优化的native check-summing库来提升impala的性能。这个库文件在impala安装路径的lib目录下:libhadoop.so。
2) 配置hive-site.xml
<property>
<name>hive.metastore.uris</name>
<value>thrift://192.168.156.3:9083</value>
</property>
<property>
<name>hive.metastore.client.socket.timeout</name>
<value>3600</value>
<description>MetaStore Client sockettimeout in seconds</description>
</property>
其中红色字体部分表示表示metostore的uri,我们的机器中将hive安装在hadoop02(192.168.156.3)上。
3) 配置impala的参数,impala的配置文件在/etc/default/impala之中。
IMPALA_CATALOG_SERVICE_HOST=192.168.156.3
IMPALA_STATE_STORE_HOST=192.168.156.3
IMPALA_STATE_STORE_PORT=24000
IMPALA_BACKEND_PORT=22000
IMPALA_LOG_DIR=/var/log/impala
IMPALA_CATALOG_ARGS="-log_dir=${IMPALA_LOG_DIR} "
IMPALA_STATE_STORE_ARGS="-log_dir=${IMPALA_LOG_DIR} -state_store_port=${IMPAL
A_STATE_STORE_PORT}"
IMPALA_SERVER_ARGS="\
-log_dir=${IMPALA_LOG_DIR} \
-catalog_service_host=${IMPALA_CATALOG_SERVICE_HOST} \
-state_store_port=${IMPALA_STATE_STORE_PORT} \
-use_statestore \
-state_store_host=${IMPALA_STATE_STORE_HOST}\
-be_port=${IMPALA_BACKEND_PORT} \
-mem_limit=60%"
ENABLE_CORE_DUMPS=false
LIBHDFS_OPTS=-Djava.library.path=/usr/lib/impala/lib
MYSQL_CONNECTOR_JAR=/usr/share/java/mysql-connector-java.jar
HADOOP_HOME=/e3base/clusterApp/hadoop
HIVE_HOME=/e3base/clusterApp/hive
配置说明:
l IMPALA_CATALOG_SERVICE_HOST指定的是catalog服务器的IP
l IMPALA_STATE_STORE_HOST指定的是StateStore服务器IP
l -mem_limit=70%指定的是impalad内存使用限制
l LIBHDFS_OPTS=-Djava.library.path指定的是impala依赖的第三方库
l MYSQL_CONNECTOR_JAR指定的是mysql-connector-java*路径
l IMPALA_BIN指定的是impala可执行文件的路径
l IMPALA_HOME指定的impala的安装路径
l HIVE_HOME指定的是hive的安装路径
l HBASE_HOME指定的是hbase的安装路径
l IMPALA_CONF_DIR指定的是impala的配置路径
l HADOOP_CONF_DIR指定的是hadoop的配置路径
l HIVE_CONF_DIR指定的是hive的配置路径
l HBASE_CONF_DIR指定的是hbase的配置路径
4) 在/etc/default/bigtop-utils中设置JAVA_HOME
exportJAVA_HOME=/usr/local/jdk1.7.0_51
exportCLASSPATH=./:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$HIVE_HOME/bin:$PATH
5) 进入/etc/init.d目录 修改impala-catalog操作权限,将如下设置中的红色字体由impal改成集群的用户名。
DAEMON="catalogd"
DESC="ImpalaCatalog Server"
EXEC_PATH="/usr/bin/catalogd"
EXEC_DIR=""
SVC_USER="e3base"
DAEMON_FLAGS="${IMPALA_CATALOG_ARGS}"
CONF_DIR="/etc/impala/conf"
PIDFILE="/var/run/impala/catalogd-impala.pid"
LOCKDIR="/var/lock/subsys"
LOCKFILE="$LOCKDIR/catalogd"
WORKING_DIR="~/"
install -d-m 0755 -o e3base -g e3base /var/run/impala 1>/dev/null2>&1 || :
[ -d "$LOCKDIR" ] || install -d -m 0755 $LOCKDIR 1>/dev/null2>&1 || :
6) 进入/etc/init.d目录修改impala-state-store操作权限,将如下设置中的红色字体由impal改成集群的用户名。
DAEMON="statestored"
DESC="ImpalaState Store Server"
EXEC_PATH="/usr/bin/statestored"
EXEC_DIR=""
SVC_USER="e3base"
DAEMON_FLAGS="${IMPALA_STATE_STORE_ARGS}"
CONF_DIR="/etc/impala/conf"
PIDFILE="/var/run/impala/statestored-impala.pid"
LOCKDIR="/var/lock/subsys"
LOCKFILE="$LOCKDIR/statestored"
WORKING_DIR="~/"
install -d-m 0755 -o e3base -g e3base /var/run/impala 1>/dev/null2>&1 || :
[ -d "$LOCKDIR" ] || install -d -m 0755 $LOCKDIR 1>/dev/null2>&1 || :
7) 进入/etc/init.d目录修改impala-server操作权限,将如下设置中的红色字体由impal改成集群的用户名。
DAEMON="impalad"
DESC="ImpalaServer"
EXEC_PATH="/usr/bin/impalad"
EXEC_DIR=""
SVC_USER="e3base"
DAEMON_FLAGS="${IMPALA_SERVER_ARGS}"
CONF_DIR="/etc/impala/conf"
PIDFILE="/var/run/impala/impalad-impala.pid"
LOCKDIR="/var/lock/subsys"
LOCKFILE="$LOCKDIR/impalad"
WORKING_DIR="~/"
install -d-m 0755 -o e3base -g e3base /var/run/impala 1>/dev/null2>&1 || :
[ -d "$LOCKDIR" ] || install -d -m 0755 $LOCKDIR 1>/dev/null2>&1 || :
8) 将hadoop安装目录下的hdfs-site.xml,core-site.xml拷贝到/etc/impala/conf目录下
cp /e3base/clusterApp/hadoop/etc/hadoop/hdfs-site.xml /etc/impala/conf
cp /e3base/clusterApp/hadoop/etc/hadoop/core-site.xml /etc/impala/conf
9) 将hive安装目录下的hive-site.xml拷贝到/etc/impala/conf目录下
cp /e3base/clusterApp/hive/conf/hive-site.xml /etc/impala/conf
10) 将$HIVE_HOME/lib/ mysql-connector-java-5.1.20-bin.jar拷贝到/usr/share/java目录下,并将mysql-connector-java-5.1.20-bin.jar文件改名为mysql-connector-java.jar。
cp /e3base/clusterApp/hive/lib/mysql-connector-java-5.1.20-bin.jar/usr/share/java
mv mysql-connector-java-5.1.20-bin.jar mysql-connector-java.jar
11) 写脚本更换impala依赖库
cd/usr/lib/impala/lib
rm-rf libh*
cp/e3base/clusterApp/hadoop/lib/native/libh* .
rm-rf hadoop*
rm-rf hive*
rm-rf hbase*
rm-rf zookeeper*
HADOOP_LIB=/e3base/clusterApp/hadoop/share/hadoop
HIVE_LIB=/e3base/clusterApp/hive/lib
IMPALA_PATH=/usr/lib/impala/lib
cp$HADOOP_LIB/common/lib/hadoop-annotations-2.5.0-cdh5.3.1.jar$IMPALA_PATH/hadoop-annotations.jar
cp$HADOOP_LIB/common/lib/hadoop-auth-2.5.0-cdh5.3.1.jar$IMPALA_PATH/hadoop-auth.jar
cp$HADOOP_LIB/common/hadoop-common-2.5.0-cdh5.3.1.jar$IMPALA_PATH/hadoop-common.jar
cp$HADOOP_LIB/hdfs/hadoop-hdfs-2.5.0-cdh5.3.1.jar $IMPALA_PATH/hadoop-hdfs.jar
cp$HADOOP_LIB/mapreduce/hadoop-mapreduce-client-core-2.5.0-cdh5.3.1.jar$IMPALA_PATH/hadoop-map
reduce-client-core.jar
cp$HADOOP_LIB/yarn/hadoop-yarn-api-2.5.0-cdh5.3.1.jar$IMPALA_PATH/hadoop-yarn-api.jar
cp$HADOOP_LIB/yarn/hadoop-yarn-common-2.5.0-cdh5.3.1.jar$IMPALA_PATH/hadoop-yarn-common.jar
cp $HADOOP_LIB/yarn/hadoop-yarn-server-common-2.5.0-cdh5.3.1.jar$IMPALA_PATH/hadoop-yarn-
server-common.jar
cp$HADOOP_LIB/yarn/hadoop-yarn-server-resourcemanager-2.5.0-cdh5.3.1.jar$IMPALA_PATH/hadoop-yarn-
server-resourcemanager.jar
cp $HADOOP_LIB/yarn/hadoop-yarn-server-web-proxy-2.5.0-cdh5.3.1.jar$IMPALA_PATH/hadoop-yarn-
server-web-proxy.jar
cp$HIVE_LIB/hive-ant-0.13.1-cdh5.3.1.jar $IMPALA_PATH/hive-ant.jar
cp $HIVE_LIB/hive-common-0.13.1-cdh5.3.1.jar$IMPALA_PATH/hive-common.jar
cp $HIVE_LIB/hive-exec-0.13.1-cdh5.3.1.jar$IMPALA_PATH/hive-exec.jar
cp$HIVE_LIB/hive-hbase-handler-0.13.1-cdh5.3.1.jar$IMPALA_PATH/hive-hbase-handler.jar
cp $HIVE_LIB/hive-jdbc-0.13.1-cdh5.3.1.jar$IMPALA_PATH/hive-jdbc.jar
cp $HIVE_LIB/hive-metastore-0.13.1-cdh5.3.1.jar$IMPALA_PATH/hive-metastore.jar
cp $HIVE_LIB/hive-serde-0.13.1-cdh5.3.1.jar$IMPALA_PATH/hive-serde.jar
cp$HIVE_LIB/hive-service-0.13.1-cdh5.3.1.jar $IMPALA_PATH/hive-service.jar
cp$HIVE_LIB/hive-shims-common-0.13.1-cdh5.3.1.jar $IMPALA_PATH/hive-shims-common.jar
cp$HIVE_LIB/hive-shims-common-secure-0.13.1-cdh5.3.1.jar$IMPALA_PATH/hive-shims-common-secure.jar
cp $HIVE_LIB/hive-shims-0.13.1-cdh5.3.1.jar$IMPALA_PATH/hive-shims.jar
脚本说明:
脚本刚开始进入/usr/lib/impala/lib目录,这个目录是impala依赖库的目录
然后删除/usr/lib/impala/lib目录下的libh开头的所有包
然后删除/usr/lib/impala/lib目录下的以hadoop开头的所有包
然后删除/usr/lib/iimpala/lib目录下的以hive开头的所有包
然后删除/usr/lib/impala/lib目录下的以hbase开头的所有包
然后删除/usr/lib/impala/lib目录下的以zookeeper开头的所有包
然后把集群中hadoop安装目录下的$HADOOP_HOME/lib/native目录下的所有libh开头的包,拷贝/usr/lib/impala/lib目录下
然后设置hadoop的依赖包的源目录/e3base/clusterApp/hadoop/share/hadoop
然后设置hive的依赖包的源目录/e3base/clusterApp/hive/lib
然后设置impala的依赖包的目录/usr/lib/impala/lib
然后分别把hadoop源目录下的文件依次拷入impala依赖包目录
然后分别把hive源目录下的文件依次考入impala依赖包目录下
在此要注意两点:
l 安装时拷贝了这个脚本之后要根据hadoop和hive依赖包源目录中的文件的版本,对此脚本进行更改。
l 此操作不能将所有的依赖包全部包含进去,所以在最后启动时,要到impala日志目录/usr/log/impala中去查看错误日志,在错误日志中会显示到底是哪个包没有被拷贝进来,找到这个包名之后,就到之前下载的impala源码包里去找,找到之后拷贝进/usr/lib/impala/lib,直到impala能够正常启动!这点特别重要!
12) 创建/var/run/hadoop-hdfs,/var/run/impala文件夹
mkdir /var/run/hadoop-hdfs
mkdir /var/run/impala
13) 给文件夹赋权限
chown -R e3base:e3base /var/log/impala
chown -Re3base:e3base /var/run/hadoop-hdfs/
chown -Re3base:e3base /var/run/impala
8. 以上的配置都是在hadoop02节点上的,现在需要依次把这些配置好的文件拷贝到hadoop03
到hadoop07节点上,在此配置时由于文件比较多,也需要用脚本来完成,其内容如下:
forf in /etc/default/impala /etc/default/bigtop-utils/etc/impala/conf/hdfs-site.xml /etc/impala/conf/core-site.xml/etc/impala/conf/hive-site.xml /usr/share/java/mysql-connector-java.jar /etc/init.d/impala-state-store/etc/init.d/impala-server /etc/init.d/impala-catalog /var/run/hadoop-hdfs/var/log/impala /etc/default/hadoop; do scp $fhadoop03:$f;done
此脚本运行在hadoop02节点之上,用于把hadoop02之上我们配置好的impala相关文件拷贝到hadoop03节点之上。
剩下的操作就是依次更改脚本中的hadoop03,hadoop04,hadoop05,hadoop06,hadoop07就行了。
9. 依次更改hadoop03~hadoop07上的impala依赖库,在此操作中,首先要删除每一个节点impala依赖库目录里的所有文件,然后再把hadoop02节点里的已经配置好的依赖库拷贝过去,具体操作如下所示:
l 在hadoop03~haoop07之上依次执行删除依赖库操作
rm –rf /usr/lib/impala/lib/*
l 在hadoop02节点上把impala依赖库里的文件依次拷入hadoop03~hadoop07之中
scp /usr/lib/impala/lib/* hadoop03:/usr/lib/impala/lib/
scp /usr/lib/impala/lib/* hadoop04:/usr/lib/impala/lib/
scp /usr/lib/impala/lib/* hadoop05:/usr/lib/impala/lib/
scp /usr/lib/impala/lib/* hadoop06:/usr/lib/impala/lib/
scp /usr/lib/impala/lib/* hadoop07:/usr/lib/impala/lib/
10. 启动impala
1) 在启动impala之前首先要确保已经启动了hive
nohup hive --service metastore &
nohup hive --service hiveserver2 &
2) 在hadoop02上启动statestore,catalog
/etc/init.d/impala-state-storestart
/etc/init.d/impala-catalogstart
3) 在hadoop03~hadoop07上依次启动server
/etc/init.d/impala-server start
11. 停止impala
1) 在hadoop03~hadoop07上依次停止server
/etc/init.d/impala-server stop
2) 在hadoop02上停止statestore,catalog
/etc/init.d/impala-catalog stop
/etc/init.d/impala-state-store stop