试着大致整理Hadoop生态系统

总的来说,Hadoop生态系统可以被概括为以下方面(2018年)。

需要永久地,在中国以本地语言的方式将下述内容进行改写的一种选项:
CL:求助; TR:翻译;

整理一下围绕着Hadoop这一重大突破而形成的生态系统。
本文将简略地概述,不涉及复杂的内容。

Hadoop是什么?

我們開發了一個框架,讓分散系統的構建變得非常容易(並不意味著變得簡單)。

顺便说一下,分布式系统指的是

    • 複数のサーバを連携させて一つのサーバとみなす

 

    • なんからの計算処理を複数のサーバで手分けして行う

Ex. 夏休みの宿題を家族で手分けすれば早く終わりますよね、ね!

高価かつ超ハイスペックサーバじゃなくてもコモディティハードウェアを複数台束ねるだけで、構築可能(スケールアウト)
リソースが足らなくなってもサーバを足せばよい(既存サーバを有効活用できる)

雖然有很多好處,但也存在一些問題,
在本應該構建分散系統的情況下,

    • サーバが壊れたときにそこで処理していたものはどうする?

 

    • サーバが問題なく動いているかを誰が監視するの?

 

    データが来ないんだけどこれってネットワークの問題?それともサーバの問題?

等等,腦海中有很多要思考的事情堆積如山。

※余談
在研究领域中,分散系统相关存在着各种问题。
包括协议问题、领导者选举问题、分散快照问题、节点故障检测等等……
哎呀,从这里开始就是未知的领域了
(我也打算从这些方面开始学习)

因此,如果要建立分散系統,就需要實現考慮到上述問題的演算法,但這實在是相當困難的。

因此,Hadoop是通过将复杂的问题转化为框架,并在分布式系统中实现数据存储和处理,而无需从头开始实施分布式系统算法的。

顺便提一下,Hadoop主要分为三个组件。

コンポーネント概要HDFS大きなサイズのデータを分散システム上で保存するファイルシステムMapReduce分散システム上でデータを処理するためのプログラミングモデルYARNMapReduceを始め、後述する分散処理フレームワークによるデータ処理のマネージングを行う(どのサーバが暇しているとか)

所以,现在进入正题。

Hadoop已经诞生了!这样就可以建立分布式系统了!太棒了!希望有这样的功能,还希望有那样的功能,自己动手去实现吧!然后出现了许多应用程序来弥补Hadoop的弱点(大概)。将这些组件总称为Hadoop生态系统。

顺便提一下,Hadoop的弱点可以大致分为以下几个类别。

    • プログラミングやりたくない問題

 

    • バッチ処理問題

データの抽出問題 → 一部のデータだけ変えるとかができない。小回りがきかない。
スピード問題 →とにかく遅い。
IoT等によるストリーミング問題 → リアルタイムにデータをさばけない。

その他

我不想要做编程的问题

在Hadoop上进行并行分布式处理时,通常会提供Java框架,因此需要使用Java来编写Map处理、Reducer处理等,这样做有些麻烦。而处理大数据的人更倾向于是工程师而不是分析师,因此开发面向这一层次的分布式处理接口变得非常流行。其中的典型例子是SQL。

在Hive中,可以用SQL来描述MapReduce处理。

Hive是类似于由Facebook开发的SQL接口。
Hive可以像一般的关系型数据库那样创建表,
通过编写类似于SELECT 〇〇 FROM △△的SQL语句来提取数据。

真正的RDB和Hive之间的区别在于它们的处理引擎。
在Hive中,处理引擎仍然是MapReduce。具体来说,Hive会解释SQL语句,并将其作为MapReduce处理在Hadoop上执行。

因此,类似于RDB这样在短时间内返回数据是不会发生的。
虽然是SQL,但只进行批量处理。

因此,最近很少直接使用Hive本身,但在稍后提到的用于SQL处理引擎中,很多情况下仍使用Hive来存储表结构的元数据和服务器功能。

用脚本处理编写Pig的MapReduce

Pig是Yahoo开发的一个在Hadoop上可处理的脚本处理接口。它能够执行一种名为Pig Latin的专有脚本语言。由于学习成本要低于Java,因此被认为易于实施。然而,由于Hive(SQL)更有名,所以我个人没有听说过它被广泛使用的案例。

批处理问题

MapReduce 是一种以批处理为前提的编程模型。顺便提一句,根据处理方法的大致分类,

処理の一覧詳細バッチ処理処理実行前の準備に時間がかかる(レイテンシが大きい)ものの、大量のデータを一気にさばける。数分〜数時間単位インタラクティブ処理処理を実行すると数秒から数分の間に結果が返ってくる。ただし大量のデータをさばくのは難しい。一般的なRDBのSQLはこれに属するリアルタイム処理随時くるデータを数ミリ秒単位で処理する。

为了处理大量数据并避免在分布式节点上出现数据丢失的情况,Hadoop采用了具有容错性的架构。因此,它采用了批处理架构,但这也导致了以下方面的牺牲。

弱点内容小回りがきかないデータの更新やフィルタリングして抽出みたいなレコード単位の処理が難しいスピードが遅い耐障害性を保ちつつ、より高速に処理ができるエンジンがほしいリアルタイムにデータがさばけない大量のデータがIoT等で取得できるようになったものの、リアルタイムに来るデータをさばいて可視化や通知機能といったことができない

HBase是一种具有随机访问能力的数据库,但存在灵活性不足的问题。

HBase是Hadoop生态系统的一个组成部分。
HBase具有类似关系型数据库的表处理功能,具有可以随机访问数据的能力,可以对数据进行部分获取、插入和更新等操作。
另外,与关系型数据库不同的是,HBase不需要事先定义模式(DDL),因此可以扮演数据湖的角色。
作为数据结构,HBase采用了宽列类型的结构。

从“什么是宽列式布局”的讨论来看,它是键值对类型与几乎无限的横向列相结合的形式。

keyval1val2val31aa
bb2
ccdd

实际存储数据的方式可能会变成类似的形式(实际的数据保存方式可能会稍有不同)
此外,可以创建列族作为列的分组。

因此,数据的存储要使用

    • テーブル名

 

    • カラムファミリー名

 

    • カラム名

 

    キーの値

在同一数据表中的不同列族名称上,可以指定相同的列名来输入数据。

建议您阅读与NoSQL相关的文章或书籍,以了解这些数据结构的详细信息。

这些数据存储在HDFS的后端,因此具有容错性。
此外,表不是以节点为单位处理,而是以类似于区域块的单位处理。

    • Regionが膨らんできたらRegionそのものを分割する

 

    ノードごとにRegionの大きさが偏ってきたらロードバランシング(Regionの大きさを均一にするように調整する)

该系统还具有这样的功能。
它通常被用作消息数据库。

HDFS和HBase的结合?Kudu。

Kudu被誉为结合了HDFS和HBase优点的分布式存储服务。具体而言,

    • 主にデータ抽出(SELECT処理)に特化したDWH型のストレージ

 

    • RDBのようにスキーマを決めておく必要あり

 

    SQLインターフェースがあるためクエリでデータを取得可能

※我打算再多学一点,再加一些内容。。。

能够与Hive进行协同处理的引擎。

出现了Hive,使得可以在SQL中进行分布式处理!!!然而,随之而来的是问题的发生。

虽然可以用SQL编写,但是结果返回很慢!

一般的的关系数据库(RDB)查询执行,即使慢点,也应该在几分钟内返回结果,但是在Hive中,甚至经过数小时仍然没有返回结果… 这也不足为奇,因为Hive的处理引擎是MapReduce = 批处理,所以无法像关系数据库那样进行交互式处理。

但我不会放弃。

要是能制造一台跑得快的引擎就好了吧? yī dé de jiù ba?)

因此,涌现出了可以替代MapReduce的并行分布式处理引擎。

コンポーネント概要TezMapReduceより早い。Hiveインターフェースと組み合わせて数倍〜数百倍のパフォーマンスで分散処理ができるImpalaCloudera(Hadoopディストリビューション屋さん)が開発。Hiveのメタストア等と連携する。Spark SQL分散処理フレームワークであるSparkの一機能。Impalaと同じくHiveと連携して処理を行う。PrestoFacebookが開発。 もちろん早い。HDFS以外のデータソース(RDB等)との接続も可能

我对这些区别的细微之处不是很明白…

最近常常听到的是Presto或者是SparkSQL吧。

被称为MapReduce2.0的通用分布式处理引擎Spark。

最近很流行诸如”金钱2.0″、”动力3.0″之类的概念,就像〇〇2.0一样。
从这个意义上说,可以说Apache Spark就是MapReduce 2.0。
Spark是在美国著名的UC Berkeley大学的AMPlab开发的分布式处理框架。

在于MapReduce

    • インメモリ処理

基本的にデータをインメモリに入れたまま処理するためMapReduceよりディスクI/Oが少ないので早い。

遅延実行(DAG(非循環有向グラフ))
キャッシュ機能による反復処理の効率化

効率的な処理が可能になる

バッチ処理だけでなく、リアルタイム処理、機械学習、SQLライクな処理のライブラリがある

大概就是这个意思了。

目前,有关DataFrame和DataSet等高效数据处理的开发正在进行中,
在分布式数据处理方面已经成为几乎事实标准。

实时发送数据的Flume,Kafka。

以下是关于实时数据传输组件的介绍。
特别是在物联网领域中,我们需要实时检查设备状态和监测突发压力(值的突然大幅变化)等需求增加,这也导致了最近实时数据处理技术的增加,各种开源软件也应运而生。

虽然实时数据处理架构一开始看起来似乎很复杂,但是如果我们整理一下相关人物,

基本上

    • やってきたデータを一時的に保管する場所(簡易的にストアと呼ぶようにします)

 

    • ストアにデータを送る

 

    ストアからデータを取得する

只能这样了。

除了这种组合之外,还有以下方式:
原始数据→临时存储数据→最终存储数据

    • 随時データ元がデータを送るのか(Push型)

 

    一定間隔でデータを取ってくるのか(Pull型)という違いがあります。

如果是Kafka和Flume的情况,

通过将原始数据(如日志等)随时发送到临时存储中进行数据保留(推送方式),
最终的数据存储位置(如HDFS等)定期地从临时存储中取回数据(拉取方式)。

这是一个组织形式。

另外,在Kafka的情况下,可以对存储消息的地方(代理服务器)进行集群化和复制,从而保证消息的容错性。
此外还有一个名为Mirror Maker的功能可以复制集群。

除此之外

使用Sqoop将数据从RDB发送到HDFS

可以使用Flume或者Sqoop等工具来实现数据的导入。

    • RDBからデータを取り出してCSV等テキストファイル化する

 

    テキストファイルをHDFSに配置する

需要进行以下的步骤,但Sqoop可以通过命令轻松处理。
此外,Sqoop还支持批量加载,可以快速传输大量数据。
而且,Sqoop不仅可以将关系数据库中的数据导入到HDFS,还可以将HDFS中的数据导入到关系数据库中,这也是它的优势之一。

以Avro和Perquet的方式高效地处理文件。

HDFS是一个文件系统。(第二次)

在HDFS上,我们会放置文本文件,但有时文件会进行复制,所以我们希望能够尽可能地压缩数据,但又不喜欢处理执行时解压缩所带来的延迟。

因此,Avro和Parquet作为适用于数据处理的文件格式应运而生。

作为这两者的共同之处

    • データをシリアライズできる

 

    • バイナリ形式

 

    Snappy等の圧縮アルゴリズムを使って、ブロック分割したときにスプリッタブル(ファイル分割状態のままでも処理可能)なので分散処理に適している

有。

以下是中文的本地化解释,仅提供一种选项:

两者的不同之处是,

Avro = 阿弗罗

    • 行指向

 

    スキーマ(カラム)構造の変更に強い

佩尔奎

    • 列指向

一部のカラムのみ読み出すときのスピードが早い
Avroよりデータのファイルサイズが圧縮される

可以提出以下的例子

定义Oozie用于分布式处理的工作流程

Oozie是一种能够以工作流的形式管理多个处理的工具。通常,分散处理很少只在一个应用程序中完成,而是通过按顺序执行多个处理来实现满足要求的处理。

Oozie不仅可以构建工作流程(Job),还可以…

    • Jobの監視

 

    HiveやMapReduce,Sparkとうことなる処理を単一のJobにまとめられる

也有诸如此类的优点。

Zookeeper负责协调管理分布式节点。

在构建分布式系统时,需要协调各个集群节点之间的工作。具体而言,这种协调的方式是…

    • 自分以外にどのノードが分散システムに組み込まれているのか

 

    • 今動いていないノードがあるか(どのノードが動いていないか)

 

    • 複数のノードが動いているとまずいときに、他のノードの動きをロックさせる

 

    設定ファイルを全ノードで共通化させる

等等等等。

在节点之间(甚至超过100个节点)进行此类操作非常困难。
因此,Zookeeper是一个能够协调管理分布式系统的管理器。

在实际使用HBase或Kafka时,强烈建议或要求使用Zookeeper。

结束

我尝试简要整理了Hadoop生态系统。看到这些,我深深地感受到技术进步并非从无到有,而是从既有的问题解决中衍生而来。(确实是站在巨人的肩膀上)我打算进一步学习分布式系统领域。

广告
将在 10 秒后关闭
bannerAds