Hadoop导入数据 - 正确的ETL方法

时间:2017-03-01 23:43:49

标签: hadoop import hive hdfs etl

我开始为我的一个项目学习Hadoop Stack(在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)将临时TABLE中的数据INSERT到ORC引擎上的单独的pernament表

    H)删除临时表

  3. 我的问题:

    1. 此流程是否最佳?也许有些东西可以更简单?

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

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

1 个答案:

答案 0 :(得分:0)

  

我认为你的观点2 - > D具有csv的常量布局。在那里面   case,你可以组合点F和H,而不是创建和   每次都删除表,你可以创建一个模板临时表和   每次都会覆盖数据。

例如:

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

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

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

这会减少您处理的时间。

我不确定java,但我已经使用了很多python并且在我的工作中实现了这些类似的要求。由于其多样性和不同的模块,我从来没有感受到任何python的挑战。

  

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