Hadoop系列之一:大数据存储及处理平台产生的背景

传统的关系型数据库中的表通常由一个或多个字段组成,每个字段都预先定义了其可存储数据的格式及约束等,这类的数据就是结构化数据(structureddata)。一个设计良

传统的关系型数据库中的表通常由一个或多个字段组成,每个字段都预先定义了其可存储数据的格式及约束等,这类的数据就是结构化数据(structured data)。一个设计良好的数据库在其schema中定义这些格式或约束,并由相应的rdbms为这些提供实现保证。相应地,香港服务器租用,非结构化数据(unstructured data)就是指那些没有一个预定义的数据模型或不适于存储在rdbms中的数据,这些数据没有额外的描述信息(元数据)因此无法推断这些信息的真实意义,比如文本文件。半结构化数据(semi-structured data)有着特定的结构,但每个记录的结构未必完全相同,因此,无法为这些数据记录提供预定义的schema,其元数据只有在数据创建时才能获取,通常都与数据交相存储从而实现自我描述(self-describing),如xml文件。

 

话袋AI笔记 话袋AI笔记

话袋AI笔记, 像聊天一样随时随地记录每一个想法,打造属于你的个人知识库,成为你的外挂大脑

话袋AI笔记 195 查看详情 话袋AI笔记

现今,如搜索引擎类公司的网络爬虫爬行而来的web页面或社交类站点产生的用户访问日志都属半结构化或非结构化数据,传统的关系型数据库管理系统对这类数据的存储及处理能力有限,于是处理这类数据的需求就催生了一种新的数据库系统,即大数据管理系统(Big Data System)或NoSQL。这场声势浩大的数据库管理系统革新运动以Google、Amazon、Yahoo!、Facebook等先锋为主导展开的。这些组织或者由自己的业务生成海量数据,或从互联网上自由获取海量数据,但对这些海量数据进行存储、分析和处理都无一例外地成为支撑其业务的核心需求。初期,他们都采用了当时主流的数据管理技术来满足类似需求,但也都在各自的应用中遇到了规模扩展、存储性能等各方面的限制。尽管数据管理并非他们的核心业务,但数据处理却成支撑其业务运作基本组成部分,因此他们各自注入大量的技术实力依据业务需求进行新技术研发。

 

尽管许多公司都对他们的研究成果采取了保密措施,Google却选择了将他们的成功经验公之于众。2003年,Google公开发表了论文“The Google File System”,系统阐述了采取商用硬件计算机集群存储海量数据的分布式文件系统GFS的实现;GFS采取“数据块”管理文件数据,并在集群中多个节点上存储同一个数据块的副本以实现冗余功能;GFS设计用来支持大规模、数据密集型、分布式应用程序的运行;此外,它还为流式数据读取进行了优化,因此特别适用于存储之后读取数据并对之做出处理类的操作。这之后的第二年,Google又公开发表了另一篇论文“MapReduce: Simplified

Data Processing on Large Clusters”,定义了一个编程模型及其运行框架,提供了于集群中的多个节点上自动并行、容错及可处理数百TB规模的数据集数据处理平台;MapReduce是GFS集群的组成部分,它是一个编程框架,能够让用户编写的代码分布式运行于GFS集群中的多个节点上尽可能通过本地数据访问完成数据的并行处理操作。MapReduce与GFS一同构成了大数据存储及并行处理平台,Google的搜索索引的建立也正是基于此平台得以高效运行。与此同时,美国空间,Amazon也公开其购物车实现的基础组件Dynamo。

 

Google的MapReduce及GFS提供了海量数据存储及并行处理平台,但GFS并不支持对数据进行随机或实时访问,且仅适用于存储少量的、体积巨大大的文件,对海量小数据文件的管理有此力不从心。故此,Google开始寻找一种能够充分发挥GFS的高可用性及海量存储能力,又能支持类似邮件或分析系统等交互式应用的数据管理解决方案。这种数据存储要能够有效管理海量数据片断,又可以透明地将这些小数据片合并成为适合存储于GFS的大文件,也要内生地支持排序索引以在数据检索时最小程度地触发磁盘IO操作,还要能够存储网络爬行而来的海量数据并将其提供给MapReduce及时、快速构建搜索索引。针对这些需求,传统的RDBMS系统的管理能力已难以为继,因此Google的工程师发明了一种新的处理系统,这种系统移除了关系型数据库系统的众多特性而提供一种仅支持CRUD(Create、Read、Update和Delete)操作的简单API,以及一个实现范围或全表遍历的scan功能。2006年,Google将这些研究成果通过“Bigtable: A Distributed Storage System for Structured Data”论文公之于众。

 

任何对MapReduce、GFS及Bigtable技术感兴的朋友都应该认真读一读Google贡献给全人类的这三篇传世之作。它们也是开源系统Hadoop、HBase等得以构建的理论基石,Hadoop的核心组件为MapReduce和HDFS,其中Hadoop的MapReduce是Google的MapReduce技术的开源实现,HDFS是GFS的开源实现,HBase是Bigtable的开源实现。因此,网站空间,这三篇论文也是深入学习Hadoop、HBase等的基础性材料。

 

参考资料:

Introduction to Database Systems

Hadoop Operations

Hadoop The Definitive Guide 3rd edtion

HBase The Definitive Guide

HBase in Action

 

本文出自 “马哥教育” 博客,转载请与作者联系!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1083306.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
VSCode怎么运行Python脚本_VSCode执行和调试Python代码的方法教程
上一篇 2025年12月2日 21:16:30
再战星途 《决战》新区“豪情壮志”今日开启
下一篇 2025年12月2日 21:16:31

相关推荐

  • C++怎么使用C++17的并行算法库_C++ std::execution与多核性能优化

    c++kquote>C++17通过std::execution策略引入并行算法支持,需编译器(如GCC 8+)和线程库(如TBB)配合;提供seq、par、par_unseq三种策略控制执行模式;可用于sort、for_each等算法提升大数据性能,但需避免数据竞争,推荐使用reduce等安全…

    2026年5月10日
    000
  • PHP动态网页数据库备份恢复_PHP动态网页MySQL数据库备份教程

    答案:PHP动态网页的MySQL数据库备份与恢复需通过定期导出SQL文件并安全存储来保障数据安全,核心方法包括使用mysqldump命令行工具实现高效灵活的自动化备份,利用phpMyAdmin图形化工具进行手动导出导入以降低操作门槛,以及通过PHP脚本调用系统命令将备份过程集成到应用中;恢复时可采用…

    2026年5月10日
    000
  • Python Pandas:高效合并多工作簿多工作表 Excel 数据

    本教程详细指导如何使用 Python Pandas 库高效合并来自多个 Excel 文件中指定工作表的数据。文章将解释如何遍历文件目录、正确加载 Excel 文件、识别并解析特定工作表,并将来自不同文件的同名工作表数据智能地整合到一个 Pandas DataFrame 字典中,同时提供完整的示例代码…

    2026年5月10日
    000
  • 如何优化JavaScript代码的性能以避免运行时瓶颈?

    优化JavaScript性能需减少DOM操作,通过缓存查询、使用DocumentFragment和合并样式修改来降低重排重绘;2. 采用事件委托减少内存占用并提升绑定效率;3. 拆分长任务,利用requestIdleCallback、Web Worker和requestAnimationFrame避…

    2026年5月10日
    000
  • Golang gRPC消息压缩与传输优化

    启用Gzip压缩、配置Keepalive长连接、采用流式传输可显著提升gRPC性能。在Go中通过grpc.RPCCompressor注册Gzip,客户端使用grpc.UseCompressor启用压缩;结合grpc.WithKeepaliveParams保持连接活跃,避免频繁重连;对大数据使用流式R…

    2026年5月10日
    000
  • php数据库数据压缩处理_php数据库存储空间优化方法

    可通过启用MySQL行压缩、PHP层数据压缩、优化字段结构及分表归档策略减少存储占用。具体步骤:1. 使用InnoDB压缩表并设置KEY_BLOCK_SIZE;2. PHP中用gzcompress压缩大数据字段,存为BLOB;3. 选用更小数据类型如TINYINT,避免冗余TEXT;4. 将历史数据…

    2026年5月10日
    100
  • Go语言内存管理深度解析:理解垃圾回收与内存归还机制

    本文深入探讨Go语言的内存管理机制,特别是其基于标记-清除(mark-and-sweep)的垃圾回收器。我们将解析Go运行时如何通过sysmon goroutine周期性触发GC,并介绍forc++egcperiod和scavengelimit等关键参数对内存回收的影响。通过GOGCTRACE环境变…

    2026年5月10日
    000
  • Web Workers:多线程编程在前端的应用

    Web Workers通过后台线程执行耗时任务,避免主线程阻塞,提升页面流畅性;它适用于大数据处理、图像计算等场景,但需注意通信开销与调试复杂度。 Web Workers 是前端领域一个非常重要的概念,它允许你在浏览器后台运行脚本,而不会阻塞主线程。简单来说,它为JavaScript带来了“多线程”…

    2026年5月10日
    000
  • 怎样使用Node.js流处理数据?

    Node.js流处理通过可读、可写、双工和转换流实现高效数据处理,利用pipe()方法连接流并自动管理背压,结合stream.pipeline进行错误处理,适用于大文件、网络通信等场景,提升内存和时间效率。 在Node.js中处理数据,尤其当面对大量信息时,直接把所有内容加载到内存里往往不是一个好主…

    2026年5月10日
    100
  • 优化JavaScript大型数组:高效重构map与filter以获取唯一值

    本文探讨了在处理大型javascript数组时,如何高效地结合`map`和`filter`操作以获取唯一值。针对传统`filter`结合`indexof`或`reduce`结合`includes`在数据量巨大时出现的性能瓶颈,本文推荐使用内置的`set`数据结构,它能以显著提升的效率解决重复值问题,…

    2026年5月10日
    000
  • 如何利用Web Workers提升前端应用的性能与响应能力?

    如何利用Web Workers提升前端应用的性能与响应能力?如何利用Web Workers提升前端应用的性能与响应能力?如何利用Web Workers提升前端应用的性能与响应能力?如何利用Web Workers提升前端应用的性能与响应能力?

    Web Workers通过将耗时任务移至后台线程避免主线程阻塞,提升前端性能。它基于独立上下文运行JavaScript,不访问DOM,通过postMessage通信,适用于大数据处理、加密解压等计算密集型任务。创建Worker实例并加载单独JS文件即可实现异步执行,如数组排序不卡页面。需注意结构化克…

    2026年5月10日 用户投稿
    100
  • 高效计算区间内可整除数值的数量

    本文探讨了如何在指定范围 `[0, max)` 内高效地计算能被给定 `divisor` 整除的数值数量。我们将对比迭代循环和数学公式两种方法,并详细解释数学公式的推导过程,展示其在性能上的显著优势,尤其适用于处理大规模数据,从而提供一个更优的解决方案。 在编程实践中,我们经常需要解决一类问题:统计…

    2026年5月10日
    300
  • 合约交易中的杠杆倍数怎么选?高倍杠杆的收益与爆仓风险

    选择合适杠杆需结合风险承受力与市场状况,高倍杠杆虽放大收益但也显著增加爆仓风险。一、评估个人风险承受能力:投资者应根据财务状况和心理承受力确定杠杆水平,低风险偏好者应避免高杠杆;1、计算可用于交易的闲置资金,确保亏损不影响正常生活;2、设定单笔交易最大亏损比例,如不超过总资金的2%;3、在模拟环境中…

    2026年5月10日
    100
  • 什么是数据库的列存储索引?在C#中如何用于分析查询?

    列存储索引按列存储数据,提升分析查询性能。其优势包括高压缩率、快速聚合和批处理模式。在SQL Server中可创建非聚集或聚集列存储索引,如CREATE NONCLUSTERED COLUMNSTORE INDEX IX_ColumnStore ON Sales.OrderDetails(Produ…

    2026年5月10日
    200
  • Golang值类型传递与指针传递比较

    Go语言中函数参数传递分为值传递和指针传递。值传递复制变量副本,函数内修改不影响原值,适用于小型数据类型如int、string等;示例中modifyValue函数对参数x的修改未影响外部变量a。指针传递通过传递地址实现共享内存,可修改原始数据,适合大型结构体或需变更原值场景;示例中modifyPoi…

    2026年5月10日
    000
  • php数据库游标使用教程_php数据库逐行处理数据方法

    使用PDO和MySQLi的游标功能可实现数据库大数据量下的低内存逐行处理。首先通过PDO设置PDO::MYSQL_ATTR_USE_BUFFERED_QUERY为false,结合fetch()方法逐行读取;或使用MySQLi的query()配合MYSQLI_USE_RESULT模式执行未缓冲查询,再…

    2026年5月10日
    000
  • C++STL查找算法find和binary_search使用

    std::find适用于无序数据的线性查找,返回元素位置,时间复杂度O(N);std::binary_search要求数据有序,仅判断存在性,时间复杂度O(log N),效率更高。 在C++ STL中, std::find 和 std::binary_search 是两种核心的查找算法,它们各自适用…

    2026年5月10日
    100
  • 币圈牛市来了怎么操作?最大化收益的逃顶与建仓技巧

    牛市初期信号包括比特币周线站稳20周期均线、链上活跃地址增加、主流币交易量放大且不破前低、美元指数下行;2. 分批建仓策略建议将资金分五份,首仓不超20%,回调5%-8%逐步加仓,优先配置BTC与ETH,山寨币单品种不超总仓位10%;3. 逃顶时机可借助RSI超买、MACD顶背离、成交量萎缩及大户转…

    2026年5月10日
    000
  • JavaScript中的数组去重有哪些高效算法?

    使用Set去重适用于基本类型,代码简洁性能好;Map适合对象数组按属性去重,灵活但内存占用高;双指针法用于已排序数组,空间复杂度低。 JavaScript中数组去重的高效方法取决于数据类型和性能需求。以下是几种常用且高效的实现方式。 使用 Set 去重(推荐) ES6 引入的 Set 数据结构天然支…

    2026年5月10日
    000
  • Python生成器:高效实现分批次(Batch)数据输出的策略与实践

    本文深入探讨了如何利用Python生成器高效地实现数据分批次输出。通过分析常见的错误尝试,文章详细阐述了构建正确分批次生成器的关键逻辑,特别是如何优雅地处理循环结束后可能存在的不足一个批次的剩余数据,从而确保所有计算结果都能被完整、按批次地迭代处理,优化内存使用和数据流控制。 1. 引言:生成器与分…

    2026年5月10日
    000

发表回复

登录后才能评论
关注微信