【问题标题】:Unable to Create Table in HIVE reading a CSV from HDFS无法在从 HDFS 读取 CSV 的 HIVE 中创建表
【发布时间】:2020-12-15 01:19:27
【问题描述】:

通过从 HDFS 读取 .csv 文件在 Hive 中创建表时遇到问题。查询如下:

CREATE EXTERNAL TABLE testmail (memberId String , email String, sentdate String,actiontype String, actiondate String, campaignid String,campaignname String)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
LOCATION '/user/hadoop/cloudera/ameeth/ca_email.csv';

获取错误。 元数据错误:

MetaException(消息:hdfs://PC:8020/user/hadoop/cloudera/ameeth/ca_email.csv 不是目录或无法创建)

任何人都可以帮助我吗?实际上我想在 .sql 文件中运行这样的语句作为作业

【问题讨论】:

    标签: hadoop hive hdfs


    【解决方案1】:

    Hive 会拾取您在 LOCATION 中指定的目录中的所有文件。您无需指定文件名。

    这应该可行:

    CREATE EXTERNAL TABLE testmail (memberId String , email String, sentdate String,actiontype String, actiondate String, campaignid String,campaignname String) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/user/hadoop/cloudera/ameeth';
    

    【讨论】:

    • 感谢它正在工作。但是如果我以以下格式给出它会抛出错误
    • CREATE EXTERNAL TABLE testmail (memberId String , email String, sentdate String,actiontype String, actiondate String,campaignid String,campaignname String) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','; LOAD DATA LOCAL INPATH '/user/hadoop/cloudera/ameeth/ca_email.csv' INTO TABLE testmail;
    • FAILED: SemanticException Line 1:17 Invalid path ''/user/hadoop/cloudera/ameeth/ca_email.csv'':没有文件匹配路径 hdfs 给出此错误
    • 傻,傻我。您正在给出从 LOCAL INPATH 加载数据的命令。结果 hive 试图在本地文件系统上定位路径,而不是在 HDFS 上。如果要指定 HDFS 路径,请使用 INPATH 而不是 LOCAL INPATH。
    • 如果两个文件(.txt)位于同一位置,hive 将如何找出要加载的文件
    【解决方案2】:

    走这条路

    在 cloudera 中找到您的 metastore_db 文件夹 并删除 *.lck 文件

    命令 sudo rm /folder_path/metastore_db/*.lck

    【讨论】:

      【解决方案3】:

      在 HDFS 上创建一个目录,并将您的 ca_email.csv 移入其中,然后将该目录指定为您的 CREATE EXTERNAL TABLE 命令的 LOCATION。

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题。

        我将 csv 文件更改为制表符分隔的文本文件,将文件移动到 hdfs 并通过加载相同的结果创建 hive 表。

        您可以在 hdfs 中查看文件,以确保您已按预期获得了由选项卡分隔的数据并加载到 hive 表中

        CREATE TABLE TABLE1
        ( 
             column1 string,
             column2 string,
             ....
             ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
        )LOAD DATA INPATH <hdfs location of tab delimited txt file> OVERWRITE INTO TABLE TABLE1
        

        【讨论】:

          猜你喜欢
          • 2020-07-28
          • 1970-01-01
          • 2020-10-13
          • 2016-06-20
          • 2017-09-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多