`

别老扯什么Hadoop了,你的数据根本不够大

 
阅读更多

 

       英文原文:Don't use Hadoop when your data isn't that big ”

    作者:Chris Stucchio 有着多年从业经验的数据科学家,纽约大学柯朗研究所博士后,搞过高频交易平台,当过创业公司的 CTO,更习惯称自己为统计学者。对了,他现在自己创业,提供数据分析、推荐优化咨询服务,他的邮件是:stucchio@gmail.com 。
 

  “你有多少大数据和 Hadoop 的经验?”他们问我。我一直在用 Hadoop,但很少处理几 TB 以上的任务。我基本上只是一个大数据新手——知道概念,写过代码,但是没有大规模经验。

  接下来他们会问:“你能用 Hadoop 做简单的 group by 和 sum 操作吗?”我当然会,但我会说需要看看具体文件格式。

  他们给我一个U盘,里面有所有的数据,600MB,对,他们所有的数据。不知道为什么,我用 pandas.read_csvPandas 是一种 Python 数据分析库)而不是 Hadoop 完成了这个任务后,他们显得很不满意。

  Hadoop 其实是挺局限的。它无非是运行某个通用的计算,用 SQL 伪代码表示就是:SELECT G (...) FROM table GROUP BY F (...)你只能改变G和F操作,除非要在中间步骤做性能优化(这可不怎么好玩!)。其他一切都是死的。

  (关于 MapReduce,之前作者写过一篇“41 个词讲清楚 MapReduce”,可以参考。)

  Hadoop 里,所有计算都必须按照一个 map、一个 group by、一个 aggregate 或者这种计算序列来写。这和穿上紧身衣一样,多憋得慌啊。许多计算用其他模型其实更适合。忍受紧身衣的唯一原因就是,可以扩展到极大极大的数据集。可你的数据集实际上很可能根本远远够不上那个数量级。

  可是呢,因为 Hadoop 和大数据是热词,世界有一半的人都想穿上紧身衣,即使他们根本不需要。

  可我的数据有好几百 MB 呢!Excel 都装不下

  对 Excel 很大可不是什么大数据。有很多好工具——我喜欢用的是基于 Numpy 的 Pandas。它可以将几百 MB 数据以高效的向量化格式加载到内存,在我已经 3 年的老笔记本上,一眨眼的功夫,Numpy 就能完成 1 亿次浮点计算。Matlab 和R也是很棒的工具。

  数百 MB 数据一般用一个简单的 Python 脚本逐行读取文件、处理,然后写到了一个文件就行了。

  可我的数据有 10G 呢!

  我刚买了一台笔记本电脑。16G 内存花了 141.98 美元,256GB SSD 多收 200 美元。另外,如果在 Pandas 里加载一个 10GB 的 csv 文件,实际在内存里并没有那么大——你可以将 “17284932583” 这样的数值串存为 4 位或者 8 位整数,“284572452.2435723”存为 8 位双精度。

  最差情况下,你还可以不同时将所有数据都一次加载到内存里。

  可我的数据有 100GB/500GB/1TB!

  一个 2T 的硬盘才 94.99 美元,4T 是 169.99。买一块,加到桌面电脑或者服务器上,然后装上 PostgreSQL。

  Hadoop 的适用范围远小于 SQL 和 Python 脚本

  从计算的表达能力来说,Hadoop 比 SQL 差多了。Hadoop 里能写的计算,在 SQL 或者简单的 Python 脚本都可以更轻松地写出来。

  SQL 是直观的查询语言,没有太多抽象,业务分析师和程序员都很常用。SQL 查询往往非常简单,而且一般也很快——只要数据库正确地做了索引,要花几秒钟的查询都不太多见。

  Hadoop 没有任何索引的概念,它只知道全表扫描。而且 Hadoop 抽象层次太多了——我之前的项目尽在应付 Java 内存错误、内存碎片和集群竞用了,实际的数据分析工作反而没了时间。

  如果你的数据结构不是 SQL 表的形式(比如纯文本、JSON、二进制),一般写一小段 Python 或者 Ruby 脚本按行处理更直接。保存在多个文件里,逐个处理即可。SQL 不适用的情况下,从编程来说 Hadoop 也没那么糟糕,但相比 Python 脚本仍然没有什么优势。

  除了难以编程,Hadoop 还一般总是比其他技术方案要慢。只要索引用得好,SQL 查询非常快。比如要计算 join,PostgreSQL 只需查看索引(如果有),然后查询所需的每个键。而 Hadoop 呢,必须做全表扫描,然后重排整个表。排序通过多台机器之间分片可以加速,但也带来了跨多机数据流处理的开销。如果要处理二进制文件,Hadoop 必须反复访问 namenode。而简单的 Python 脚本只要反复访问文件系统即可。

  可我的数据超过了 5TB!

  你的命可真苦——只能苦逼地折腾 Hadoop 了,没有太多其他选择(可能还能用许多硬盘容量的高富帅机器来扛),而且其他选择往往贵得要命(脑海中浮现出 IOE 等等字样……)。

  用 Hadoop 唯一的好处是扩展。如果你的数据是一个数 TB 的单表,那么全表扫描是 Hadoop 的强项。此外的话,请关爱生命,尽量远离 Hadoop。它带来的烦恼根本不值,用传统方法既省时又省力。

  附注:Hadoop 也是不错的工具

  我可不是成心黑 Hadoop 啊。其实我自己经常用 Hadoop 来完成其他工具无法轻易完成的任务。(我推荐使用 Scalding,而不是 Hive 或者 Pig,因为你可以用 Scala 语言来写级联 Hadoop 任务,隐藏了 MapReduce 底层细节。)我本文要强调的是,用 Hadoop 之前应该三思而行,别 500MB 数据这样的蚊子,你也拿 Hadoop 这样的大炮来轰。

 

================================

PB级的用hadoop
TB级的用mongodb
GB级的用sql数据库
MB级的用excel
KB级的用计算器
B级的用心算

否则高射炮打蚊子,大材小用。

 

 

=========================================================

5个最成功的Hadoop项目推荐

 

 SD Times高级编辑Alex Handy日前列出了当前使用Hadoop的项目中他认为最成功的五个。

  • 1. CascadingCascading是基于Hadoop集群之上的数据处理API。它通过实现了丰富的功能化API,使你不需要接触MapReduce任务就能使用分布式计算能力,其核心概念是基于管道和流的数据处理。
  • 2. MahoutMahout是一个基于Hadoop实现各种机器学习与数据挖掘算法库。被用来提供推荐服务。
  • 3. HiveHive由Facebook出品,它为Hadoop提供了一种类似于SQL的操作接口。
  • 4. AvroAvro是一个基于二进制数据传输高性能的中间件。Avro通过将数据进行序列化,以使得大批量数据交互过程更方便。
  • 5. StormStorm由BackType Technology出口,其口号是“实时的Hadoop系统”。

  原文链接:The top five most powerful Hadoop projects

分享到:
评论

相关推荐

    使用Python Pandas处理亿级数据的方法

    在数据分析领域,最热门的莫过于Python和R语言,此前有一篇文章《别老扯什么Hadoop了,你的数据根本不够大》指出:只有在超过5TB数据量的规模下,Hadoop才是一个合理的技术选择。这次拿到近亿条日志数据,千万级数据...

    在Python中利用Pandas库处理大数据的简单介绍

    在数据分析领域,最热门的莫过于Python和R语言,此前有一篇文章《别老扯什么Hadoop了,你的数据根本不够大》指出:只有在超过5TB数据量的规模下,Hadoop才是一个合理的技术选择。这次拿到近亿条日志数据,千万级数据...

    基于Python的天气预测和天气可视化项目源码+文档说明(高分毕设/大作业)

    基于Python的天气预测和天气可视化项目源码+文档说明(高分毕设/大作业),个人经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业,代码资料完整,下载可用。 基于Python的天气预测和天气可视化项目源码+文档说明(高分毕设/大作业)基于Python的天气预测和天气可视化项目源码+文档说明(高分毕设/大作业)基于Python的天气预测和天气可视化项目源码+文档说明(高分毕设/大作业)基于Python的天气预测和天气可视化项目源码+文档说明(高分毕设/大作业)基于Python的天气预测和天气可视化项目源码+文档说明(高分毕设/大作业)基于Python的天气预测和天气可视化项目源码+文档说明(高分毕设/大作业)基于Python的天气预测和天气可视化项目源码+文档说明(高分毕设/大作业)基于Python的天气预测和天气可视化项目源码+文档说明(高分毕设/大作业)基于Python的天气预测和天气可视化项目源码+文档说明(高分毕设/大作业)基于Python的天气预测和天气可视化项目源码+文档说明(高分毕设/大作业)基于Python的天气预测和天气可视化项目源码+文档说明(高分毕设/大作业)基于Python的天气预测和天气可视化项目源码+文档说明(高分毕设/大作业)基于Python的天气预测和天气可视化项目源码+文档说明(高分毕设/大作业)基于Python的天气预测和天气可视化项目源码+文档说明(高分毕设/大作业)基于Python的天气预测和天气可视化项目源码+文档说明(高分毕设/大作业)基于Python的天气预测和天气可视化项目源码+文档说明(高分毕设/大作业)基于Python的天气预测和天气可视化项目源码+文档说明(高分毕设/大作业

    2025工业5G终端设备发展报告.pdf

    2025工业5G终端设备发展报告.pdf

    基于分布式ADMM算法与碳排放交易的MATLAB代码:电力系统优化调度

    内容概要:本文介绍了一段基于分布式ADMM算法的MATLAB代码,用于电力系统优化调度,尤其关注碳排放交易的影响。代码首先对电力系统进行分区,接着构建DC-DOPF最优潮流问题,考虑碳排放交易的成本,并利用ADMM算法求解。文中详细解释了各个关键步骤,如系统分区、目标函数设计、碳排放交易成本计算以及ADMM算法的具体实现。此外,代码还包括了多种优化技术和实用技巧,如自适应惩罚因子调整、边界条件处理等,确保算法的有效性和实用性。 适用人群:适用于对电力系统优化调度感兴趣的科研人员、工程师和技术爱好者,尤其是希望深入了解分布式算法和碳排放交易机制的人群。 使用场景及目标:①研究电力系统优化调度的新方法和技术;②探讨碳排放交易对电力系统调度策略的影响;③提高电力系统运行效率和环保性能。 其他说明:代码不仅提供了详细的注释和模块化设计,还展示了丰富的可视化结果,便于理解和进一步研究。同时,文中提到了一些实际应用案例,证明了该方法的有效性和优越性。

    IDEA中本地运行配置文件

    适配于jdk8版本

    dify-course-demo.yml

    自动化生成全套教程

    【GRP-U8软件维护】GRP-U8软件常见问题及解决方案:涵盖账务处理、自定义凭证打印、期初余额导入、双凭证模式调整、电子报表、工资模块、资产管理、物资管理、网上报销、预算编制、学生收费、安装配置及

    内容概要:本文档《GRP_U8软件近期常见问题85例.docx》详细列出了GRP_U8软件在实际使用过程中遇到的85个常见问题及其解决方案。这些问题涵盖了账务处理、电子报表、工资模块、资产管理、物资管理、成本模块、网上报销、预算编制、学生收费、安装配置以及基础数据管理等多个方面。每个问题不仅描述了现象,还提供了具体的解决步骤或SQL语句。文档强调在执行任何脚本前务必进行整库备份,并提供了维护问题的联系方式。 适合人群:适用于GRP_U8软件的管理员、技术支持人员及有一定数据库操作基础的用户。 使用场景及目标:①帮助用户快速定位并解决GRP_U8软件在账务处理、报表生成、工资管理、资产管理等模块中遇到的具体问题;②提供详细的SQL语句和操作指南,确保用户能够独立解决问题,减少对技术支持的依赖;③指导用户在遇到软件安装、配置及升级相关问题时采取正确的措施。 其他说明:文档内容正在不断完善中,用户可以通过私信反馈意见和建议。此外,文档中多次强调了数据安全的重要性,提醒用户在执行任何操作前做好备份工作。针对某些特定问题,文档还提供了多种解决方案供用户选择,以适应不同的环境和需求。

    少儿编程scratch项目源代码文件案例素材-scratch RPG 战斗.zip

    少儿编程scratch项目源代码文件案例素材-scratch RPG 战斗.zip

    基于模型预测控制(MPC)的无人艇分布式编队协同控制仿真与实现

    内容概要:本文详细介绍了利用模型预测控制(MPC)实现无人艇分布式编队协同控制的方法和技术。首先,通过简化的动力学模型和MATLAB代码展示了无人艇的基本行为预测。接着,深入探讨了编队协同控制的关键要素,包括代价函数的设计、信息交换机制以及分布式MPC的具体实现步骤。文中还提供了具体的Python代码示例,涵盖了从单个无人艇的动力学建模到多智能体之间的协作控制。此外,作者分享了一些实用技巧,如如何处理通信延迟、传感器噪声等问题,并展示了仿真效果,证明了所提出方法的有效性和鲁棒性。 适合人群:对无人艇编队控制、模型预测控制(MPC)、分布式系统感兴趣的科研人员、工程师及高校学生。 使用场景及目标:适用于研究和开发无人艇编队控制系统,特别是希望通过分布式控制实现高效、灵活的编队任务。目标是在复杂的海洋环境中,使无人艇能够自主完成编队、跟踪指定路径并应对各种干扰因素。 其他说明:文中提供的代码片段和理论解释有助于理解和实现无人艇编队控制的实际应用。建议读者在实验过程中结合实际情况进行参数调整和优化。

    操作系统实验2内存管理实验

    (3)编写程序验证FIFO和Stack LRU页面置换算法 (4)分别用FIFO和Stack LRU页置换算法,自己设定一个页面引用序列,绘制页错误次数和可用页帧总数的曲线并对比(可用Excel绘制或手绘);能否重现FIFO导致的Belady异常; (5)[选做]编程实现最优页置换算法,用课件上的序列验证。

    机器学习(深度学习):一个用于骨折分类的医学图像数据集

    一个用于骨折分类的医学图像数据集,旨在通过计算机视觉技术帮助研究人员和医疗专业人员准确识别和分类骨折类型。以下是关于该数据集的详细介绍。该数据集包含了多种类型的骨折X光图像,涵盖了常见的骨折类别,如撕脱性骨折(Avulsion Fractures)、粉碎性骨折(Comminuted Fractures)、骨折脱位(Fracture-Dislocations)、青枝骨折(Greenstick Fractures)、发际线骨折(Hairline Fractures)、嵌插性骨折(Impacted Fractures)、纵向骨折(Longitudinal Fractures)、斜行骨折(Oblique Fractures)、病理性骨折(Pathological Fractures)和螺旋形骨折(Spiral Fractures)等。多样性:数据集中的图像来自不同的骨折类型,能够为模型训练提供丰富的样本。高质量标注:数据由专业放射科医生手动标记,确保了数据的准确性和可靠性。适用性:该数据集适用于机器学习和深度学习项目,可用于开发自动化骨折分类系统。该数据集主要用于训练和验证计算机视觉模型,以实现从X光图像中自动识别和分类骨折类型。通过自动化骨折分类,可以提高医疗诊断的效率和准确性,减少人为误判,并帮助医疗专业人员更快地做出决策。是一个极具价值的医学图像数据集,能够为医疗领域的研究人员和从业者提供有力支持,推动医学影像分析技术的发展。

    互联网的兴起与数字未来

    本书《互联网的历史与数字未来》由约翰尼·瑞安撰写,探讨了互联网从诞生到成为全球性现象的历程。书中分为三个阶段:分布式网络与离心思想的兴起、互联网的扩展以及新兴环境下的互联网。第一阶段追溯了互联网概念的起源,包括冷战背景下的军事实验和计算机技术的普及。第二阶段描述了互联网如何从军事网络演变为全球互联网,并催生了万维网。第三阶段则探讨了Web 2.0的出现、网络社会的形成以及互联网对政治、文化和商业的深远影响。瑞安强调了互联网作为离心力、用户驱动和开放性的三个核心特征,并指出这些特征正在重塑我们的世界。

    易语言进程封包截取工具

    进程封包截取神器,支持TCP和UDP协议封包拦截

    最新版kibana-9.0.0-linux-x86-64.tar.gz

    最新版kibana-9.0.0-linux-x86_64.tar.gz

    子查询练习题,多练习总没有坏处,不知道凑没凑够十一个字

    子查询练习题,多练习总没有坏处,不知道凑没凑够十一个字

    可见光近红外波段VO2介电常数的Matlab计算与COMSOL仿真教程

    内容概要:本文详细介绍了如何利用Matlab计算二氧化钒(VO2)在可见光到近红外波段的介电常数,并将其应用于COMSOL多物理场仿真软件进行光学性能仿真。主要内容包括:VO2在不同温度下的相变特性及其对折射率的影响;基于Lorentz和Drude模型的介电常数计算方法;Matlab代码实现步骤;COMSOL中材料参数的导入与设置;以及常见错误提示和解决方案。文中还附带了一个详细的30分钟教学视频,帮助读者更好地理解和掌握整个流程。 适合人群:对光学材料、相变材料感兴趣的科研工作者和技术人员,尤其是从事智能窗户、光学开关等领域研究的人士。 使用场景及目标:① 学习并掌握VO2在不同温度下的光学特性和相变机制;② 利用Matlab和COMSOL进行材料参数计算和仿真,为实际应用提供理论支持;③ 解决仿真过程中可能出现的问题,提高仿真精度。 阅读建议:建议读者跟随文中的代码示例逐步操作,结合提供的教学视频加深理解。对于初学者来说,可以先熟悉Matlab的基本语法和COMSOL的操作界面,再尝试完成完整的仿真流程。

    COMSOL模拟激光打孔热应力耦合分析及优化方法

    内容概要:本文详细介绍了利用COMSOL Multiphysics进行激光打孔过程中热应力耦合仿真的具体步骤和技术要点。首先,通过建立波动光学和固体力学两个物理场,精确模拟了1064nm激光与材料相互作用产生的温度场变化及其引起的热膨胀效应。接着,针对热源加载、网格划分、求解器配置等方面进行了深入探讨,提出了多项创新性的解决方案,如采用移动高斯热源实现精准加热、引入时间条件判断调整热膨胀系数以及优化网格布局等措施。此外,还讨论了材料参数设置中的注意事项,尤其是对于高温合金材料,在不同温度区间内的导热系数和弹性模量的变化规律,并强调了相变潜热的影响。最后,通过对温度场和应力场的综合分析,揭示了激光移动速度对孔洞边缘应力分布的影响机制。 适用人群:从事激光加工、材料科学、热力学研究的专业人士,以及对多物理场耦合仿真感兴趣的科研工作者。 使用场景及目标:适用于希望深入了解激光打孔过程中热应力形成机理的研究人员;旨在提高加工精度、减少缺陷发生的工程技术人员;希望通过理论模型指导实际生产的制造业从业者。 其他说明:文中提供了大量MATLAB代码片段用于辅助理解和实施相关操作,同时分享了许多实用的经验技巧,帮助读者更好地掌握COMSOL软件的应用。

    永磁同步电机全速度域无位置传感器控制技术与切换策略研究

    内容概要:本文详细探讨了永磁同步电机(PMSM)在全速度范围内实现无位置传感器控制的技术方法和切换策略。针对高速和低速段分别介绍了超螺旋滑模控制和脉振高频方波注入的具体实现方式,并提供了相应的代码示例。对于切换策略,则讨论了加权切换和双坐标切换的方法,强调了在实际应用中需要注意的问题,如角度补偿和平滑过渡。此外,还分享了一些实用的经验技巧,如高频注入信号的滤波处理、滑模控制参数的优化设置等。 适合人群:从事电机控制系统设计的研究人员和技术工程师。 使用场景及目标:适用于需要深入了解PMSM无位置传感器控制技术的研发项目,旨在帮助工程师掌握不同速度范围内的最优控制策略,确保系统在全速域内的稳定性和可靠性。 其他说明:文中提供的代码片段和实践经验有助于读者更好地理解和实施相关技术,同时也提醒读者在实际应用中应注意参数调整和系统调试。

    C#运控框架雷赛DMC系列项目:适合新手的运动控制源码学习

    内容概要:本文介绍了一个基于C#和雷赛DMC系列的运动控制项目,该项目提供了详细的源码解析和技术要点讲解。尽管界面较为简陋,但功能齐全,涵盖了设备连接、运动参数设置、运动控制、状态监测等多个方面。文章详细解释了各个关键模块的实现,如初始化、运动控制、指令解析、多线程同步和紧急停止等功能。此外,还介绍了常见的陷阱和优化建议,帮助新手更好地理解和掌握运动控制编程。 适合人群:初学者和有一定编程基础的开发者,特别是对运动控制编程感兴趣的程序员。 使用场景及目标:① 学习C#与雷赛DMC系列设备的集成;② 掌握运动控制项目的开发流程;③ 实践运动控制的实际应用场景,如工业自动化。 其他说明:项目不仅提供完整的代码示例,还包括了许多实用的技术提示和最佳实践,非常适合新手进行深度学习和改造。

Global site tag (gtag.js) - Google Analytics