我有一个问题需要解决,并且想知道我是否正确使用Hadoop这样的问题将其分布到多个节点或使用其他东西..
问题:
我有一个非常大的数据库表,可能有大量的记录,每个记录都有关联的元数据字段(表示为表中的列)和值。我想要的是:
鉴于某些标准,例如搜索包含元数据字段X和值Y的记录,我想要检索一些记录,但更重要的是,我想为用户提供一些关于下一步搜索的智能建议,以便他们可以也许会找到一些他们不知道的有趣记录。我计划这样做的方法是检查所有匹配的记录元数据字段和值,并向用户提供有趣的选择以进一步过滤(确定有趣的内容的任务与此问题无关)。
现在,如果我的表有非常大量的记录,并且初始“过滤器”与很多记录相匹配,那么检索所有记录然后扫描其他列以获取建议可能需要很长时间,如果它所有这些都是在一个查询中完成的,甚至是迭代逐步获取越来越多记录的查询。
我认为可以通过将任务分配到多个节点来搜索不同的记录来解决这个问题。我的问题是,我应该为此调查Hadoop(分配负载),还是有人可以建议其他方法来完成此任务?
由于
丹尼尔
答案 0 :(得分:1)
话虽如此,但仍有一些解决方法,例如使用 Hive 。 Hive是Hadoop系列的另一个成员,它在现有Hadoop集群之上提供仓储功能。它允许我们将HDFS文件映射为可以方便查询的Hive表。此外,它提供了一个类似SQL的接口来查询这些表。但是,如果你有实时需求,Hive不适合。
我觉得 Imapala 会对您更有用,它允许查询我们的BigData以保持实时性。
我上面提到的原因是你的用例需要的不仅仅是Hadoop提供的可扩展性。除了分配负载的能力外,您的解决方案还应该能够满足您上面指定的需求。它不仅仅是通过一组计算机分发您的数据并对其进行原始查询。您的用户需要实时响应以及您在问题中提到的智能建议功能。
您实际上需要一个比Hadoop集群更智能的系统。请查看 Apache Mahout 。它是一个很棒的工具,提供推荐挖掘的功能,可以轻松地与Hadoop一起使用。您可以找到更多主页。我一定会帮助您在系统中添加智能建议功能。
您可能想看看Hadoop系列的另一个工具 HBase ,它是一个分布式,可扩展的大数据存储。它的作用类似于数据库,但它不是关系数据库。它还可以在现有的Hadoop集群上运行,并提供实时随机读/写功能。阅读一下它,看它是否适合某个地方。
最后但并非最不重要,这完全取决于您的需求。只有在尝试不同的事情并进行比较研究之后,才能做出确切的决定。我们可以根据我们的经验向您推荐,但只有在测试了一些工具并找到最符合您要求的工具后,才能做出公平的决定:)
答案 1 :(得分:1)
如果你想要一个非常实时(大约200毫秒)的搜索应用程序响应,对于第一次搜索查询响应和进一步建议的搜索响应,Hadoop不是一个好的选择,甚至不是Hive,HBase,甚至Impala(或Apache Drill,Google Dremel like system)。
Hadoop是一个批处理系统,适合一次写入,多次读取用例。它的优势在于可扩展性和I / O throuput。我看到的趋势是许多组织将其用作离线数据挖掘和BI分析的数据仓库,以替代基于关系数据库的数据仓库。
Hive和HBase都在Hadoop之上提供了额外的功能,但对于平均复杂的查询工作负载,这些功能都不可能达到200ms。
在Apache Drill主页上查看每个可能的解决方案真正实现的“实时”高级视图。 CloudEra Impala或Apache Drill借鉴了Google Dremel的想法,旨在通过执行查询优化,基于列的存储,I / O的大规模并行来提高Hadoop之上的查询速度。我相信这两个人仍然处于早期阶段,以实现他们所声称的目标。我发现了一些initial performance benchmarking result of Impala。
如果您决定使用Hadoop或相关解决方案堆栈,可以使用Sqoop或利用Hadoop分布式文件系统API的其他自定义数据加载应用程序将数据从MySQL加载到Hadoop。但是如果你不时有新的数据进入MySQL,那么你需要安排一个作业定期运行以从MySQL到Hadoop进行增量加载。
另一方面,构建Hadoop集群以及从MySQL到Hadoop查找或构建合适的数据加载工具的工作量可能是一项巨大的工作量。此外,您还需要为运行时数据访问找到合适的额外层,并围绕它构建代码,无需使用Impala或其他东西。要解决您自己的问题,最好是构建自己的自定义解决方案,例如在内存缓存中使用数据库中的元数据进行热记录,以及一些索引机制,以快速找到建议的搜索查询计算所需的数据。如果一台计算机上的内存无法容纳足够的记录,则内存缓存网格或群集组件会派上用场,如Memcached或Reddis,EhCache等。