【问题标题】:Hadoop importing data - right ETL approachHadoop 导入数据 - 正确的 ETL 方法
【发布时间】:2017-03-02 12:21:32
【问题描述】:

我开始为我的一个项目学习 Hadoop 堆栈(hadoop 堆栈中的新手)。我试图找出将数据放入 HIVE 的 ETL 过程的最佳方法。我有一些可行的解决方案,但我认为它不是最佳的,并且有更好的选择。

我的情况: 我有系统生成的二进制文件中的原始数据。在将它们放在 HDFS/HIVE 上之前,我必须使用 unix 控制台程序(非常复杂)解析它们以获取带有数据的文本行,然后将其放置到 HIVE 表中。

我目前的解决方案:

  1. 系统向 Kafka 添加一条消息,表明有一个新的二进制文件等待处理。

  2. 我在 hadoop 主节点上有一个 python 脚本(至少现在是这样):

    A) 接收 Kafka 消息

    B) 下载文件。

    C) 执行控制台程序

    D) 将文本输出保存到 CSV

    E) 将 CSV 文件推送到 HDFS

    F) 从 CSV 文件在 HIVE 中创建临时表

    G) 在 ORC 引擎上将临时 TABLE 中的数据插入单独的永久表中

    H) 删除临时表

我的问题:

  1. 这个流程是最优的吗?也许有一些可以更简单的东西?

  2. 是否可以在每个 hadoop 节点上自动调度/部署/执行这个 python 脚本(或其他更好的技术?)?

  3. 关于使整个过程易于维护、安排和高效的工具/选项的任何线索?

【问题讨论】:

    标签: hadoop import hive hdfs etl


    【解决方案1】:

    我假设你的第 2 点 - > D 有一个不变的 csv 布局。在那里面 在这种情况下,您可以组合点 F 和 H ,而不是创建和 每次删除表,您可以创建一个模板临时表和 每次都覆盖数据。

    例如:

    create external table  template
    (
    ---- Your csv schema. 
    )
    

    接下来你可以尝试以下类型的插入:

    LOAD DATA LOCAL INPATH '%s' OVERWRITE INTO TABLE template;
    

    这将减少您的处理时间。

    我不确定 java ,但我使用了很多 python 并在我的工作中实现了这些类似的要求。由于 Python 的多样性和可用的不同模块,我从未对 Python 感到任何挑战。

    如果您在 UNIX 框中实现此功能,您可以使用 cron 或 oozie 来安排整个自动化。

    【讨论】:

    • 感谢提供线索。表现在由以下人员创建:CREATE EXTERNAL TABLE IF NOT EXISTS template ( ---- CVS Schema ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE location 其中位置是 HDFS CSV 文件的路径。在此之后,我使用:INSERT INTO TABLE target_table SELECT * FROM template; DROP TABLE IF EXISTS template;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多