我创建了一个简单的四节点Hadoop集群,其中包含CDH 4.7,包括Impala 1.1。我能够将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
runnig以生成可查询的表?
答案 0 :(得分:2)
我提交了bug report并得到了答案:
在Impala 1.1及更早版本中,您需要发出一个显式的“invalidate metadata”命令,以使在其他节点上创建的表对本地Impala守护程序可见。
从Impala 1.2开始,这不是必需的;新的目录服务将负责将元数据分发到集群中的所有impalad。
所以INVALIDATE METADATA
我没有注意到。很高兴听到在2.0中没有必要。
答案 1 :(得分:1)
我认为是同样的问题,但
没有解决invalidate metadata;
原来我的蜂巢正在访问本地德比数据库,这是impala无法看到的。
吸烟枪:
在我通过配置单元导入表格的系统上,我有
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重新部署了配置单元客户端配置。
之后:
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应该部署客户端配置,但在某些版本中它有时无法实现。