通过 Hue 在 hadoop 中加载大型 csv 只会存储 64MB 块

Posted

技术标签:

【中文标题】通过 Hue 在 hadoop 中加载大型 csv 只会存储 64MB 块【英文标题】:Load large csv in hadoop via Hue would only store a 64MB block 【发布时间】:2014-10-16 21:46:58 【问题描述】:

我正在使用 Cloudera 快速入门 vm 5.1.0-1

我试图通过 Hue 将我的 3GB csv 加载到 Hadoop 中,到目前为止我尝试的是: - 将 csv 加载到 HDFS 中,特别是加载到位于 /user/hive/datasets 的名为 datasets 的文件夹中 - 使用 Metastore Manager 将其加载到默认数据库中

一切正常,这意味着我设法用正确的列加载它。主要问题是,当我使用 Impala 查询表时,会启动以下查询:

显示表统计信息 new_table

我意识到大小只有 64 MB,而不是 csv 的实际大小应该是 3GB。

此外,如果我通过 Impala 进行计数(*),则行数仅为 70000,而实际为 700 万。

任何帮助将不胜感激。

提前致谢。

【问题讨论】:

在加载之前,CSV文件是否已经被截断? 不。到目前为止,我找到了一种解决方法,通过 Impala 创建表并从那里加载它,但在这种情况下,我必须指定 create table 语句,包括我拥有的所有 140 列。像创建表(A字符串,B int等)。管理起来很痛苦,因此我一直在寻找更自动化的解决方案。 【参考方案1】:

我也遇到了同样的问题。这是 Hue 如何通过具有 64MB 限制的 Web 界面导入文件的问题。

我一直在使用 Hive CLI 和 -f 标志对带有 DDL 代码的文本文件导入大型数据集。

例子:

hive -f beer_data_loader.hql

beer_data_loader.hql:

  CREATE DATABASE IF NOT EXISTS beer  
  COMMENT "Beer Advocate Database";


CREATE TABLE IF NOT EXISTS beer.beeradvocate_raw(  
    beer_name           STRING,
    beer_ID             BIGINT,
    beer_brewerID       INT,
    beer_ABV            FLOAT,
    beer_style          STRING,
    review_appearance   FLOAT,
    review_aroma        FLOAT,
    review_palate       FLOAT,
    review_taste        FLOAT,
    review_overall      FLOAT,
    review_time         BIGINT,
    review_profileName  STRING,
    review_text         STRING
    )
 COMMENT "Beer Advocate Data Raw"
 ROW FORMAT DELIMITED
  FIELDS TERMINATED BY '|'
 STORED AS parquet;


CREATE EXTERNAL TABLE IF NOT EXISTS beer.beeradvocate_temp(  
    beer_name           STRING,
    beer_ID             BIGINT,
    beer_brewerID       INT,
    beer_ABV            FLOAT,
    beer_style          STRING,
    review_appearance   FLOAT,
    review_aroma        FLOAT,
    review_palate       FLOAT,
    review_taste        FLOAT,
    review_overall      FLOAT,
    review_time         BIGINT,
    review_profileName  STRING,
    review_text         STRING
    )
 COMMENT "Beer Advocate External Loading Table"
 ROW FORMAT DELIMITED
  FIELDS TERMINATED BY '|'
 LOCATION '/user/name/beeradvocate.data';


INSERT OVERWRITE TABLE beer.beeradvocate_raw SELECT * FROM beer.beeradvocate_temp;  
DROP TABLE beer.beeradvocate_temp; 

【讨论】:

文件是用这样的命令永久存储在HDFS中的吗?【参考方案2】:

似乎是 Hue 中的一个错误。找到了解决方法。如果您在创建表时选中“从文件导入数据”复选框,则文件将被截断。保持未选中以创建一个空表。然后在 Metastore Manager 中选择新创建的表,并使用 Actions 菜单中的“Import Data”选项来填充它。这应该填充所有行。

【讨论】:

【参考方案3】:

此错误 (HUE-2501) 是在导入标头大于 64MB 的文件时发生的。

Peter 的解决方法很好,它已在 Hue 3.8 和 CDH5.3.2 中修复。

【讨论】:

将 CDH 5.12 与 HIVE 4 一起使用,问题显然仍然存在

以上是关于通过 Hue 在 hadoop 中加载大型 csv 只会存储 64MB 块的主要内容,如果未能解决你的问题,请参考以下文章

使用 sparklyr 时无法在本地 Spark 连接中加载 .csv 数据

在 Core Data 中加载 csv 文件

在 Spark 2.0 中加载压缩的 gzipped csv 文件

在 PigLatin 中加载 csv 文件

使用数据框在 Pandas 中加载 csv 文件

在 PIG 中加载 CSV 文件