为什么不复制impala表定义?

3wabscal  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(362)

我用cdh4.7创建了一个简单的四节点hadoop集群,包括impala1.1。我能够将csv文件复制到hdfs中,并按照教程中所描述的那样在服务器上创建和查询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 在数据节点上运行以生成可查询表?

pu82cl6c

pu82cl6c1#

我有我认为是同一个问题,但没有解决

invalidate metadata;

原来我的Hive正在访问本地的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重新部署了配置单元客户端配置。
之后:

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>

显然,clouderamanager应该部署客户端配置,但在某些版本中,它有时无法这样做。

oyt4ldly

oyt4ldly2#

我提交了一份错误报告,得到了一个答案:
在impala1.1和更早版本中,需要发出显式的“invalidatemetadata”命令,使在其他节点上创建的表对本地impala守护进程可见。
从 Impala 1.2开始,这是没有必要的;新的目录服务将负责集群中所有impalad的元数据分发。
原来是这样 INVALIDATE METADATA 我没有注意到。很高兴听到在2.0中不需要它。

相关问题