【发布时间】:2018-10-04 19:26:50
【问题描述】:
我正在尝试通过 Ambari 将大型 csv 文件(每个 ~4G)加载到 Hive。 下面的 CREATE TABLE - LOAD DATA 过程适用于较小的 csv 文件,但不适用于如此大的文件。它不断返回服务器错误“无法获取表信息”。
我目前使用的代码是:
CREATE TABLE my_table(
id int,
text string )
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
和
LOAD DATA INPATH 'mypath/INPUT.csv' OVERWRITE INTO TABLE my_table;
有没有更好的上传大型 csv 文件的方法?
提前致谢
【问题讨论】:
-
您可以将
hdfs dfs -put的文件放到hdfs:///apps/hive/warehouse位置 -
您好 cricket_007,感谢您的回复。但现在我已经将文件放在 hdfs 上,我正在努力研究如何将表加载到 Hive 表中。
-
如果文件已经在HDFS中,那么
CREATE EXTERNAL TABLE ... LOCATION 'hdfs:///your_hdfs_path' -
我的理解这个命令只创建了一个表格框,除了表头之外不包含任何数据线。那么如何将数据放入外部表中呢?谢谢。
-
只有元数据而不是存储中实际文件的外部表。由您的表属性设置的任何数据(例如
row format delimited fields terminated by或stored as)都将应用于该位置中的所有现有文件...另一种方法是首先创建一个非外部表,然后使用LOAD DATA之类的命令你已经完成了。无论哪种方式,文件的大小都无关紧要,因为您实际上并没有“移动”任何数据。在我看来,这里的解决方案是不要使用 Ambari 等 Web UI,而是使用 Beeline,在那里您可以获得更好的错误消息