写点什么

大数据处理的开发经验

2014 年 4 月 10 日

大数据已经不是什么新话题了,在实际的开发和架构过程中,如何为大数据处理做优化和调整,是一个重要的话题,最近,咨询师 Fabiane Nardon 和 Fernando Babadopulos 在“ Java Magzine ”电子期刊中发文分享了自己的经验。

作者在文中首先强调了大数据革命的重要性:

大数据革命正在进行,是时候去参与其中了。企业每天产生的数据量不断增加,可以被重新利用来发现新信息的公共数据集也被广泛使用。再加上花费很小、按需处理的云计算组合,你处在一个具有无限可能的新世界。不难想象,通过利用大数据技术在云计算中的力量,很多颠覆性的应用程序将会涌现出来。许多新兴公司现在提出了新的令人兴奋的应用,而这些想法在几年前无法得到足够的财务支持。作为 Java 开发者,我们完全有能力参与到这场革命中去,因为许多最为流行的大数据工具都是基于 Java 的。然而,要构建真正可扩展并且强大的应用程序,同时要保持托管费用在掌控之中,我们不得不重新考虑架构,同时尽量不迷失在无数可用的工具当中。

文章介绍了 Apache Hadoop,一个允许对大数据集进行分布式处理的框架,可能是这些工具中最为人熟知的一个了。除了提供强大的 MapReduce 实现和可靠的分布式文件系统——Hadoop 分布式文件系统(HDFS)——之外,也有一个大数据工具的生态系统构建在 Hadoop 之上,包括以下内容:

  • Apache HBase 的是针对大表的分布式数据库。
  • Apache Hive 是一个数据仓库中的基础设施,它允许在 HDFS 中存储的数据中进行临时的类似 SQL 的查询。
  • Apache Pig 是一个用于创建 MapReduce 程序的高层平台。
  • Apache Mahout 是一个机器学习和数据挖掘库。
  • Apache Crunch 和 Cascading 都是用于创建 MapReduce 管道的框架。

虽然这些工具是强大的,但它们也增加了许多开销,除非你的数据集非常大,否则是无法抵消这些成本的。比如,可以在一个非常小的数据集上尝试运行文章中提供的代码示例,比如一个只有一行的文件。你将会看到,处理时间将会比你所预期的时间长很多。如何确定你是否真的有一个大数据的问题?文章指出,虽然没有固定的数据,但有几个指标可以用来帮你决定你的数据是否足够大:

  • 你所有的数据不适合在一台机器上运行,这就意味着你需要一个服务器集群来在可接受的时间范围内处理你的数据。
  • 你在处理的大多数是 TB 级别的而不是 GB 级别的数据。
  • 你正在处理的数据量正在持续增长并且可能每年增加一倍。
  • 如果你的数据是不是真的很大,就保持事情的简单吧。通过传统的 Java 应用程序,甚至用更简单的工具,例如 grep 或 Awk 来处理你的数据,你可能会节省时间和金钱。

作者特别强调,如果你决定用 Hadoop 来分析你的数据集,那么随着数据的增加,你会希望避免性能瓶颈。你可以将很多配置调整应用到 Hadoop 集群上去,并且如果你的应用程序处理数据的速度没有达到你需要的那么快时,你可以一直添加更多的节点。但是,请记住,没有什么会比你自己的代码更高效对你的大数据应用程序产生更大的影响了。

当实现一个大的数据处理应用程序时,你的代码通常会在每个处理周期内被执行数百万或数十亿次。举个例子,考虑一下你得处理一个 10GB 的日志文件,并且每行有 500 字节那么长。分析每行文件的代码将运行 2000 万次。如果你可以让你的代码处理每行的时候快 10 微秒,这将使处理文件的过程快 3.3 分钟。因为你可能每天要处理很多 10GB 的文件,随着时间的增多,那些分钟将在资源和时间上表现出显著的实惠。

这里的经验是,每微秒都很重要。为你的问题选择最快的 Java 数据结构,在可能的情况下使用缓存,避免不必要的对象实例化,使用高效的字符串操作方法,并且用你的 Java 编程技能产出你所能编出的最高效的代码。

除了生产高效的代码之外,了解 Hadoop 的工作原理对于你避免一些常见的错误是很重要的。

在云中部署大数据应用程序有许多优点。文章指出,随着数据量的增大,你可以根据需要购买更多的机器,并且可以为峰值做好准备。然而,如果要在不产生高昂的扩展费用的前提下使用云服务,你得在脑中考虑好云平台的特殊性后再构建应用程序。首先,更加高效的代码意味着更少的处理时间,也就是较少的托管费用。每次你添加一个新节点到你的集群中的时候,你就是在增加更多花费,因此确保你的代码尽可能的有效是个很好的做法。

当在云中部署大数据应用程序时,考虑使用无共享架构是很重要的。无共享架构基本上是只由网络相互连接的单个计算机,他们不共享任何磁盘或者内存。这就是为什么这种架构的扩展性非常好,因为不会由磁盘访问的竞争或者是另一个进程的出现引发瓶颈。每台机器都需要顾及所有工作,机器直接是相互独立且自给自足的。

Hadoop 的容错功能打开了探索的可能,甚至更便宜的云机器也能提供。如 Amazon spot 的实例(当价格比你的竞价更高的时候你可能会失去这个机器)。当你使用这种机器来运行 TaskTracker 时,例如,你任何时候都可以承受机器的失去,因为 Hadoop 只要检测到你失去了一个或多个正在作业的结点时,它将会在另一个节点上重新运行这个作业。

事实上,在很多大数据应用程序中,甚至可以接受失去一小部分数据。如果你在做统计处理,很常见的事情是,一个没有被处理的小数据集可能不会影响到最终结果,当你创建你的架构时,你可以将此作为你的优势。

你可以使用一个在云端中支持 Hadoop 的服务来托管你的应用程序。亚马逊 EMR 是这种服务的一个很好的例子。使用 Hadoop 的托管服务将减轻安装和维护自己 Hadoop 集群的负担。不过,如果需要更多的灵活性,你也可以在云端安装自己的 Hadoop 解决方案。

文章指出,在云中使用 Hadoop 的另一个好处是,你可以监视作业的行为,并且即使在工作运行的情况下,你也可以根据需要自动添加或删除节点。Hadoop 的容错特性可以确保一切都将继续工作。这里的窍门就是预先配置主节点使其允许一系列从 IP 地址。这是通过 Hadoop 安装目录里的 conf/slaves 文件来完成的。有了这个配置,你可以从预先配置的一个 IP 地址中启用一个新的从结点,它就会自动加入集群。

2014 年 4 月 10 日 08:264105
用户头像

发布了 501 篇内容, 共 214.3 次阅读, 收获喜欢 29 次。

关注

评论

发布
暂无评论
发现更多内容

软件组件设计原则

积极&丧

Week10总结

lggl

总结 作业

我家有猫

熊斌

生活方式 七日更 我家有猫

数据仓库的前世今生

数据社

数据仓库 七日更

AOP的姿势之 简化 MemoryCache 使用方式

八苦-瞿昙

aop

pagerank算法

橘子皮嚼着不脆

安全架构:反垃圾与风控

积极&丧

日本准备推行AI婚配,年轻人会为“爱情算法”买单吗?

脑极体

架构师训练营 大作业(一)

netspecial

极客大学架构师训练营

避坑指南,Elasticsearch 分页查询的两个问题,你一定要知道

AlwaysBeta

elasticsearch python 爬虫

Java并发底层知识,锁获取超时机制知多少?

码农架构

Java java 并发

安全架构:加密与解密

积极&丧

炎币交易所APP系统开发|炎币交易所软件开发

开發I852946OIIO

系统开发

区块链的核心技术是什么?

CECBC区块链专委会

区块链

是的,我又换工作了

Rayjun

工作

Week10作业

lggl

作业

架构师训练营 大作业(二)

netspecial

极客大学架构师训练营

重磅!四部门联合约谈蚂蚁集团!刚刚,约谈的主要内容曝光……

CECBC区块链专委会

金融

框架VS架构,看两者异同

田维常

框架

Flink比Spark好在哪?

数据社

flink spark 七日更

Spring 源码学习 10:prepareBeanFactory 和 postProcessBeanFactory

程序员小航

spring 源码 源码阅读

微服务过载保护原理与实战

Kevin Wan

go 微服务 go-zero

ARROW阿罗AOW币APP系统软件开发

开發I852946OIIO

系统开发

从场景出发,日志聚类还可以这么玩

信仰圣光吧丶

AIOPS 日志聚类 日志治理

七周七并发模型

田维常

并发

架构师训练营第五周作业

zamkai

用领域驱动设计驱动系统的重构

积极&丧

架构师训练营第十周笔记

李日盛

学习 微服务 DDD

区块链 链什么?

CECBC区块链专委会

区块链 分布式

代理模式

soolaugust

设计模式 代理模式 七日更

13张图彻底搞懂分布式系统服务注册与发现原理

爱笑的架构师

微服务 微服务发现 服务注册与发现 七日更

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

大数据处理的开发经验-InfoQ