hadoop导入数据-正确的etl方法

0qx6xfy6  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(322)

我开始为我的一个项目学习hadoop堆栈(hadoop堆栈方面的新手)。我试图找出将数据放入配置单元的etl过程的最佳方法。我有一些可行的解决方案,但我认为这不是最佳的,还有更好的选择。
我的情况是:我有一个由系统生成的二进制文件中的原始数据。在将它们放到hdfs/hive之前,我必须使用unix控制台程序(相当复杂)对包含数据的文本行进行解析,然后将其放到hive表中。
我当前的解决方案:
系统向kafka添加一条消息,表示有一个新的二进制文件正在等待处理。
我在hadoop主节点上有一个python脚本(至少目前是这样):
a) 接收Kafka信息
b) 正在下载文件。
c) 执行控制台程序
d) 将文本输出保存到csv
e) 将csv文件推送到hdfs
f) 从csv文件在配置单元中创建临时表
g) 将临时表中的数据插入orc引擎上的单独pernament表
h) 删除临时表
我的问题:
这个流程是最优的吗?也许有更简单的方法?
有没有可能在每个hadoop节点上自动调度/部署/执行这个python脚本(或者其他更好的技术?)?
关于使整个过程易于维护、安排和高效的工具/选项有何线索?

6mw9ycah

6mw9ycah1#

我假设你的点2->d有一个固定的csv布局。在这种情况下,您可以合并点f和h,而不是每次都创建和删除表,您可以创建一个模板temp表并在下次覆盖数据。
例如:

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

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

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

这将减少处理过程中的一些时间。
我对java不太清楚,但我已经使用了很多python,并在工作中实现了这些类似的需求。由于python的多样性和不同的可用模块,我从未感觉到任何挑战。
如果您是在unixbox中实现的,那么可以使用cron或oozie来调度整个自动化过程。

相关问题