Hadoop的使用总结(2016年5月版)
Apache Hadoop已经问世已经10年,这段时间中,Hadoop及其生态系统都发展得超乎人们的想象。起初,Hadoop被称为批处理专用系统,但现在已经成为了一个通用平台,可以运行SQL引擎、机器学习等各种应用。然而,初学者向的文章如“什么是Hadoop?”或“Hadoop入门”仍然只涉及早期阶段的Hadoop,没有提供关于目前Hadoop的正确信息。与此同时,“最新的Hadoop”等类似文章只关注新功能和性能改进,并没有解释它们的进化带来了什么意义。本文将简要总结经过十年发展的Hadoop目前是如何被使用的。
就像「Linux应该这样使用」之类的描述一样是无意义的,同样地,对于Hadoop来说也不太适宜去说明「应该这样使用」。请注意这只是我个人的观点,总结了目前Hadoop的使用情况。
这篇文章是根据2016年5月的信息编写的,描述了Hadoop生态系统不断发展的世界。在这个世界中,一年后这篇文章会变得陈旧,没有任何保证。如果要调查趋势,请始终关注最新的信息。
批处理
在过去的十年中,每当提到Hadoop时,最常听到的解释就是批处理。虽然这种解释不太准确,但毫无疑问,批处理在当前仍然是主要的用途之一。
批处理有三个主要目的。
-
- ETL
-
- ビジネスレポート
- 機械学習のモデリング
ETL是指所謂的「數據預處理」或者「清洗」等相關處理,其概念最初源於數據倉庫(以下簡稱DWH)領域。業務報告指的是類似於「月度報告」或「日報」等大規模數據匯總處理的內容。機器學習建模則指的是應用機器學習算法處理大規模數據,例如在創建個性化推薦時。
云上的临时集群和批处理
如果只考虑批处理的话,从成本绩效的角度来看,在云上临时启动集群并进行分布式处理的方法非常优秀。实际上,许多使用云上Hadoop服务的用户可能只会想到这个用途。尽管这样的应用越来越多,但从整体上看,对于Hadoop来说,现阶段还不能说是主流。然而,我认为它可能是未来1到2年内最大的变化点。本文不会详细介绍云计算和Hadoop,但将来可能会另外发表一篇文章进行说明。
大规模数据分析平台
2012年,Apache Impala(孵化中)(以下简称Impala)发布,推动了基于Hadoop的ad-hoc查询SQL开发的活跃。这导致将现有DWH的部分处理工作转移到Hadoop端的趋势变得更加明显。本文不详细解释这种转移趋势的细节。
通过先前的批处理和针对即席查询的SQL-on-Hadoop的组合,已经可以用Hadoop来替代ETL + DWH(+用于分析的关系型数据库)这种昂贵的基础设施的一部分。可以毫不夸张地说,目前这种使用方法已经成为主流。
需要注意的是,在可预见的未来内,将所有的DWH都替换掉至少会很困难。因为目前的技术无法在Hadoop上实现完整的事务处理。
业务系统的后端(NoSQL、搜索引擎、流处理)
Apache HBase(以下简称HBase)、Apache Solr(以下简称Solr)、 Apache Spark(以下简称Spark)的子项目Spark Streaming在Hadoop生态系统中是一个独特的存在。 Hadoop生态系统的主要流派无疑是分析基础设施,通常不会要求与业务系统相当的SLA。 但是,在利用这些软件的情况下,它们必须作为业务系统的一部分运行,因此对所要求的SLA非常严格。 需要注意的是,预期的要求与分析基础设施完全不同。
数据科学家的基础设施
有了Spark的出现,数据科学家现在可以轻松地对Hadoop上的大规模数据进行快速处理。此外,用于Python数据处理的工具也得到了大量增强,使得那些希望利用大量数据进行研究、调查和开发等工作的人们的基础设施更加便利。
当听到“数据科学家”这个词时,可能会联想到人工智能、深度学习等词汇,或者想象出像SF世界一样能够实现魔法般存在的人物。但实际上,大部分工作是通过操作手头的数据,从各个角度进行汇总和分析,这项工作相对于人工智能等华丽词汇所能想象到的东西来说显得比较平凡。然而,事实上数据科学家大部分时间都花在这些平凡的工作上,而且很多情况下基础设施导致处理时间长、数据加载时间长,成为思考的瓶颈。当前的Hadoop已经能够提供解决这些数据科学家问题的基础设施。
企業數據中心
若只有一种替代的选择,那么像上述的用法就会有很多其他选择。例如,如果是NoSQL,可以使用Apache Cassandra(以下简称Cassandra),而使用Elasticsearch则可以构建大规模数据的搜索基础设施。然而,Hadoop的最大价值在于可以在“单一基础设施”中实现上述的用法。无需复制数据,可以执行即席查询、搜索索引以及建模机器学习,实现全部功能。这被称为企业数据中枢。
因为没有详细的统计数据,所以以下是我估计的一个可能主流的使用方式组合。
-
- ほぼ全てのユーザが実施する
大量のデータを取り込んでETL処理を行う
定期的なビジネスレポートを出力する
BIのバックエンドDBの一つとしてHadoopを選択し、アドホッククエリを投げる
必要なユーザのみ実施する
ETL処理が終わっていない生データや、BIでは調査が難しいデータに対し、Hadoop上で直接アドホックな分析処理を行う
警察対応、経営陣からの特命などによる、急ぎでのアドホックなレポート作成
システム連携
集計データ参照用のバックエンドDB
ユーザに紐づくメトリクス(ゲームのスコア等)
マシンに紐づくメトリクス(IoTや監視システムなど)
リコメンド結果の参照用
大量データに対する検索バックエンド、特に警察対応、エンドカスタマー対応など(頻繁に問い合わせがくる場合、アドホックでなくシステム化する必要がある)
リアルタイム異常検知
我认为在这其中,特别常见的一种模式是“对大量数据进行批处理,在SQL中执行自由查询,并同时在Spark/Python中进行数据分析”。如果只记住这一种用法,就足够了。
总结
在本文中,我們介紹了Hadoop在2016年5月的幾種使用方式,包括批處理、分析基礎、業務系統後端、數據科學家平台和企業數據中心。當然,這些僅僅是其中的一些使用方式,還存在許多非常先進和獨特的用例。本文的目的是讓大家理解「Hadoop不僅僅是用於批處理」,並希望大家能夠用自己的方法開創出新的使用方式。希望大家能夠參與其中。