【问题标题】:how to preprocess the data and load into hive如何预处理数据并加载到 hive
【发布时间】:2015-10-01 07:55:16
【问题描述】:

我完成了我的 hadoop 课程,现在我想在 Hadoop 上工作。我想知道从数据摄取到可视化数据的工作流程。

我知道生态系统组件是如何工作的,并且我已经构建了具有 8 个数据节点和 1 个名称节点的 hadoop 集群: 1 namenode --Resourcemanager,Namenode,secondarynamenode,hive 8个datanodes--datanode,Nodemanager

我想知道以下几点:

  1. 我得到了数据 .tar 结构化文件,前 4 行有描述。我有点困惑如何处理这种类型的数据。 1.a 我可以直接处理数据,因为这些是 tar 文件。如果是,如何删除前四行中的数据,我应该解压缩并删除前 4 行 1.b,我想使用 hive 处理这些数据。

请建议我如何做到这一点。

提前致谢。

【问题讨论】:

    标签: hadoop hive hadoop-streaming


    【解决方案1】:

    我可以直接处理数据吗,因为这些是 tar 文件。

    是的,请参阅以下解决方案。

    如果是,如何去掉前四行的数据

    Hive v0.13.0开始,有一个table属性,tblproperties ("skip.header.line.count"="1")同时创建一个表告诉Hive要忽略的行数。忽略前四行 - tblproperties ("skip.header.line.count"="4")

    CREATE TABLE raw (line STRING)
       ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n';
    
    CREATE TABLE raw_sequence (line STRING)
       STORED AS SEQUENCEFILE
       tblproperties("skip.header.line.count"="4");
    
    LOAD DATA LOCAL INPATH '/tmp/test.tar' INTO TABLE raw;
    
    SET hive.exec.compress.output=true;
    SET io.seqfile.compression.type=BLOCK; -- NONE/RECORD/BLOCK (see below)
    
    INSERT OVERWRITE TABLE raw_sequence SELECT * FROM raw;
    

    查看数据:

    select * from raw_sequence
    

    参考:Compressed Data Storage

    【讨论】:

      【解决方案2】:

      按照以下步骤实现您的目标:

      1. 将数据(即.tar 文件)复制到安装了hadoop 的客户端系统中。
      2. 解压文件并手动删除描述并将其保存在本地。
      3. 根据描述在 hive 中创建元数据(即表)。
        例如:如果描述包含 emp_id、emp_no 等,则使用此信息在 hive 中创建表,也记下数据文件中使用的字段分隔符,并在创建表查询中使用相应的字段分隔符。假设文件包含用逗号分隔的两列,那么下面是在 hive 中创建表的语法。

          Create table tablename (emp_id int, emp_no int)
          Row Format Delimited
          Fields Terminated by ','
        
      4. 由于数据是结构化格式,您可以使用以下命令将数据加载到配置单元表中。 LOAD DATA LOCAL INPATH '/LOCALFILEPATH' INTO TABLE TABLENAME.

      5. 现在,本地数据将被移动到 hdfs 并加载到 hive 表中。

      6. 最后可以使用SELECT * FROM TABLENAME;查询hive表

      【讨论】:

      • 感谢您的快速回复。我现在有了一个想法。在我的情况下文件结构: /home/admin/jan/file1 --> file1.tar 文件 zip 已在主目录上完成,因此如果我解压缩此文件,则将创建如下结构的文件,/home/admin/jan/在上述情况下,file1 将使用 hive 外部表读取文件吗?您能否让我知道在 Namenode 或 Datanode 上安装 hive 的位置?我在启动服务时在同一台服务器上配置了Datanode和secondarynamenode,我看到secondarynamnode正在0.0.0.0上运行..
      • 是的,您可以创建外部表,但数据应该在 HDFS 中而不是在本地主目录中。因此,使用 hadoop fs -put /home/admin/jan/file1 /hdfs_path 命令将数据从本地放入 hdfs,然后使用 CREATE EXTERNAL TABLE TABLENAME(COL...) LOCATION '/hdfs_path 在该数据上创建外部表' 命令。您也可以在集群中的任何节点上安装 hive。
      • 我的hadoop中有如下目录结构,/hadoop/maindirec/subdirect1/files1-100 /hadoop/maindirec/subdirect2/files1-100 /hadoop/maindirec/subdirect3/files1-100 /hadoop /maindirec/subdirect4/files1-100 /hadoop/maindirec/subdirect5/files1-100 现在我想创建 hive 表,其中 orc 格式作为 maindirec,subdirect1-5 作为分区
      猜你喜欢
      • 1970-01-01
      • 2017-01-16
      • 2019-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多