首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用分布式计算集群解决“小数据”问题?

用分布式计算集群解决“小数据”问题?
EN

Stack Overflow用户
提问于 2022-03-09 19:01:07
回答 1查看 85关注 0票数 1

我正在学习Hadoop + MapReduce and Big Data,据我所知,Hadoop生态系统似乎主要是为了分析分布在许多服务器上的大量数据。我的问题有点不同。

我有相对较少的数据(一个由1,000万行数字组成的文件),需要以数百万种不同的方式进行分析。例如,考虑以下数据集:

代码语言:javascript
复制
[1, 6, 7, 8, 10, 17, 19, 23, 27, 28, 28, 29, 29, 29, 29, 30, 32, 35, 36, 38]
[1, 3, 3, 4, 4, 5, 5, 10, 11, 12, 14, 16, 17, 18, 18, 20, 27, 28, 39, 40]
[2, 3, 7, 8, 10, 10, 12, 13, 14, 15, 15, 16, 17, 19, 27, 30, 32, 33, 34, 40]
[1, 9, 11, 13, 14, 15, 17, 17, 18, 18, 18, 19, 19, 23, 25, 26, 27, 31, 37, 39]
[5, 8, 8, 10, 14, 16, 16, 17, 20, 21, 22, 22, 23, 28, 29, 30, 32, 32, 33, 38]
[1, 1, 3, 3, 13, 17, 21, 24, 24, 25, 26, 26, 30, 31, 32, 35, 38, 39, 39, 39]
[1, 2, 4, 4, 5, 5, 10, 13, 14, 14, 14, 14, 15, 17, 28, 29, 29, 35, 37, 40]
[1, 2, 6, 8, 12, 13, 14, 15, 15, 15, 16, 22, 23, 24, 26, 30, 31, 36, 36, 40]
[3, 6, 7, 8, 8, 10, 10, 12, 13, 17, 17, 20, 21, 22, 33, 35, 35, 36, 39, 40]
[1, 3, 8, 8, 11, 11, 13, 18, 19, 19, 19, 23, 24, 25, 27, 33, 35, 37, 38, 40]

我需要分析每一列的数量(Column N)在一定数量的行之后重复自己的频率(L rows later )。例如,如果我们使用Column A (1行-稍后)来分析1L,结果如下:

代码语言:javascript
复制
Note: The position does not need to match - so number can appear anywhere in the next row
Column: A N-Later: 1 Result: YES, NO, NO, NO, NO, YES, YES, NO, YES  -> 4/9.

我们将对每一列分别重复上述分析,并在以后对最大N次重复分析。在上面的数据集中,它仅由10行组成,它意味着以后最大的9N。但在100万行的数据集中,分析(每列)将重复99,999次。

我研究了MapReduce框架,但它似乎并没有削减它;对于这个问题,它似乎不是一个有效的解决方案,它需要大量的工作才能将核心代码转换为一个MapReduce友好的结构。

正如您在上面的例子中所看到的,每个分析都是相互独立的。例如,可以分别分析Column AColumn B。还可以单独执行1L分析和2L分析等等。但是,与数据驻留在不同机器上的Hadoop不同,在我们的场景中,每个服务器都需要访问所有的数据来执行它的“共享”分析。

我研究了这个问题的可能解决方案,似乎很少有选择:射线或在YARN上使用阿帕奇斜纹构建自定义应用程序。Apache在2020年是搬到阁楼,这意味着Ray是唯一可用的选项。

Ray是解决这个问题的最好方法,还是有其他更好的选择?理想情况下,解决方案应该自动处理故障转移并智能地分配处理负载。例如,在上面的例子中,如果我们想要将负载分配给20台机器,一种方法是稍后将999,999 N除以20,然后让机器A分析1L-49999L,机器B从5000-1000000 L,等等。但是,考虑到这一点,负载并不是平均分配的,因为需要更长的时间来分析1L而不是50万L,因为后者只包含大约一半的行数(对于50万L,我们分析的第一行是第500001行,所以我们实际上是从分析中忽略了第一个500 K行)。

它还应该是而不是,需要对核心代码进行大量修改(就像MapReduce那样)。

我和Java一起工作。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2022-03-20 14:32:46

嗯,你是对的-你的场景和你的技术栈不太合适。,它提出了一个问题,--为什么不添加一些与您当前的技术栈更相关的内容呢?例如- Redis。

似乎您的常见操作主要是计数值,您希望防止过度计算,使其更具表现力(例如-正确地索引您的数据)。考虑到这是Redis的主要特性之一,使用它作为处理器听起来是合乎逻辑的。

我的建议:

创建一个hashmap,它使用数字值作为键,其计数作为值。这样--您将能够对这些指标进行不同的计算,并且总是迭代数据集一次。之后-您只需要通过不同的标准(每次计算或度量)从Redis中提取数据。

从现在开始,很容易将计算出来的数据保存回数据库,并为直接查询做好准备。整个过程可能与此类似:

  • 从文件中扫描数据
  • 正确地将其索引到redis (使用hashmap)
  • 进行所需的计算(对索引计数)
  • 将其保存在数据库中(作为一个经过消化的数据集)
  • 刷新Redis DB
  • 查询您的DB (随您喜欢多少)

跟踪这两个填充和检索数据的文档

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71414721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档