真正的大数据如何在数据科学家老去之前导入 HDFS?

Posted

技术标签:

【中文标题】真正的大数据如何在数据科学家老去之前导入 HDFS?【英文标题】:How does truly big data import into HDFS before the data scientists grow old and die? 【发布时间】:2015-06-26 13:59:46 【问题描述】:

我是 Hadoop 的新手,相信我开始看到数据分析(“离线”)与超低延迟的网络应用程序世界有多么不同.我仍然难以理解的一件主要事情是,真正的“大数据”是如何首先进入 HDFS 的。

假设我在各种系统(RDBMS、NoSQL、日志数据等)中存储了 500TB 的数据。我的理解是,如果我想编写 MR 作业来查询和分析这些数据,我需要先将其全部导入/摄取到 HDFS 中。

但即使我在每个不同的系统和我的 Hadoop 集群之间有一个 1Gbps 的网络连接,这也是 500TB = 500 * 1000Gb = 500,000 GB 的数据,在 1Gbps 时,是 500,000 秒或 ~138 小时将所有数据移植到我的 HDFS 集群上。差不多一个星期了。

而且,如果我对大数据的理解是正确的,TB 规模实际上是相当低调的,许多大数据系统都扩展到了 PB 范围。现在我们最多需要几个月,甚至可能,才能针对它们运行 MR 作业。如果我们拥有超过 PB 数量级的系统,那么我们正在考虑让“飞行火箭踏板车”在数据还没有准备好被查询之前到处嗡嗡作响。

我在这里遗漏了一些基本的东西吗?这对我来说似乎不对。

【问题讨论】:

通常您将其放入系统中,而不是等到您有 TB 的数据要导入。 (假设你想把它全部放在 HDFS 中,而不是通过各种方式直接获取数据。) 感谢@DaveNewton (+1) - 这是有道理的。那么您是说,通常(但不一定)会进行并发写入:(a)一次写入主数据存储(再次,NoSQL,日志数据等)和(b)另一次并发写入直接写入 HDFS?像 Sqoop 或 Oozie 这样的工具是否用于此目的(并发写入/摄取)? 完全取决于。例如,您可以将规范化数据写入 RDBMS,然后将一些非规范化数据写入 HBase。 (再次+1)当然,但是以您的示例为例,您将开始在 HBase 中堆积 TB 的数据,这意味着您仍然是问题的根源:您现在如何将数据直接放到 HDFS 上进行查询? 【参考方案1】:

数据通常在生成时加载。但是,有一些工具可以帮助加载到 HDFS。

Apache Flume - https://flume.apache.org/ - 专为聚合大量日志数据而设计。 Flume 有许多捆绑的“源”,可用于使用日志数据,包括从文件、目录、队列系统读取,甚至接受来自 TCP/UDP/HTTP 的传入数据。有了它,您可以在多个主机上设置 Flume 以并行化数据聚合。

Apache Sqoop - http://sqoop.apache.org/ - 专为从结构化数据存储(如关系数据库)批量加载而设计。 Sqoop 使用连接器将数据连接、结构化和加载到 HDFS。内置的可以连接到任何符合 JDBC 4 规范的东西。

500TB 的数据需要加载大量数据,但如果它分布在多个系统和格式中,使用 Sqoop 和/或 Flume 应该可以相对快速地完成工作。

【讨论】:

以上是关于真正的大数据如何在数据科学家老去之前导入 HDFS?的主要内容,如果未能解决你的问题,请参考以下文章

如何在未来的大数据和机器学习领域,获得一份不错的工作?

Sqoop - 在导入到 HDFS 之前操作 Mysql 表

HDFS 为何在大数据领域经久不衰?

巧用符号链接迁移 HDFS 数据,业务完全无感知!

如何使用 Sqoop 从 RDBMS 将数据导入本地文件系统,而不是 HDFS?

如何通过 hdfs 导入/导出 hbase 数据(hadoop 命令)