安装环境
版本 2.1.0 对应CDH5.3.0
impala是CDH的组件,hadoop其他环境(hdfs、yarn、hive)已经准备的情况下,直接通过yum进行安装,这里提供下载地址impala下载
安装内容:
安装的用户为:root
hdname (hive 元数据节点所在)
impala impala-server impala-state-store impala-catalog impala-shell
其他节点
impala-server impala-shell
权限配置(所有机器都应当进行)
impala 安装过程中会创建名为 impala 的用户和组,不要删除该用户和组。
如果想要 impala 和 YARN 合作,需要把 impala 用户加入 hdfs 组,相关的可以了解的是Llama项目。
impala 在执行 DROP TABLE 操作时,需要把文件移到到 hdfs 的回收站,所以你需要创建一个 hdfs 的目录 /user/impala,并将其设置为impala 用户可写。同样的,impala 需要读取 hive 数据仓库下的数据,故需要把 impala 用户加入 hive 组。
添加附属组命令
usermod -G hive,hdfs,hadoop impala
结果如图
创建impala在hdfs上的目录并设置权限
sudo -u hdfs hadoop fs -mkdir /user/impala
sudo -u hdfs hadoop fs -chown impala /user/impala
设置scoket path
在每个节点上创建/var/run/hadoop-hdfs
kdir -p /var/run/hadoop-hdfs
注意:该文件夹可能已经存在,应当确认用impala是否有权限进行读写
如果已经存在,将用户impala加入该文件所属的组,并修改该文件组的权限即:chmod 775 /var/run/hadoop-hdfs
mysql驱动
驱动下载地址mysql-connector-java-5.1.30.tar.gz
将下载的文件复制到/usr/share/java/
并修改名为mysql-connector-java.jar
选择这个文件路径是因为impala的默认路径是这个,可以查看/etc/default/impala中的参数MYSQL_CONNECTOR_JAR
#配置文件设置
配置文件存在两个地方
##/etc/default/impala
该文件为impala的默认配置,包含了机器信息和相关路径配置,包括JDBC、impala的所有配置文件,这里需要修改的是metastore和catalog两个服务安装所在的主机信息,最终结果如下,高亮部分为修改地方,其中hdname为impala的catalog和state-store组件安装所在机器的host名,也即元数据mysql所在机器
==IMPALA_CATALOG_SERVICE_HOST=hdname==
==IMPALA_STATE_STORE_HOST=hdname==
IMPALA_STATE_STORE_PORT=24000
IMPALA_BACKEND_PORT=22000
IMPALA_LOG_DIR=/var/log/impala
IMPALA_CATALOG_ARGS=" -log_dir=${IMPALA_LOG_DIR} ==-state_store_host=${IMPALA_STATE_STORE_HOST}== "
IMPALA_STATE_STORE_ARGS=" -log_dir=${IMPALA_LOG_DIR} -state_store_port=${IMPALA_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}"
ENABLE_CORE_DUMPS=true
# LIBHDFS_OPTS=-Djava.library.path=/usr/lib/impala/lib
# MYSQL_CONNECTOR_JAR=/usr/share/java/mysql-connector-java.jar
# IMPALA_BIN=/usr/lib/impala/sbin
# IMPALA_HOME=/usr/lib/impala
# HIVE_HOME=/usr/lib/hive
# HBASE_HOME=/usr/lib/hbase
# IMPALA_CONF_DIR=/etc/impala/conf
# HADOOP_CONF_DIR=/etc/impala/conf
# HIVE_CONF_DIR=/etc/impala/conf
# HBASE_CONF_DIR=/etc/impala/conf
##/etc/impala/conf
实际上这个文件所在的位置是由/etc/default/impala中所决定的,有的版本可能是在/usr/lib/impala/conf下
hive、hdfs、core三个核心配置文件分别从hdfs和hive的配置文件中复制过来,如果有hbase-site.xml,也一起复制过来
结果如下:
修改文件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.datanode.hdfs-blocks-metadata.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.file-block-storage-locations.timeout</name>
<value>10000</value>
</property>
配置文件同步
将impala文件和conf文件夹同步到所有的impala-server节点
启动impala
确认所有的服务已经启动,包括hive、impala,查看impala启动服务可以使用命令
ps -ef |grep impala
如果正常的话,在hdname中有以下三个服务,如图
有可以通过url访问也可以通过浏览器访问相关的服务
主机名:25010 默认的元数据所在节点信息,
主机名:25000 server信息,任何有装server的节点都可以访问
主机名:25020 catalog信息
在任意一节点使用命令impala-shell
登录impala终端,连接到store中connect hdname;
执行命令invalidate metadata
更新元数据
结果如图
错误解决参考
错误1
路径权限问题
Error connecting: TTransportException, Could not connect to master:21000
在日志文件/var/log/impala中查看impalad.ERROR,错误如下
ERROR: short-circuit local reads is disabled because
- dfs.domain.socket.path is not configured.
- dfs.client.read.shortcircuit is not enabled.
解决方法
找到对应参数的下的值,查看该路径是否存在,impala用户是否有权限进行读写
错误2
invalidate metadata 更新元数据出错
错误代码
Query: invalidate metadata
ERROR: Couldn't open transport for hdname:26000 (connect() failed: Connection refused)
查看日志信息,有如下错误,无法读取datanode上的数据块信息
I0507 10:03:36.218281 21562 BlockStorageLocationUtil.java:177] Failed to query block locations on datanode 192.168.73.16:50020: org.apache.hadoop.ipc.RemoteException(java.lang.UnsupportedOperationException): Datanode#getHdfsBlocksMetadata is not enabled in datanode config
at org.apache.hadoop.hdfs.server.datanode.DataNode.getHdfsBlocksMetadata(DataNode.java:1547)
解决方法
注意:这里使用的端口说是26000,事实上在整个配置过程中没有任何的端口设置为26000,同时出现这种错误是在登录终端并且成功连接之后出现,也就是说这跟元数据相关
解决方法:
/etc/default/impala 中的配置项IMPALA_CATALOG_ARGS,需要增加参数 -state_store_host=${IMPALA_STATE_STORE_HOST}
结果如下
该参数告诉了catalog去哪个host找元数据,事实上在state-store的配置中也有重新设置state_store_host参数