第2章 - Hadoopのビッグデータ処理ブロック
記事のディレクトリ
Hadoopの紹介
Hadoopの概念
Apache Software FoundationのHadoopのは、システム・レベルの詳細透明分散インフラストラクチャをユーザーに提供プラットフォームを分散コンピューティングオープンソースです。Hadoopのビッグデータは、それが分散環境でのデータの膨大な量の処理能力を提供し、業界標準のオープンソースソフトウェアとして認識されています
Hadoopが良いクロスプラットフォームの機能を備えた、Javaベースの開発で、かつ安価なコンピュータクラスタにデプロイすることができます。Hadoopのは、プログラミング言語の様々なサポートすることができますようにC / C ++やJava、Pythonと。
コアのHadoopは、分散ファイルシステム、HDFS(Hadoopの分散ファイルシステム)とのMapReduceです。
Hadoopのソフトウェア・フレームワークであり、データの分散処理大量ことが可能である、処理の信頼性の高い効率的かつスケーラブルな方法であり、それは以下の態様の特徴を有します。
- 高信頼性
- 高性能
- 高いスケーラビリティ
- 高い耐障害性
- 低コスト
その優れた利点を持つHadoopのは、様々な分野で広く応用されており、インターネットは、アプリケーションのその分野の主要なフロントです
- メインログ処理の側面、推薦システムとデータウェアハウスのためのFacebookのHadoopプラットフォーム
- 家庭用のHadoop同社は主にBaiduのは、アリババは、網易は、Huawei社は、中国移動は、アリクラスタHadoopの比較的大きいです
エンタープライズアプリケーションアーキテクチャでのHadoop:
Hadoopのバージョン
進化のApacheのHadoopのバージョン:
- Hadoop1.0
- Hadoop0.20.x
- Hadoop0.21.x
- Hadoop0.22.x
- Hadoop2.0
- Hadoop0.23.x
- Hadoop2.x
- Hadoop3.0
- Hadoop3.x
Hadoopの3.xのバージョンが十分にテストされていない、また、いくつかの質問があるかもしれません。現在はHadoopの2.xのバージョンを使用することをお勧めします。
Hadoop1.0コア構成要素は、単一のノード名、単一の名前空間、リソース管理及び低効率がある、唯一のMapReduceとHDFSが挙げられます。Hadoop2.0は、ノードのホットスタンバイ機構の名前を提供し、HDFS HAを設計し、設計されたHDFS連盟、複数の名前空間を管理し、新しいリソース管理フレームワーク糸を設計しました。
Hadoopの最適化と開発
最適化とのHadoopの開発は主に二つの側面に反映されます。
- Hadoopの自体のMapReduceとHDFSアーキテクチャ設計の改良の2つのコアコンポーネントは
- Hadoopのエコシステムは、新しいコンポーネント豚、TEZ、スパークなどを追加して、他のコンポーネントを豊かにし続けて
パッケージ | 機能 | この問題を解決します |
---|---|---|
豚 | スクリプト言語を処理する大規模データは、ユーザーが唯一のいくつかの簡単な文章を書く必要がある、システムが自動的にMapReduceジョブに変換されます | 手動でする必要が多くのコードを書いて抽象化の低レベル、 |
スパーク | メモリベースの高リアルタイムを有する、並列プログラミングフレームワークを分散し、反復計算のためのよりよいサポート | 遅延の高い、と反復計算を実行するのに適しません |
Oozie | ワークフローエンジンとコラボレーションサービス、Hadoopの上で実行されているさまざまなタスクのコーディネート | 管理機構との間の依存関係は、ジョブ(ジョブ)を提供していません、ジョブ間の依存関係を処理することをユーザに要求 |
論文 | フレームワーク支持DAGジョブを計算し、ジョブの再操作分解不要な操作を減らすために、大規模なDAGオペレーションを形成するために結合 | 効率を低下させる、異なるタスク間のMapReduce操作を複製 |
カフカ | パブリッシュ・サブスクライブ・メッセージングシステム、分散、分散システムの異なる種類のさまざまなコンポーネントとのHadoopを達成するために、カフカ、異なるタイプのデータ間の効率的なリアルタイムの切り替えへのアクセスを統一することができます | 様々な構成要素および他の製品との間に均一のHadoopのエコシステムの欠如、効率的なデータ交換を仲介 |
Hadoopのエコシステム
Hadoopのプロジェクト構造と絶えず発展を豊かに、豊かな生態系のHadoopを形成しています
データウェアハウス(データウェアハウス)は、管理上の意思決定をサポートするために、データ収集の歴史的変化を反映して、サブジェクト指向、統合、比較的安定しています。
主な違いは、データウェアハウスデータベースのことです。
- データウェアハウスは、サブジェクト指向設計で、トランザクション指向データベース設計であります
- ストアのトランザクションデータへの一般的なオンラインデータベース、一般的に履歴データのデータウェアハウスストレージ
- データベースの設計は、意図的に冗長性を導入しているデータウェアハウスの設計における冗長性を避けるためです
- データベースは、データを捕捉するように設計されたデータウェアハウスは、データの分析のために設計されています
巣箱
ハイブは、大規模データストレージをサポートするために、Hadoopのデータウェアハウス・ツールの上に構築された分析、良好なスケーラビリティを有し、それ自体インタフェースユーザプログラムとして見ることができるある程度のデータを格納し、処理しないれます。
- 分散ファイルシステムは、データストレージに依存しているHDFS
- MapReduceの処理機種依存データを計算する分散並列
- 単純なSQLに似たクエリ言語を定義--HiveQL、ユーザーがHiveQLを書くことができ文は、MapReduceのタスクを実行します
- これは、簡単にHadoopプラットフォームに、元のリレーショナルデータベースのデータ・ウェアハウス・アプリケーション上に構築することができます
ハイブ自体は、データ抽出、変換、ロード(ETL)、格納、クエリ、および大規模でのHadoopに格納されたデータを分析することができるツールの範囲を提供し、これらのツールは、データウェアハウスシナリオの多様を満たすことができます。
従来のリレーショナルデータベースに似た多くの点でハイブが、その根底には、非常に多くの点で、HDFSとMapReduceのに依存しているが、従来のデータベースとも異なります。
コントラスト | 巣箱 | 従来のデータベース |
---|---|---|
データ挿入 | サポートバッチインポート | 単一および一括インポートをサポート |
データ更新 | サポートしていません。 | サポート |
指数 | サポート | サポート |
実行遅れ | 高いです | 低いです |
拡張性 | 良いです | 限られました |
ハイブアプリケーション例:WORDCOUNT
- ハイブは、あなたがあまり記述する必要があるコードの量を実現使っWORDCOUNTアルゴリズム
- MapReduceの実装では、我々は、アルゴリズムを実行するためにjarファイルをコンパイルする必要があり、ハイブを必要としません。最終的にHiveQL文が実行するためのMapReduceタスクに変換する必要がある、これはハイブのフレームワークによって自動的に行われ、ユーザーは特定の実装の詳細を理解する必要はありません
企業のビッグデータ分析プラットフォームでハイブのアプリケーションは、時々、豚ハイブは、代替ツールとして使用することができます。
豚
豚は、Hadoopの一般的なタスクを簡素化し、大規模のHadoopベースのデータ分析プラットフォームです。豚のデータは、内蔵豚を操作半構造化データ(例えばログファイルとして)有意義になるように、ロードされ、最終結果を表す変換データを格納することができます。一方、豚の拡張性は、Javaでのカスタムデータ型を使用して、データ変換のためのサポートを追加します。
- SQLに似たクエリ言語豚ラテン語を提供します
- これは、複雑なのMapReduceアプリケーションを作成することなく、ユーザーは簡単なスクリプトを使用して複雑なデータ分析を実装することができます
- 豚は自動的にHadoopクラスタ上で実行し、MapReduceのプログラムが自動最適化機能のために生成しているユーザーが記述したスクリプトのMapReduceジョブに変換されます
- 構造化データのハイブ一般的な処理は、ブタ、非構造化データを処理することができます。プロセスフロー:LOAD->変換 - > STORE / DUMP
TEZ:フレームワークDAGジョブの計算をサポート。核となるアイデアは、マップにし、さらに分割2つの操作を減らし、操作要素が自由に組み合わせを分解することができ、組立一部のプログラム制御の後、大きいジョブのDAGに形成することができる新たな操作を、生成します。
Hadoopのの重要なコンポーネント
重要なのHadoopエコシステムのコンポーネント
パッケージ | 機能 |
---|---|
HDFS | 分散ファイルシステム |
MapReduceの | 分散並列プログラミングモデル |
糸 | リソースマネージャとスケジューラ |
論文 | 糸の上に次世代Hadoopのクエリ処理フレームワークを実行します |
巣箱 | Hadoopの上のデータウェアハウス |
HBaseの | Hadoopの上の非リレーショナル分散データベース |
豚 | SQLに似たクエリ言語豚ラテン語を提供し、大規模データ解析のHadoopベースのプラットフォーム |
Sqoop | データベースと伝統のHadoopとの間のデータ転送のための |
Oozie | Hadoopの上のワークフロー管理システム |
飼育係 | 分散協調サービスを提供 |
嵐 | フロー計算フレームワーク |
水路 | 高可用性、信頼性の高い、分散型の大規模なログ収集、集約および伝送システム |
Ambari | Hadoopの迅速な展開ツールそのサポート供給のApache Hadoopクラスタの管理と監視 |
カフカ | 高スループットは、パブリッシュ・サブスクライブのデータ消費者規模なサイトをストリーミングすべてのアクションを扱うことができるシステムを分散型メッセージング |
スパーク | HadoopのMapReduceの一般的な並列フレームに類似 |
Hadoopクラスタの展開
Hadoopのインストール:
- スタンドアローンモードに:Hadoopの非分散モードのデフォルトのモード(ローカルモード)は、追加の設定を必要とせずに実行することができます。
- 伪分布式模式:Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。
- 分布式模式:使用多个节点构成集群环境来运行 Hadoop
Hadoop框架中最核心的设计是为海量数据提供存储的 HDFS 和对数据进行计算的 MapReduce。MapReduce的作业主要包括:
- 从磁盘或从网络读取数据,即IO密集工作
- 计算数据,即CPU密集工作
Hadoop集群的整体性能取决于CPU、内存、网络以及存储之 间的性能平衡。因此运营团队在选择机器配置时要针对不同 的工作节点选择合适硬件类型。
一个基本的 Hadoop 集群中的节点主要有:
- NameNode:负责协调集群中的数据存储
- DataNode:存储被拆分的数据块
- JobTracker:协调不同机器上数据计算任务
- TaskTracker:负责执行由 JobTracker 指派的任务
- SecondaryNameNode:帮助 NameNode 收集文件系统运行的状态信息
在集群中,大部分的机器设备是作为 Datanode和 TaskTracker 工作的。NameNode提供整个 HDFS 文件系统的 NameSpace(命名 空间)管理、块管理等所有服务,很多元数据是直接保存在 内存中的,因此需要更多的RAM,与集群中的数据块数量 相对应,并且需要优化 RAM 的内存通道带宽。SecondaryNameNode在小型集群中可以和 NameNode 共用一台机器,较大的群集可以采用与NameNode相同的硬件。
Hadoop集群规模可大可小,初始时,可以从一个较小规模的集群开始,比如包含10个节点,然后,规模随着存储器和计算需求的扩大而扩大。
小さなクラスタは、単一ノード上で実行されているノード名(名前ノード)とJobTrackerは、一般的に許容可能です。しかし、HDFSクラスタに格納されているファイルの数が増加し、ノードの名前でより多くのメインメモリ、時間、ノードの名前を必要とし、JobTrackerは異なるノード上で実行する必要があります。
第2のノード名とノード名がほぼ同じメインメモリ要件を有するので、第2のノード名(SecondaryNameNode)とノードの名前は、従って、好ましくは、2つの異なるノード上で実行する、しかし、同じマシン上で実行することができます。
一般的なHadoopクラスタ構造は、二段階のネットワークで構成されています。各ラック(ラック)30-40サーバ、スイッチは1ギガバイトを配置し、スイッチまたはルータ(1GB以上)にコアを転送します。