【问题标题】:Load large csv files to Hive through Ambari通过 Ambari 将大型 csv 文件加载到 Hive
【发布时间】: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 bystored as)都将应用于该位置中的所有现有文件...另一种方法是首先创建一个非外部表,然后使用LOAD DATA 之类的命令你已经完成了。无论哪种方式,文件的大小都无关紧要,因为您实际上并没有“移动”任何数据。在我看来,这里的解决方案是不要使用 Ambari 等 Web UI,而是使用 Beeline,在那里您可以获得更好的错误消息

标签: csv hadoop hive ambari


【解决方案1】:

您能否通过不提及文件格式(文本)来创建表格。

CREATE TABLE my_table(
  id int, 
  text string )
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',';

然后,您能否将文件上传到创建表的其他位置。那么你能尝试使用加载数据路径查询吗?

【讨论】:

  • 您好 Tanvir,在加载数据路径查询后,我仍然遇到相同的“无法获取表信息”错误。
【解决方案2】:

首先创建表然后运行show create table my_table;

在此您会看到表的结构,其中还提到了该表的 hdfs location。 在该 hdfs 路径上,将要加载的文件放入表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 2013-01-17
    • 1970-01-01
    相关资源
    最近更新 更多