将数据从 HDFS 复制到 Hive 中的外部表时出错

Posted

技术标签:

【中文标题】将数据从 HDFS 复制到 Hive 中的外部表时出错【英文标题】:Error Copying data from HDFS to External Table In Hive 【发布时间】:2018-07-03 05:44:54 【问题描述】:

我正在尝试将数据从 hdfs 插入 hive 中的外部表。但低于错误。

错误:

Usage: java FsShell [-put <localsrc> ... <dst>]
Command failed with exit code = 255

命令

hive> !hadoop fs -put /myfolder/logs/pv_ext/2013/08/11/log/data/Sacramentorealestatetransactions.csv
    > ;

已编辑:

file location : /yapstone/logs/pv_ext/somedatafor_7_11/Sacramentorealestatetransactions.csv

table location : hdfs://sandbox:8020/yapstone/logs/pv_ext/2013/08/11/log/data

我在蜂巢里 执行命令

!hadoop fs -put /yapstone/logs/pv_ext/somedatafor_7_11/Sacramentorealestatetransactions.csv hdfs://sandbox:8020/yapstone/logs/pv_ext/2013/08/11/log/data

得到错误:

put: File /yapstone/logs/pv_ext/somedatafor_7_11/Sacramentorealestatetransactions.csv does not exist.
Command failed with exit code = 255

请分享您的建议。

谢谢

【问题讨论】:

【参考方案1】:

这里有两种方法可以将数据加载到外部Hive 表中。

方法一:

a) 获取Hive 外部表的HDFS 文件夹的位置。

hive> desc formatted mytable;

b) 注意输出中Location 属性的值。说是hdfs:///hive-data/mydata

c) 然后,将文件从本地磁盘放到HDFS

$ hadoop fs -put /location/of/data/file.csv hdfs:///hive-data/mydata

方法二:

a) 通过Hive 命令加载数据

hive > LOAD DATA LOCAL INPATH '/location/of/data/file.csv' INTO TABLE mytable;

【讨论】:

谢谢,但是当我尝试第一个语句时出现错误,例如:ParseException line 1:0 cannot identify input near 'hadoop' 'fs' '-' 当我尝试第二个选项时出现如下错误:ParseException line 1:23 mismatched input '/' expecting StringLiteral near 'INPATH' in load statement hadoop fs -put 语句应该在命令行执行(不是 hive shell 提示符) 对于使用方法2的错误,我认为可能是由于引号引起的。确保引号是单引号 ' 而不是反引号。 我已经编辑了这个问题,有人可以帮我看看我在这里犯了什么错误【参考方案2】:

另一种方法。更改 Hive 表位置:

alter table table_name set location='hdfs://your_data/folder';

【讨论】:

【参考方案3】:

这个方法可以帮助你更好。

    需要在 HIVE 中创建一个表。

    hive> CREATE EXTERNAL TABLE IF NOT EXISTS mytable(myid INT, a1 STRING, a2 STRING....) row format delimited fields terminated by '\t' stored as textfile LOCATION hdfs://sandbox:8020/yapstone/logs/pv_ext/2013/08/11/log/data;

    将数据从 HDFS 加载到 hive 表。

    hive&gt; LOAD DATA INPATH /yapstone/logs/pv_ext/somedatafor_7_11/Sacramentorealestatetransactions.csv INTO TABLE mytable;

    注意:如果您将数据从 HDFS 加载到 HIVE (INPATH),数据将从 HDFS 移动 位置到 HIVE。因此,下次数据将无法在 HDFS 位置上使用。

    检查数据是否加载成功。

    hive&gt; SELECT * FROM mytable;

【讨论】:

以上是关于将数据从 HDFS 复制到 Hive 中的外部表时出错的主要内容,如果未能解决你的问题,请参考以下文章

Hive - 将数据复制到表中时出错

使用 create-hive-table 在 Hive 中创建表时如何使用自定义分隔符

覆盖 hive 表时备份 hdfs 分区数据

Hive:无法为 HDFS 中的现有数据创建外部表

即使从 hdfs 删除后,Hive 如何读取数据?

hive建表语句