为啥 Impala 表定义不复制?
Posted
技术标签:
【中文标题】为啥 Impala 表定义不复制?【英文标题】:Why Don't Impala Table Definitions Replicate?为什么 Impala 表定义不复制? 【发布时间】:2013-10-29 00:17:43 【问题描述】:我使用 CDH 4.7(包括 Impala 1.1)创建了一个简单的四节点 Hadoop 集群。我能够将 CSV 文件复制到 HDFS 并通过 the tutorial 中的描述创建和查询 Impala 表。但是我不能在不同的数据节点上查询同一张表:
[example.com:21000] > select * from tab1;
Query: select * from tab1
ERROR: AnalysisException: Table does not exist: default.tab1
我想也许我需要在第二个节点上重新发出CREATE TABLE
语句,但它突然知道表在那里:
[example.com:21000] > CREATE EXTERNAL TABLE tab1
> (
> id INT,
> col_1 BOOLEAN,
> col_2 DOUBLE,
> col_3 TIMESTAMP
> )
> ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
> LOCATION '/user/dwheeler/sample_data/tab1';
Query: create EXTERNAL TABLE tab1
(
id INT,
col_1 BOOLEAN,
col_2 DOUBLE,
col_3 TIMESTAMP
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/user/theory/sample_data/tab1'
ERROR: AlreadyExistsException: Table tab1 already exists
所以它知道它在那里,但我无法查询它 --- 或刷新它:
[example.com:21000] > refresh tab1;
Query: refresh tab1
ERROR: AnalysisException: Table does not exist: default.tab1
是否需要执行一些命令才能让所有 impalad
s 在数据节点上运行以创建可查询的表?
【问题讨论】:
【参考方案1】:我提交了bug report 并得到了答复:
在 Impala 1.1 和更早版本中,您需要发出明确的“使元数据无效”命令,以使在其他节点上创建的表对本地 Impala 守护进程可见。
从 Impala 1.2 开始,这不是必需的;新的目录服务将负责将元数据分发到集群中的所有 impalad。
所以我没有注意到INVALIDATE METADATA
。很高兴听到在 2.0 中不需要它。
【讨论】:
【参考方案2】:我也遇到了同样的问题,但没有被解决
invalidate metadata;
原来我的蜂巢正在访问一个本地 derby 数据库,而 impala 看不到该数据库。
确凿证据:
在我通过 hive 导入表的系统上,我有
cat /etc/hive/conf/hive-site.xml
[...]
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby:;databaseName=/var/lib/hive/metastore/metastore_db;create=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
[...]
解决办法:
我从 Cloudera Manager 重新部署了 hive 客户端配置。
之后:
cat /etc/hive/conf/hive-site.xml
[...]
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://[snipped-host-name]:[snipped-port]</value>
</property>
显然 Cloudera Manager 应该部署客户端配置,但在某些版本中它有时会失败。
【讨论】:
以上是关于为啥 Impala 表定义不复制?的主要内容,如果未能解决你的问题,请参考以下文章
如果无效元数据可以做同样的事情,为啥需要在 Impala 中刷新