我开始为我的一个项目学习Hadoop Stack(在hadoop堆栈中相当新手)。我试图找出将数据放入HIVE的ETL过程的最佳方法。我有一些有效的解决方案,但我认为它不是最优的,并且有更好的选择。
我的案例: 我在系统生成的二进制文件中有原始数据。在将它们放到HDFS / HIVE上之前,我必须使用unix控制台程序(相当复杂)对包含数据的文本行进行解析,然后将它放到HIVE表中。
我目前的解决方案:
系统向Kafka添加一条消息,表示有一个新的二进制文件正在等待处理。
我在hadoop主节点上有一个python脚本(至少目前为止):
A)接收Kafka消息
B)下载文件。
C)执行控制台程序
D)将文本输出保存为CSV
E)将CSV文件推送到HDFS
F)从CSV文件中创建HIVE中的临时表
G)将临时TABLE中的数据INSERT到ORC引擎上的单独的pernament表
H)删除临时表
我的问题:
此流程是否最佳?也许有些东西可以更简单?
这可以在每个hadoop节点上自动安排/部署/执行这个python脚本(或其他更好的技术吗?)?
有关工具/选项的任何线索,使整个过程易于维护,安排和高效?
答案 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安排整个自动化。