我需要对模式如下的数据执行漏斗分析:
A(int X) Matched_B(int[] Y) Filtered_C(int[] Z)
哪里, A
指可以发送多个请求的客户端id。数据管道中每个请求只存储客户端id,而不是存储请求id(我不知道为什么) Matched_B
指为查询返回的项的列表。 Flitered_C
是的子集 Matched_B
和指成功通过筛选器的项。
所有数据都存储在hdfs中的avro文件中。在hdfs中存储数据的qps约为12000。
我需要准备以下报告:
对于每个 (X,Y[i])
,次数 Y[i]
出现在 Matched_B
.
对于每个 (X,Y[i])
,次数 Y[i]
出现在 Filtered_C
.
基本上,我想知道这个任务是否只能使用配置单元执行?
目前,我正在考虑以下体系结构。
HDFS(avro_schema)--> Hive_Script_1 --> HDFS(avro_schema_1) --> Java Application --> HDFS(avro_schema_2) --> Hive_Script_2(external_table) --> result
哪里, avro_schema
是上面描述的模式。 avro_schema_1
由生成 Hive_Script_1
通过转换(使用 Lateral View explode(Matched_B
)) avro_schema
具体描述如下:
A(int X) Matched_B_1(int Y) Filtered_C(int[] Z) avro_schema_2
由java应用程序生成,描述如下: A(int X) Matched_B(int Y) Matched_Y(1 if Y is matched, else 0) Filtered_Y(1 if Y is filtered, 0 otherwise)
最后,我们可以运行一个配置单元脚本来处理每天生成的事件的数据。
另一个架构可能是我们移除的 avro_schema_1
生成和直接处理 avro_schema
并生成结果。
但是,我希望避免为此任务编写java应用程序。有人能给我指出解决上述问题的方法吗?
我还想了解一些架构对这个问题的有效解决方案的看法。
注:请考虑qps(12000)提出解决方案。
暂无答案!
目前还没有任何答案,快来回答吧!