将数据从 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 statementhadoop 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> LOAD DATA INPATH /yapstone/logs/pv_ext/somedatafor_7_11/Sacramentorealestatetransactions.csv INTO TABLE mytable;
注意:如果您将数据从 HDFS 加载到 HIVE (INPATH),数据将从 HDFS 移动 位置到 HIVE。因此,下次数据将无法在 HDFS 位置上使用。
检查数据是否加载成功。
hive> SELECT * FROM mytable;
【讨论】:
以上是关于将数据从 HDFS 复制到 Hive 中的外部表时出错的主要内容,如果未能解决你的问题,请参考以下文章