【问题标题】: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

是否需要执行一些命令才能让所有 impalads 在数据节点上运行以创建可查询的表?

【问题讨论】:

    标签: hadoop hdfs impala


    【解决方案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 应该部署客户端配置,但在某些版本中它有时会失败。

      【讨论】:

        猜你喜欢
        • 2021-08-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-11
        • 2016-04-28
        • 1970-01-01
        • 2011-11-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多