我是hadoop新手,想知道hadoop在一个场景中工作。在创建动态web项目的过程中,我经常通过java/c#发送查询来存储和获取mysql数据库中的数据。我在我的项目中使用hadoop服务,hadoop是否提供任何内置数据库系统,我们可以在需要时存储和检索数据,而不是使用外部数据库。提前谢谢。
d8tt03nd1#
hadoop核心不包含任何数据库。来自hadoop wiki数据库很棒。对索引/优化的数据库发出一个sqlselect调用,响应将在毫秒内返回。要更改数据吗?sql更新,更改在中。hadoop不能做到这一点。hadoop将数据存储在文件中,不为它们编制索引。如果你想找到一些东西,你必须运行一个mapreduce作业遍历所有的数据。这需要时间,并且意味着您不能直接使用hadoop替代数据库。hadoop工作的地方是数据对于数据库来说太大(即,您已经达到了技术限制,而不仅仅是您不想为数据库许可证付费)。对于非常大的数据集,重新生成索引的成本非常高,您无法轻松地为更改数据编制索引。由于许多机器试图写入数据库,因此无法在其上获得锁。在这里,在分布式文件系统中使用模糊相关文件的想法是可行的。在hadoophdfs之上有一个高性能的列表数据库:apachehbase。这是一个保存从原始数据中提取的结果的好地方。您还可以使用apachehive,它让您感觉像mysql这样的关系数据库(尽管有缺点)。在幕后,它使用mapreduce帮助您利用hadoop处理大数据。请注意,配置单元不是为oltp工作负载设计的,不提供实时查询或行级更新
rhfm7lfc2#
hadoop作业使用 InputFormat 创建 InputSplit s。虽然大多数示例使用文件输入并使用hdfs片段作为输入分割,但这个概念是抽象的,可以Map到其他输入。一个典型的例子是已经存在的 DataDrivenDBInputSplit 它表示表中的一组行。apachesqoop(一个提供多个命令的命令行工具)使用这种输入格式/输入拆分来读取数据库输入。其要点是,使用db作为工作的输入是绝对可能的,您必须意识到,您将要实现的是释放一个计算节点集群,用对一系列行的请求来猛击您的关系数据库。很可能你的后端无法处理负载,或者充其量只能缓慢处理。hadoop的强大功能来自于处理与简化的本地存储访问的集成,您明确要求放弃它。因此,如果您的目标是在rdbms和hdfs之间移动数据,那么《独家新闻》将介绍以下案例从数据库导入所有表(导入所有表)导入一个表(sqoop import)导入表的一部分(特定行或特定列)(分别为,--where或--columns参数)将数据从hdfs导出到关系数据库(sqoop export)
InputFormat
InputSplit
DataDrivenDBInputSplit
fkvaft9z3#
hadoop不提供任何内置数据库。只有两件事:分布式fs(hdfs)分布式处理框架(mapreduce)。简而言之,我叫它mr我假设您需要非常快速的响应,因为您正在处理一个web服务。imho、hadoop(确切地说是hdfs)或任何其他fs在这种情况下都不是合适的选择。原因是hdfs缺乏随机/读取功能,这对于任何web项目都是非常重要的。Hive也是如此。尽管它以类似于rdbms的方式管理数据,但它实际上不是rdbms。底层的存储机制仍然是hdfs文件。此外,当您发出配置单元查询以获取结果时,查询首先转换为mr作业,然后生成结果,导致响应缓慢。你最保险的选择是使用hbase。当您需要对数据进行随机、实时的读/写访问时,它无疑是一个更好的选择,就像您的案例一样。虽然它不是hadoop平台的一部分,但它是为与hadoop一起使用而构建的。可以在现有hdfs集群的基础上工作,并且可以通过不同的hbase api(适合您的情况)或mr(不适用于实时的东西)直接操作。适用于需要批量处理大量数据的情况)。易于设置和使用,无需额外的基础设施。这里需要注意的一点是,hbase是nosqldb,不遵循rdbms约定和术语。因此,您可能需要在最初的设计上做一些工作。除了hbase之外,您还有其他一些选项,比如cassandra,它也是一个nosqldb。hth公司
3条答案
按热度按时间d8tt03nd1#
hadoop核心不包含任何数据库。
来自hadoop wiki
数据库很棒。对索引/优化的数据库发出一个sqlselect调用,响应将在毫秒内返回。要更改数据吗?sql更新,更改在中。hadoop不能做到这一点。
hadoop将数据存储在文件中,不为它们编制索引。如果你想找到一些东西,你必须运行一个mapreduce作业遍历所有的数据。这需要时间,并且意味着您不能直接使用hadoop替代数据库。hadoop工作的地方是数据对于数据库来说太大(即,您已经达到了技术限制,而不仅仅是您不想为数据库许可证付费)。对于非常大的数据集,重新生成索引的成本非常高,您无法轻松地为更改数据编制索引。由于许多机器试图写入数据库,因此无法在其上获得锁。在这里,在分布式文件系统中使用模糊相关文件的想法是可行的。
在hadoophdfs之上有一个高性能的列表数据库:apachehbase。这是一个保存从原始数据中提取的结果的好地方。
您还可以使用apachehive,它让您感觉像mysql这样的关系数据库(尽管有缺点)。在幕后,它使用mapreduce帮助您利用hadoop处理大数据。请注意,配置单元不是为oltp工作负载设计的,不提供实时查询或行级更新
rhfm7lfc2#
hadoop作业使用
InputFormat
创建InputSplit
s。虽然大多数示例使用文件输入并使用hdfs片段作为输入分割,但这个概念是抽象的,可以Map到其他输入。一个典型的例子是已经存在的DataDrivenDBInputSplit
它表示表中的一组行。apachesqoop(一个提供多个命令的命令行工具)使用这种输入格式/输入拆分来读取数据库输入。其要点是,使用db作为工作的输入是绝对可能的,您必须意识到,您将要实现的是释放一个计算节点集群,用对一系列行的请求来猛击您的关系数据库。很可能你的后端无法处理负载,或者充其量只能缓慢处理。hadoop的强大功能来自于处理与简化的本地存储访问的集成,您明确要求放弃它。
因此,如果您的目标是在rdbms和hdfs之间移动数据,那么《独家新闻》将介绍以下案例
从数据库导入所有表(导入所有表)
导入一个表(sqoop import)
导入表的一部分(特定行或特定列)(分别为,--where或--columns参数)
将数据从hdfs导出到关系数据库(sqoop export)
fkvaft9z3#
hadoop不提供任何内置数据库。只有两件事:
分布式fs(hdfs)
分布式处理框架(mapreduce)。简而言之,我叫它mr
我假设您需要非常快速的响应,因为您正在处理一个web服务。imho、hadoop(确切地说是hdfs)或任何其他fs在这种情况下都不是合适的选择。原因是hdfs缺乏随机/读取功能,这对于任何web项目都是非常重要的。
Hive也是如此。尽管它以类似于rdbms的方式管理数据,但它实际上不是rdbms。底层的存储机制仍然是hdfs文件。此外,当您发出配置单元查询以获取结果时,查询首先转换为mr作业,然后生成结果,导致响应缓慢。
你最保险的选择是使用hbase。当您需要对数据进行随机、实时的读/写访问时,它无疑是一个更好的选择,就像您的案例一样。虽然它不是hadoop平台的一部分,但它是为与hadoop一起使用而构建的。可以在现有hdfs集群的基础上工作,并且可以通过不同的hbase api(适合您的情况)或mr(不适用于实时的东西)直接操作。适用于需要批量处理大量数据的情况)。易于设置和使用,无需额外的基础设施。
这里需要注意的一点是,hbase是nosqldb,不遵循rdbms约定和术语。因此,您可能需要在最初的设计上做一些工作。
除了hbase之外,您还有其他一些选项,比如cassandra,它也是一个nosqldb。
hth公司