ビッグ データとインテリジェント データ アプリケーション アーキテクチャ チュートリアル シリーズ: ビッグ データと環境モニタリング

著者: 禅とコンピュータープログラミングの芸術

1 はじめに

1. 背景の紹介

社会経済の継続的な発展に伴い、さまざまなデータの量が急増し、データの収集、保管、処理などのプロセスはますます複雑になり、時間がかかります。センサーの普及、通信機器の広範な応用、従来のハードウェア機器ではもはや需要を満たすことができなくなりました。近年、この問題を解決するために、ビッグデータ、クラウドコンピューティング、機械学習テクノロジーなどの新興テクノロジーがますます使用されています。情報時代の到来により、環境モニタリングの分野は徐々にデータ駆動型、大量データ処理、インテリジェント制御における重要なリンクとなってきました。

2. 中心となる概念

1. データフローモデル

環境モニタリングの分野におけるデータ フロー モデルは、次の図に示すように要約できます。

① センサーデータ収集:センサーで収集できるデータ(温度、湿度、光量など)のほとんどは、保存および処理のためにネットワーク経由でデータセンターに送信する必要があります。② データセンターへの保管:データセンターはネットワークを介してデータベースサーバーに接続され、センサーで収集したデータをデータベースに保管します。③ データの前処理と分析: データベースサーバー上のデータは、処理結果を得るためにさまざまな前処理方法 (クリーニング、変換、完了など) を受け、アルゴリズムを使用してデータ分析を実行して、指標や情報を取得します。④ データの表示と適用: 環境条件をより深く理解し、それに応じて対応するために、分析結果をエンドユーザーまたはサードパーティのソフトウェアに提示します。

2. Hadoopエコシステム

Hadoop はオープンソースの分散コンピューティング プラットフォームであり、そのエコシステムには HDFS、MapReduce、YARN、Hive の 4 つの主要プロジェクトが含まれています。

① HDFS (Hadoop 分散ファイル システム): Hadoop 分散ファイル システム (HDFS) は、Hadoop のコア コンポーネントの 1 つです。これは、信頼性が高く耐障害性の高い分散ファイル システムであり、Hadoop ファイル システムの 2 つの本体である NameNode と DataNode で構成されます。NameNode はファイル メタデータの維持を担当し、ファイル システム全体の「頭脳」です。DataNode は実際のファイル データを保存し、データ アクセス インターフェイスも提供します。HDFS は、安価な汎用サーバー上で実行することも、大規模な分散システムに展開することもできます。

② MapReduce: MapReduce は、Hadoop で最も有名なプログラミング モデルです。大きなタスクを複数の小さなタスクに分割し、これらの小さなタスクを同時に実行し、最後にすべての結果をマージします。MapReduce モデルは、各ステージがいくつかの異なるマッパーとリデューサーで構成され、連携して MapReduce タスク全体を完了するパイプライン フレームワークです。

③ YARN (Yet Another Resource Negotiator): YARN は Hadoop リソース マネージャーの別の実装であり、クラスター内のノードがクラスター リソースを共有できるようにします。YARN は、さまざまなコンピューティング フレームワークおよびシステムがクラスター リソースを均一に管理できるようにする一連の共通 A​​PI を提供します。YARN は安価な汎用サーバー上で実行でき、大規模な分散システムにも展開できます。

④ Hive: Hive は Hadoop をベースにした SQL クエリ言語です。複雑なクエリ構文をサポートし、MapReduce ジョブを自動的に生成してクエリ効率を向上させることができます。

要約すると、Hadoop エコシステムは、HDFS、MapReduce、YARN の 3 種類のシステムを統合し、データ分析用の SQL クエリ言語 Hive のセットを提供します。

3. Hadoopストリーミング

Hadoop ストリーミングは、ユーザーがオフライン バッチ処理タスクを送信できるようにする Hadoop のユーティリティです。オフライン バッチ処理タスクは通常 1 回限りであり、ジョブの実行が終了すると破棄されます。MapReduce とは異なり、Hadoop ストリーミングは単純なデータ処理のみを実行でき、Map 関数や Reduce 関数を使用して複雑な操作を実装することはできません。ただし、Hadoop 上でコマンド ライン スクリプトを実行できることが、他のコンピューティング フレームワークとの最大の違いです。

4. アパッチカフカ

Apache Kafka は、オープンソースの分散ストリーム処理プラットフォームであり、高スループット、低遅延の分散メッセージング システムです。高速かつスケーラブルで、遅延が少ないように設計されています。また、耐障害性も優れており、メッセージが失われないようにすることができます。

Kafka は、プロデューサーとコンシューマーという 2 つのロールを通じてパブリッシュ/サブスクライブ モデルを実装します。プロデューサーは Kafka クラスターにメッセージを書き込み、コンシューマーは Kafka からのメッセージを消費します。メッセージには、書き込み時と読み取り時に対応するキー属性と値属性があります。キーはメッセージの分類とフィルタリングに使用でき、値は送信されるコンテンツです。

5. RESTful API

REST (Representational State Transfer) はインターネット ソフトウェア アーキテクチャ スタイルであり、その本質はリソースを状態、プロパティ、対話型アクションとして表現する方法です。GET、POST、PUT、DELETE、HEAD、OPTIONS、TRACE、CONNECT などの標準 HTTP メソッドを通じてさまざまな操作を定義します。RESTful APIはREST仕様に基づいて構築されたアプリケーションプログラミングインターフェースであり、URL、HTTPメソッド、リクエストパラメータ、レスポンス結果などを通じてサービスを定義します。

6. アパッチの嵐

Apache Storm は、データ ストリームをリアルタイムで処理でき、シンプルなプログラミング モデルを提供する分散コンピューティング プラットフォームです。Storm は内部的に複数の軽量スレッドで構成されており、これらのスレッドはデータ ストリームを通じてデータを交換します。リアルタイム データ ストリームを効率的に処理でき、複数の言語での記述をサポートします。Storm は、Hadoop、Flink、Samza、Kafka およびその他の多くのフレームワークをサポートしています。

3. コアアルゴリズムの原則と具体的な操作手順

(1) データの取得

データを取得するにはいくつかの方法があります。

  1. 物理的アクセス: 温度、湿度、光強度などのセンサーによって直接収集されるデータ。

  2. アナログ アクセス: シミュレーション手法を通じて物理信号を電気信号にシミュレートし、それらを水中音響信号やレーダー信号などのデジタル信号収集に変換します。

  3. データ アクセス: 外部データ ソースは、API が提供するインターフェイスを介して、サードパーティの Web サイトが提供する気象データ、道路交通データなどのデータを受信します。

一般に、データは地理的位置、時間、その他の要因に応じて多様で欠落していることが多いため、データの収集と処理は人工知能アルゴリズムに依存することがよくあります。

(2) データクリーニング

データ クリーニングとは、元のデータの前処理と処理を指し、ノイズを除去し、重複データやデータ エラーなどを削除して、データが正確で完全で利用可能であることを確認します。環境モニタリングでは、データ クリーニングには次の重要な機能があります。

  1. データのフォーマット: さまざまなソースからのデータを統一フォーマットにフォーマットし、その後の処理と分析を容易にします。

  2. データの標準化: データの単位を統一して、比較や統計を容易にします。

  3. データ サンプリング: データ量を削減し、計算速度を向上させるためにデータをサンプリングします。

  4. データ修正: 欠落データ、外れ値、偏差などのデータを修正します。

(3) データ処理

データ処理とは、ビジネス関連の情報を取得するために、クリーン化されたデータを計算および分析することを指します。環境モニタリングの分野で一般的に使用されるデータ処理方法は次のとおりです。

  1. 時系列データ処理: 時系列データとは、時系列データなど、連続した時点で発生するデータを指します。環境モニタリングで一般的に使用される時系列データ処理方法には、スライディング ウィンドウ法、ARIMA アルゴリズムなどがあります。

  2. 分散データ処理: 分散データとは、複数のコンピュータ間で共有されるデータを指します。環境監視で一般的に使用される分散データ処理手法には、Apache Spark、TensorFlow、MXNet などが含まれます。

  3. 深層学習データ処理: 深層学習データとは、ニューラル ネットワークを使用して処理されたデータを指します。環境モニタリングで一般的に使用される深層学習データ処理方法には、畳み込みニューラル ネットワーク、リカレント ニューラル ネットワークなどが含まれます。

(4) データ表示

データ表示とは、環境条件をよりよく理解し、それに応じて対応するために、処理された結果をエンド ユーザーまたはサードパーティ ソフトウェアに提示することを指します。一般的なデータ表示方法には、ビジュアル チャート、グラフィカル インターフェイスなどが含まれます。

4. 具体的なコード例と説明

温度データを例として、Python 言語と Apache Kafka メッセージ キューを組み合わせて、簡単なシナリオを練習します。

(1) Apache Kafkaをインストールする

(2) 環境変数の設定

kafka サービスを正しく開始するには、KAFKA_HOME や PATH などの環境変数を設定する必要があります。具体的な操作方法は以下の通りです。

vi ~/.bashrc # 使用 vi 编辑.bashrc 文件

export KAFKA_HOME=/usr/local/kafka    # 设置 KAFKA_HOME 变量
export PATH=$PATH:$KAFKA_HOME/bin       # 添加 $KAFKA_HOME/bin 目录到 PATH

source ~/.bashrc      # 更新环境变量

(3) テーマを作成する

kafka-topics.sh コマンドを使用してトピックを作成します。

cd /usr/local/kafka/bin   # 切换到 kafka 安装目录
./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic temperatures

ここで、--zookeeper はズーキーパーのアドレスを指定し、--replication-factor はレプリカの数を表し、デフォルトは 1 です。--partitions はパーティションの数を表し、デフォルトは 1 です。--topic はトピック名を指定します。

(4) 作家・プロデューサー

プロデューサーとして温度データをTemperaturesトピックに送信する簡単なPythonプログラムを作成します。

import time
from json import dumps
from kafka import KafkaProducer


producer = KafkaProducer(bootstrap_servers='localhost:9092')

while True:
    data = {'temperature': 20 + random.uniform(-1, 1)}
    message = dumps(data).encode('utf-8')
    producer.send('temperatures', message)

    print(f'Sent {data}')

    time.sleep(1)

上記のコードは、指定されたトピックにメッセージをパブリッシュする役割を担う KafkaProducer クラスを使用します。ここでは無限ループが設定されており、ランダムな温度値を毎秒生成し、それをメッセージとして温度トピックに発行します。

(5) コンシューマの書き込み

コンシューマーとして温度トピックをサブスクライブし、受信した温度データを出力する簡単な Python プログラムを作成します。

from kafka import KafkaConsumer
from json import loads


consumer = KafkaConsumer('temperatures',
                         bootstrap_servers=['localhost:9092'],
                         auto_offset_reset='earliest',
                         enable_auto_commit=True,
                         group_id='my-group',
                         value_deserializer=lambda x: loads(x.decode('utf-8')))

for message in consumer:
    data = message.value
    print(f'{message.timestamp}: Got {data}')

上記のコードは、指定されたトピック内のメッセージをサブスクライブする役割を担う KafkaConsumer クラスを使用します。ここでは、受信した各メッセージの JSON データを解析して出力するための無限ループが設定されています。

(6) プログラムの実行

最後に、2 つのコマンド ライン ウィンドウでプロデューサーとコンシューマーをそれぞれ実行すると、温度データが正常に公開および消費されているかどうかを確認できます。

5. 今後の開発動向と課題

インターネット経済の発展に伴い、環境モニタリングの分野は新たな方向に発展しています。ビッグデータに代表される新技術がもたらす価値は無限に増大しているが、人間の関与は他の分野に比べてはるかに低い。この不均衡により、環境モニタリング技術におけるイノベーションの認識と経験レベルが不十分になり、実際の商業価値が生み出されていません。

さらに、環境モニタリング技術は膨大なデータ処理の基盤となり、適用効果の評価は技術者に高い要求を課します。環境モニタリングには複雑さ、不確実性、急速な変化が伴うため、環境モニタリングモデルのパフォーマンス指標は大きな影響を受けます。環境モニタリングモデルのパフォーマンスをより科学的かつ効果的に評価する方法が重要です。

上記の理由により、環境モニタリングの分野は依然として多くの課題に直面しています。この記事が読者の皆様にとって有益な参考になれば幸いです。

おすすめ

転載: blog.csdn.net/universsky2015/article/details/133446635