【问题标题】:Hive External table not showing anythingHive 外部表未显示任何内容
【发布时间】:2015-04-27 05:59:48
【问题描述】:

我正在尝试通过以下链接中的 twitter 数据教程来学习 Hive。 https://github.com/cloudera/cdh-twitter-example/

我已经成功安装和配置了 hadoop 和 hive,并测试了简单的文本文件加载到 hive 表中。到目前为止一切正常。

但是,即使文件存在于 hdfs 中,外部表也没有显示任何内容。

我使用下面的代码来创建表格。

CREATE EXTERNAL TABLE (
... 
 Columns ....
...
)
PARTITIONED BY (datehour INT)
ROW FORMAT SERDE 'com.cloudera.hive.serde.JSONSerDe'
LOCATION '/user/flume/tweets';

我认为问题出在我的 hdfs 中的文件夹结构.. 它目前遵循年/月/日/小时/如下所示。

/user
  -- /flume
      -- /tweets
          -- /2015         
              -- 04        
                -- 01      
                 -- 13     
                 -- 14
                -- 02
                 -- 15
                 -- 16

在 Hive 中创建外部表时,有没有办法为此文件夹结构正确设置分区?

提前感谢您的帮助...

【问题讨论】:

    标签: hadoop hive flume


    【解决方案1】:

    您必须将分区添加到表中。

      ADD JAR   your-serde-jar-file-path.jar
    
    
      ALTER TABLE tweets ADD IF NOT EXISTS PARTITION (datehour = 2015040113) LOCATION '/user/flume/tweets/2015/04/01/13';
    

    -你必须传递 datehour 和 partionpath 形式的 oozie cord 文件。

     ADD JAR ${JSON_SERDE};
    
    ALTER TABLE tweets ADD IF NOT EXISTS PARTITION (datehour ${DATEHOUR}) LOCATION '${PARTITION_PATH}';
    

    请参考 http://blog.cloudera.com/blog/2013/01/how-to-schedule-recurring-hadoop-jobs-with-apache-oozie/

    【讨论】:

    • 那么这个alter语句有什么作用呢?这是否意味着我需要将每天和每月的每个小时的分区一个一个地手动添加到表中?
    • 它将分区添加到推文表中。在该更改语句中,您必须提供该分区的位置。推荐它-blog.zhengdong.me/2012/02/22/…
    • 你应该通过 Oozie hive-action 来安排它。参考它...blog.cloudera.com/blog/2013/01/…
    • 太棒了... Oozie 是我接下来要学习的。将尝试!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 2017-08-10
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多