SQL 到大数据的迁移?
Posted
技术标签:
【中文标题】SQL 到大数据的迁移?【英文标题】:SQL to BigData Migration? 【发布时间】:2013-06-10 09:20:44 【问题描述】:在我们正在运行的项目中,使用带有 C# 和 MS SQL 的 ASP.net 3.5,目前其数据库大小为 4 TB。它会增加 gradullay ,所以我们正在寻找解决方案。有人告诉我 BigData(使用 Hive + Hadoop)。 他给出了以下参考 https://cwiki.apache.org/confluence/display/Hive/GettingStarted http://www.codeproject.com/Articles/398563/Analyzing-some-Big-Data-Using-Csharp-Azure-And-Apa 我读过这两个链接,但不幸的是我不明白它们的意思!!!。 所以任何1解释我该怎么做?我应该将 MSSQL 迁移到 Hadoop 吗? 请告知更改为hadoop的硬件和软件要求?是否可以将我们当前的数据库迁移到hadoop?我已经阅读了一些主要用于搜索数据并且不支持多事务的软件? 如果可以迁移,那么我们希望与现有项目合作多少? 在这么多 TB 上,我们每秒有 400-500 个数据插入和事务
【问题讨论】:
几TB不应成为切换到不同数据库的理由。 MS SQL 应该能够毫无问题地处理它。您的尺寸有什么“问题”?表现?插入/更新或选择数据? 性能,不要认为 4 TB 是我们实际的大小,它只有 3 个月的备份大小,我们希望至少保持 3 年,所以大小将是它的 10 倍 好吧,在您达到 5000+ TB 之前,我不会考虑切换。即使那样,我也会每隔几年创建一次备份,而不是切换一次。确保您的数据库设计是正确的。不要使用 2 多个触发器。让您的键和索引优化性能。有关 MSSQL 规范,请参阅 msdn.microsoft.com/en-us/library/ms143432.aspx。 表示使用 sql 并检查性能 好的,谢谢您的帮助。但是你能告诉我关于hadoop和以上问题的答案吗,为了学习目的? 在您提供的链接中显示文件大小(数据)= 16 TB。那么在这 16 TB 之后我会做什么。(我们必须保留 3 年的数据) 【参考方案1】:我会分享一些我的经验。首先,我会分析 Hadoop 是否符合我的要求。 Hadoop 不是传统 RDBMS 的替代品。它用于完全不同的目的,即offline batch processing
,与用于实时查询的 RDBMS 不同。因此,如果您有实时需求,您最好再考虑一下。在这种情况下,您需要类似HBase。
您在此处显示的第一个链接是关于Hive。 Hive 是一个运行在现有 Hadoop 集群之上的数据仓库。除此之外,它还为您提供了一个类似 SQL 的界面,如果您来自 SQL 背景,它可以让您更轻松地以更轻松便捷的方式进行查询。 Hive 将数据作为 Hive 表存储在 HDFS(Hadoop 文件系统)之上。但同样 Hive 不适合实时的东西。如果您想对 Hadoop 数据执行实时查询,您可能会发现 Impala 非常合适。
第二个链接向您展示了如何将 Apache Hadoop 与 C# 和 Microsoft Windows Azure 一起使用。 Azure 是 Microsoft 的云平台产品。您可以在此here 上找到更多信息。此链接向您展示如何编写MapReduce 程序。 MapReduce 是一个计算框架,可让您以分布式和并行方式在机器集群上处理大量数据。
最初开发 Hadoop 是为了与 Linux 一起使用。但现在您也可以灵活地将它与 Windows 一起使用,提供 Azure 和 HDP 等解决方案。
Hadoop 不需要任何特殊的软件(除了 ssh、适当的语言翻译器等基本的东西)或复杂的硬件。它旨在在商品硬件上运行。但您可能想保留供应商规定的规格,您将遵循,牢记。
您可以通过编写自己的程序或使用更高级的工具(如 Sqoop)轻松地将 SQL 数据移动到 Hadoop 集群中。
搜索并不是使用 Hadoop 的唯一领域。这是一个非常好的link,它告诉我们可以使用 Hadoop 解决的常见问题。
希望这能回答您的一些问题。如果您有任何进一步的疑问,请告诉我。
回应您的评论:
Hadoop 基本上是两件事——分布式文件系统 (HDFS) 和处理框架 (MapReduce)。作为一个文件系统,它缺乏随机读/写能力。这就是像 HBase 这样的数据库出现的地方。此外,Hadoop 将数据存储为文件,而不是 HBase 的列。
如果您想通过 Hive 查询存储在 HDFS 中的数据,您可以将 HDFS 文件映射为 Hive 中的表并使用 HiveQL 查询它们。假设你在 HDFS 中有一个名为 'file.txt' 的文件,它有 2 个字段编号和名称,你会做这样的事情:
hive> CREATE TABLE demo (no INT, name STRING);
hive> LOAD DATA INPATH '/file.txt' INTO TABLE demo;
hive> Select * FROM demo;
【讨论】:
感谢您的宝贵建议。我知道这么多 Hadoop 不是数据库,它是分布式数据存储(意味着不是任何表结构,而是存储面向列的结构)。在 hadoop 之上,我们可以使用 Hive 进行查询。可以吗?那么为什么你更喜欢 HBASE 它也是一个面向列的数据结构呢?现在我想在 Hadoop 中创建一个简单的表,我想查询它(简单选择查询)。你能帮我吗 ?如果可能,请给我一个例子!!!!我通过这个链接windowsazure.com/en-us/pricing/free-trial 听说我们将获得一个 haddop 平台,这可能吗? 好的,但我还有 1 个疑问 HDFC(文件系统)你告诉它物理上看起来像一个 txt 文件,所以我可以想象它没有列。但是对于 HBASE,它的物理外观如何?@ 987654330@ 对于 hadoop,它是一个有用的链接吗? HDFS 中的文件就像任何其他 FS 中的文件一样。当您将此文件映射到 Hive 表时,行和列就会出现。您希望如何可视化该文件完全取决于您。 .and Hive 不仅限于文本文件。 好的,我展示了什么链接hortonworks.com/products/sandbox-instructions 这是关于 Hortonwroks 的 hadoop 产品。告诉您如何运行 Hortonworks Sandbox VM。我认为首先你需要决定你要选择哪个供应商。【参考方案2】:正如许多其他人指出的那样,4TB 数据库并不是迁移到 Hadoop + Hive 的理由。必须有一个您无法用 SQL 女士解决的痛点才能寻找选项。
只是一个想法,您是否考虑过迁移到 Azure,以便您的基础架构可以与您一起发展?
【讨论】:
【参考方案3】:我认为 Sqoop 是将数据从 MS SQL 数据库导入 Hadoop 文件系统所需的工具。它可以跟踪已经从哪个表导入了哪些数据,因此不会再次导入数据。
这是它的工作原理:
sqoop import --connect 'jdbc:sqlserver://<IP>;username=dbuser;password=dbpasswd;database=<DB>' --table <table> --target-dir /path/to/hdfs/dir
记录可以存储为文本文件(每行一条记录),或以二进制表示形式存储为 Avro 或 SequenceFiles。
使用sqoop export
命令,您可以从 HDFS 导出回 MS SQL Server。
【讨论】:
以上是关于SQL 到大数据的迁移?的主要内容,如果未能解决你的问题,请参考以下文章