<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>devkuma – BigData</title>
    <link>https://www.devkuma.com/jp/tags/bigdata/</link>
    <image>
      <url>https://www.devkuma.com/jp/tags/bigdata/logo/180x180.jpg</url>
      <title>BigData</title>
      <link>https://www.devkuma.com/jp/tags/bigdata/</link>
    </image>
    <description>Recent content in BigData on devkuma</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>jp</language>
    <managingEditor>kc@example.com (kc kim)</managingEditor>
    <webMaster>kc@example.com (kc kim)</webMaster>
    <copyright>The devkuma</copyright>
    
	  <atom:link href="https://www.devkuma.com/jp/tags/bigdata/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Apache Hadoop</title>
      <link>https://www.devkuma.com/jp/docs/apache-hadoop/</link>
      <pubDate>Sat, 24 Dec 2022 10:22:54 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/jp/docs/apache-hadoop/</guid>
      <description>
        
        
        &lt;h2 id=&#34;apache-hadoopの概要&#34;&gt;Apache Hadoopの概要&lt;/h2&gt;
&lt;p&gt;Hadoop（ハドゥープ）は、大規模データの蓄積と分析を分散して処理するフレームワークであり、Java言語で実装されている。
Hadoopの元になったのは、Googleの大量データを効率的に処理するための分散処理基盤であるMapReduceとGoogle File Systemである。&lt;/p&gt;
&lt;p&gt;Googleはこのシステムに関する論文を2004年に公開し、それを参考にDoug CuttingとMike Cafarellaによって開発された。Hadoopという名前は、Dougの息子が黄色い象のぬいぐるみに付けた名前に由来し、意味がなく、簡単で、他の場所で使われていないという理由で採用された。黄色い象はHadoopのマスコットキャラクターでもある。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/apache-hadoop/apache-hadoop.png&#34; alt=&#34;Hadoopキャラクター&#34;&gt;&lt;/p&gt;
&lt;p&gt;Hadoopは分散処理基盤であるため、各処理をクラスター内のマシンに分け（Map）、各マシンで処理された結果を集約（Reduce）して最終的な結果を得る。&lt;br&gt;
近年、大量データ（BigData）の中から目的のデータを抽出したり、保存されたデータから何らかの傾向を読み取ったりするなど、データマイニングへの要求が高まっている。また、BigDataを処理できるだけでなく、より短時間でそのような情報を算出したいという要求も増えている。&lt;br&gt;
以前はBigDataを処理するためにデータウェアハウスのような専用製品を使用する必要があった。Hadoopは、このようなデータ処理を一般的なサーバーマシンを複数台接続（スケールアウト）することで可能にする。&lt;/p&gt;
&lt;p&gt;複数のサーバーで構成されるHadoopシステムは、複数台に分散されることでシステムの柔軟性を高める。処理性能を向上させるには、Hadoopクラスターにシステムを追加するだけでよい。Hadoopクラスターシステムは一般的なサーバーマシンで構成できるため、ハードウェア調達が容易である。またソフトウェア面でも、クラスターに追加するサーバーにHadoopシステムをインストールして設定するだけでHadoopクラスターをスケールアップできる。この特徴から、ハードウェア、ソフトウェアの両面で拡張性が高いと言える。&lt;/p&gt;
&lt;p&gt;近年はクラウドサービスを使用して複数台のサーバーを簡単に起動できるようになったため、Hadoopを使用してデータ処理を行いたい場合にだけクラウド上にHadoopクラスターを構築できる。さらに性能が不足すればサーバーを追加し、リソースが余ればサーバーを減らし、1つの処理が終わった時点でHadoopクラスターのすべてのマシンを解放する、といった使い方も可能であるため、今後ますます利用場面が増えると考えられる。&lt;/p&gt;
&lt;p&gt;Hadoopバージョン1まではMapReduceのみの並列処理フレームワークだったが、Hadoopバージョン2からはStorm、Spark、Tez/Impalaなどの他の並列処理フレームワークを利用できるようになった。また、Hadoop上のデータに対するMapReduce（Java）以外の処理インターフェースも増えた。例えばImpalaやTezで動作するHiveやPigを通じて、ユーザーは使い慣れたSQLとほぼ同等のクエリを使用してデータへアクセスできる。さらにStormやSparkではストリーミングによるリアルタイムデータ処理が可能になり、HDFS上に存在するデータ以外でもHadoopシステムを利用できるようになっている。&lt;/p&gt;
&lt;h2 id=&#34;hadoopの特徴&#34;&gt;Hadoopの特徴&lt;/h2&gt;
&lt;p&gt;Hadoopは次の4つのCoreモジュールで構成されている。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hadoop Distributed File System (HDFS)&lt;/li&gt;
&lt;li&gt;Hadoop MapReduce&lt;/li&gt;
&lt;li&gt;Hadoop Common&lt;/li&gt;
&lt;li&gt;Hadoop YARN&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;また、次の2つはHadoopプロジェクトとは別のモジュールである。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Apache Ozone&lt;/li&gt;
&lt;li&gt;Apache Submarine&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;hdfshadoop-distributed-file-system&#34;&gt;HDFS（Hadoop Distributed File System）&lt;/h3&gt;
&lt;p&gt;Hadoop固有の分散ファイルシステムである。ユーザーには1つの大きなファイルシステムに見えるが、各ノードにまたがってファイルを保存する。1つのノードで障害が発生してもデータの欠損がないよう、デフォルトで3つのノードに同じデータを保持（三重化）している。&lt;/p&gt;
&lt;h3 id=&#34;mapreduce&#34;&gt;MapReduce&lt;/h3&gt;
&lt;p&gt;分散されたデータに対して並列に処理を行うためのフレームワークである。Mapステップでは各スレーブノードのデータに対して処理を行い、ReduceステップでMapステップにより複数ノードに分散・実行された処理結果の集約を行う。&lt;/p&gt;
&lt;h3 id=&#34;hadoop-common&#34;&gt;Hadoop Common&lt;/h3&gt;
&lt;p&gt;Hadoopの機能を支援するユーティリティ集合である。&lt;/p&gt;
&lt;h3 id=&#34;yarnyet-another-resource-negotiator&#34;&gt;YARN（Yet Another Resource Negotiator）&lt;/h3&gt;
&lt;p&gt;Hadoopバージョン1までは独立したコンポーネントではなかったが、Hadoopバージョン2ではリソース管理を専門とするモジュールとして独立した。MapReduceリソース、ジョブスケジューリングだけでなく、Giraph、Storm、Spark、Tez/Impalaなど他の分散処理フレームワークのリソース管理も可能になった。&lt;/p&gt;
&lt;h3 id=&#34;apache-ozone&#34;&gt;Apache Ozone&lt;/h3&gt;
&lt;p&gt;Hadoopで分散オブジェクトストレージを実現するためのプロジェクトである。数千億規模のファイルとブロックへ拡張できるよう設計されており、YARNやKubernetesのようなコンテナ環境での動作もサポートする。S3およびHadoop File System APIなど複数のプロトコルを使用してアクセスできる。元々はHadoopのサブプロジェクトだったが、Apacheトップレベルプロジェクトの一つとして独立した。&lt;/p&gt;
&lt;h3 id=&#34;apache-submarine&#34;&gt;Apache Submarine&lt;/h3&gt;
&lt;p&gt;YARNのようなリソース管理プラットフォーム上でディープラーニングアプリケーション（TensorFlow、PyTorch、MxNetなど）を実行できるようにするプロジェクトである。元々はHadoopのサブプロジェクトだったが、Apacheトップレベルプロジェクトの一つとして独立した。Hadoop 2.7.3以上で使用できる。&lt;/p&gt;
&lt;h2 id=&#34;hadoopの使用例&#34;&gt;Hadoopの使用例&lt;/h2&gt;
&lt;p&gt;HadoopはMapReduceの代わりに、より高速に処理できるApache Sparkを使用できる。詳細はhttps://openstandia.jp/solution/hadoop-spark/を参照する。&lt;/p&gt;
&lt;h2 id=&#34;hadoopの動作環境&#34;&gt;Hadoopの動作環境&lt;/h2&gt;
&lt;p&gt;HadoopはJava言語で作られているため、JVMが必要である。2022年4月時点の安定版であるHadoop 3.3.2ではJava 8およびJava 11をサポートする。JVMが実行される環境であればOSは問わない。&lt;/p&gt;
&lt;h3 id=&#34;hadoopが実行されるos&#34;&gt;Hadoopが実行されるOS&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;主要Linuxディストリビューション&lt;/li&gt;
&lt;li&gt;Windows&lt;/li&gt;
&lt;li&gt;MacOSX&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;HadoopはOpenJDKで正常に動作することが確認されている。各JDKの動作検証結果は、以下のHadoop Wikiページで確認できる。&lt;br&gt;
&lt;a href=&#34;https://cwiki.apache.org/confluence/display/HADOOP/Hadoop&amp;#43;Java&amp;#43;Versions&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://cwiki.apache.org/confluence/display/HADOOP/Hadoop+Java+Versions&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hadoopはコンパイル済みバイナリパッケージと、ユーザーが直接コンパイルするソース版の両方を提供する。&lt;br&gt;
コンパイル済みバイナリパッケージはすぐに使用できる一方で、拡張できない設定もあるため、ユーザーが必要な機能を有効にするにはソースからビルドする必要がある場合もある。&lt;/p&gt;
&lt;h2 id=&#34;hadoopライセンス&#34;&gt;Hadoopライセンス&lt;/h2&gt;
&lt;p&gt;HadoopはApacheのトップレベルプロジェクトの一つである。&lt;br&gt;
ライセンスはApache License 2.0であり、ユーザーはソフトウェアの使用、配布、修正、派生版配布に制限を受けない。&lt;/p&gt;
&lt;h2 id=&#34;hadoop公式サイト&#34;&gt;Hadoop公式サイト&lt;/h2&gt;
&lt;p&gt;Hadoopの公式サイトは以下のURLである。
&lt;a href=&#34;http://hadoop.apache.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://hadoop.apache.org/&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;また、Hadoop公式WikiページにはHadoopに関するさまざまな情報がある。
&lt;a href=&#34;https://cwiki.apache.org/confluence/display/HADOOP/Home&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://cwiki.apache.org/confluence/display/HADOOP/Home&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;hadoopダウンロード&#34;&gt;Hadoopダウンロード&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://hadoop.apache.org/releases.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://hadoop.apache.org/releases.html&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;hadoopを構成する3つのレイヤー&#34;&gt;Hadoopを構成する3つのレイヤー&lt;/h2&gt;
&lt;p&gt;Hadoopアーキテクチャは主に次の3つのレイヤーで構成される。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;分散処理エンジン（HadoopではHadoop MapReduceを使用）&lt;/li&gt;
&lt;li&gt;リソースマネージャー（HadoopではHadoop YARNを使用）&lt;/li&gt;
&lt;li&gt;分散ファイルシステム（HadoopではHDFSを使用）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;そして、Hadoopはデータにアクセスするためにクエリエンジンを使用することが多い。&lt;/p&gt;
&lt;p&gt;Hadoopはすべてのコンピューターに上記の構成をインストールし、データの読み書きと処理を分散する。&lt;/p&gt;
&lt;h3 id=&#34;分散処理エンジン&#34;&gt;分散処理エンジン&lt;/h3&gt;
&lt;p&gt;分散処理エンジンは、Hadoopで並列分散処理を担当するソフトウェア群である。&lt;/p&gt;
&lt;p&gt;基本的にはMapReduceという分散処理エンジンが実行される。&lt;/p&gt;
&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;&lt;div class=&#34;h4 alert-heading&#34; role=&#34;heading&#34;&gt;MapReduce処理概要&lt;/div&gt;


MapReduceは次のように分散処理を行う。

- Map: 入力をkey-value形式で出力し、各Mapをノード別に分散可能
- Shuffle: Map出力をソート
- Reduce: 同じキーを集約
&lt;/div&gt;

&lt;p&gt;代表的な分散処理エンジンの特徴は次のとおりである。下に行くほど速い。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MapReduce: 中間結果をHDFS（ストレージ）へ出力&lt;/li&gt;
&lt;li&gt;Tez: 中間結果をYARNコンテナ（ストレージ）へ出力&lt;/li&gt;
&lt;li&gt;Spark: 中間結果をメモリへ出力&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;なお、MapReduceは終わらないコンテンツのように見えるため、TezやSparkを使用することを推奨する。&lt;/p&gt;
&lt;h3 id=&#34;リソースマネージャー&#34;&gt;リソースマネージャー&lt;/h3&gt;
&lt;p&gt;リソースマネージャーは、Hadoopでリソース（CPU、メモリ）管理を担当する。&lt;/p&gt;
&lt;p&gt;MapReduceで使用するリソースマネージャーは、アプリケーションレベルコンテナを管理するHadoop YARNである。&lt;/p&gt;
&lt;p&gt;そのほかに、OSレベルコンテナを管理するApache Mesosもある。こちらはDockerのような技術（Linuxコンテナ）を利用する。&lt;/p&gt;
&lt;h3 id=&#34;分散ファイルシステム&#34;&gt;分散ファイルシステム&lt;/h3&gt;
&lt;p&gt;分散ファイルシステムは、Hadoopでデータの読み書き分散を担当する。Hadoopで使用される分散ファイルシステムには次が含まれる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HDFS: Hadoop標準ファイルシステム&lt;/li&gt;
&lt;li&gt;EMRFS: Amazon S3をストレージとして使用するファイルシステム&lt;/li&gt;
&lt;li&gt;MapR-FS: C言語でHDFSを書き直したファイルシステム。高速である。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;そのほかにもCloud StorageまたはBlob Storageをストレージとして使用できるように見えるが、内部的にどの分散ファイルシステムを使用するかは分からない。&lt;/p&gt;
&lt;h2 id=&#34;hadoopエコシステム一覧&#34;&gt;Hadoopエコシステム一覧&lt;/h2&gt;
&lt;p&gt;デフォルトではないHadoopを構成するソフトウェア、または周辺ソフトウェアをHadoopエコシステムという。&lt;/p&gt;
&lt;p&gt;Hadoopエコシステムは次のように組み合わせて、さまざまな分散処理を実行できる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;データウェアハウス構成例: Hadoop + Tez + Hive
&lt;ul&gt;
&lt;li&gt;Hiveを使用してHadoopをSQLで操作できる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;機械学習構成例: Hadoop + Spark
&lt;ul&gt;
&lt;li&gt;機械学習でよく発生する反復処理をSparkのインメモリ処理で効率化できる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;全文検索構成例: Hadoop + Elasticsearch
&lt;ul&gt;
&lt;li&gt;Elasticsearch for Apache Hadoopを使用して全文検索サービスを実装できる。&lt;/li&gt;
&lt;li&gt;Hadoopの分散ファイルシステムとしてElasticsearchクラスターを活用する。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ストリーム処理構成例: 各サーバーおよびIoTデバイス &amp;ndash;&amp;gt; Kafka &amp;ndash;&amp;gt; Hadoop
&lt;ul&gt;
&lt;li&gt;複数サーバーおよびIoTデバイスからストリーム処理を行い、Hadoopにデータを集約するにはKafkaを使用する。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以下に代表的なHadoopエコシステムと関連システム、およびその機能を紹介する。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Hadoopエコシステム&lt;/th&gt;
          &lt;th&gt;実現する機能&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Apache Accumulo&lt;/td&gt;
          &lt;td&gt;KVS型のNoSQL。セキュリティ重視&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Apache Atlas&lt;/td&gt;
          &lt;td&gt;ガバナンス制御、コンプライアンス対応&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Cascading&lt;/td&gt;
          &lt;td&gt;MapReduceを簡単に扱うAPI&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Apache Drill&lt;/td&gt;
          &lt;td&gt;エッジ機器データを操作する分散SQLエンジン&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Apache Falcon&lt;/td&gt;
          &lt;td&gt;データライフサイクル管理&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Apache Flume&lt;/td&gt;
          &lt;td&gt;複数データソースからHadoopへ非構造化データを集約（ストリームデータ処理）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Apache HBase&lt;/td&gt;
          &lt;td&gt;KVS型NoSQL&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Apache Hive&lt;/td&gt;
          &lt;td&gt;SQLライク（HiveQL）なクエリでデータを操作できる。耐障害性重視の場合。DWH実現&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Apache Hue&lt;/td&gt;
          &lt;td&gt;HadoopおよびHadoopエコシステムをGUIで操作&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Apache Impala&lt;/td&gt;
          &lt;td&gt;SQLライク（Impala SQL）なクエリでデータを操作できる。速度重視の場合。リアルタイム処理実現&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Apache Kafka&lt;/td&gt;
          &lt;td&gt;複数データソースからHadoopへ非構造化データを集約（ストリームデータ処理）。Flumeとの差は別途参照&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Apache Knox&lt;/td&gt;
          &lt;td&gt;中央集中型認証およびアクセス管理&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Apache Mahout&lt;/td&gt;
          &lt;td&gt;線形代数、統計分析、機械学習ライブラリ&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Apache Mesos&lt;/td&gt;
          &lt;td&gt;OSレベルコンテナを管理するリソースマネージャー&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Apache Oozie&lt;/td&gt;
          &lt;td&gt;ジョブスケジューラー&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Apache Phoenix&lt;/td&gt;
          &lt;td&gt;HBaseをデータストアとして使用するリアルタイムRDB&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Apache Pig&lt;/td&gt;
          &lt;td&gt;データ処理（ETL）ツール&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Apache Ranger&lt;/td&gt;
          &lt;td&gt;認証済みユーザーへ属性ベースのアクセス権限を付与&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Apache Sentry&lt;/td&gt;
          &lt;td&gt;認証済みユーザーへロールベースのアクセス権限を付与&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Apache Slider&lt;/td&gt;
          &lt;td&gt;YARNアプリケーション制御。長時間起動している場合はKillするなど&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Apache Solr&lt;/td&gt;
          &lt;td&gt;全文検索（Elasticsearchで使用される）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Apache Spark&lt;/td&gt;
          &lt;td&gt;機械学習、SQL操作、R言語、グラフをメモリ内で処理&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Apache Sqoop&lt;/td&gt;
          &lt;td&gt;RDBMSからHadoopへ構造化データをインポート、エクスポート&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Apache Tez&lt;/td&gt;
          &lt;td&gt;MapReduceより高速な分散処理フレームワーク&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Presto&lt;/td&gt;
          &lt;td&gt;中間結果をメモリへ出力するSQLクエリエンジン&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

      </description>
      
      <category>BigData</category>
      
      <category>Apache Hadoop</category>
      
    </item>
    
    <item>
      <title>Apache Spark</title>
      <link>https://www.devkuma.com/jp/docs/apache-spark/</link>
      <pubDate>Sat, 24 Dec 2022 10:22:54 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/jp/docs/apache-spark/</guid>
      <description>
        
        
        &lt;h2 id=&#34;apache-sparkの概要&#34;&gt;Apache Sparkの概要&lt;/h2&gt;
&lt;p&gt;Apache Sparkは、ビッグデータや機械学習のような大規模データを処理する&lt;strong&gt;クラスタコンピューティングのための分散処理フレームワーク&lt;/strong&gt;である。Sparkは2009年にカリフォルニア大学バークレー校のAMPLabで、HadoopのコミッターでもあるMate Zahariaによって開発が開始され、現在はApacheソフトウェア財団のトップレベルプロジェクトの一つとして管理、開発されている。&lt;/p&gt;
&lt;p&gt;Sparkが開発された目的としては、従来のMapReduceの処理速度の遅さを改善することと、MapとReduceの繰り返しというスタイルに縛られない柔軟な処理スタイルへの対応が挙げられる。&lt;/p&gt;
&lt;p&gt;Sparkは分散処理フレームワークとして単独でも動作するため、ポストHadoopとして注目されている一方で、MapReduce、HDFS、YARNなどで構成されるHadoopコアシステム内のMapReduceの代替として利用することも可能である。&lt;/p&gt;
&lt;h2 id=&#34;apache-sparkの主な特徴&#34;&gt;Apache Sparkの主な特徴&lt;/h2&gt;
&lt;p&gt;Sparkの大きな特徴として、Sparkが提供する簡潔なAPIを使用して柔軟な処理モデルを簡単にプログラミングできること、大規模データを従来のMapReduceに比べてはるかに短い時間で処理できることなどが挙げられる。&lt;/p&gt;
&lt;p&gt;従来のMapReduceでは、処理モデルとしてMapとReduceを1セットで実行する必要があったため、Hadoop上で動作するアプリケーションを開発するにはこのスタイルに従って開発する必要があった。そのため、柔軟な処理モデルを開発することが難しいという問題があった。&lt;/p&gt;
&lt;p&gt;またMapReduceでは、1回のMapおよびReduce処理ごとに処理結果をディスクへ書き込むため、処理速度を向上させることが難しいという問題があった。これに対してSparkでは、メモリに読み込んだデータセット（RDD）に対して複数回のMap処理を連続して実行し、さらにReduceした結果をディスクに書き込まずインメモリ状態のまま次のMap処理をそのデータセットに対して行う方式を取っているため、MapReduceに比べて最大100倍以上の処理速度向上が見られる場合もあるとされる（従来のMapReduceと同様に処理結果をディスクへ書くこともできる）。&lt;/p&gt;
&lt;p&gt;Sparkの特徴は次のとおりである。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Speed
&lt;ul&gt;
&lt;li&gt;インメモリ（In-Memory）ベースの高速処理&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ease of Use
&lt;ul&gt;
&lt;li&gt;Java、Scala、Python、R、SQLなど多様な言語対応による使いやすさ&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Generality
&lt;ul&gt;
&lt;li&gt;SQL、Streaming、機械学習、グラフ演算など多様なコンポーネントを提供&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Run Everywhere
&lt;ul&gt;
&lt;li&gt;YARN、Mesos、Kubernetesなど多様なクラスターで動作可能&lt;/li&gt;
&lt;li&gt;HDFS、Cassandra、HBaseなど多様なファイル形式とストレージをサポート&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;apache-sparkのコンポーネント構成&#34;&gt;Apache Sparkのコンポーネント構成&lt;/h2&gt;
&lt;p&gt;Sparkは分散処理フレームワークとして、次のコンポーネント要素で構成される。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spark Core（Scala、Java、Python、R APIを含む）&lt;/li&gt;
&lt;li&gt;Spark SQL + DataFrames&lt;/li&gt;
&lt;li&gt;Spark Streaming&lt;/li&gt;
&lt;li&gt;MLlib&lt;/li&gt;
&lt;li&gt;GraphX&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;spark-core&#34;&gt;Spark Core&lt;/h3&gt;
&lt;p&gt;Sparkは処理するデータをRDD（Resilient Distributed Dataset）形式で保持する。&lt;br&gt;
RDDは不変で並列実行可能なコレクションであり、分散された各コンピューターに配置される。&lt;br&gt;
Sparkを使用したプログラミングモデルでは、このRDDに対してSpark Coreで提供されている各種メソッドを適用しながら処理を行っていく。Spark Coreが提供するAPIを通じてRDDを操作するとき、開発者は分散されたデータを意識せずに分散処理を実行できる。&lt;br&gt;
これはSparkの特徴の一つである、柔軟な処理を容易にプログラミングできるという点である。&lt;br&gt;
Spark Coreで提供されるAPIは、Sparkの開発言語であるScala以外にも、Java、Python、Rといった言語から呼び出し可能なAPIが標準で提供されている。また、サードパーティライブラリの中には、Scalaと同じくJava VM上で動作する関数型言語ClojureからSpark APIを呼び出すためのライブラリも存在しており、他の言語向けSpark APIも今後増えていくと予想される。&lt;/p&gt;
&lt;h3 id=&#34;spark-sql--dataframes&#34;&gt;Spark SQL + DataFrames&lt;/h3&gt;
&lt;p&gt;Sparkでは、Sparkが提供するAPIを通じてRDDを操作する方法のほかに、Spark SQLというSQLのような言語を使用して、DataFramesというデータベーステーブルのような名前付き列を持つ抽象化されたデータセットを操作できる。&lt;br&gt;
これはScala、Java、Python、Rのような言語を習得していないユーザーでも、SQLの知識があればSpark SQLを通じてSparkでデータを処理できるインターフェースである。&lt;/p&gt;
&lt;h3 id=&#34;spark-streaming&#34;&gt;Spark Streaming&lt;/h3&gt;
&lt;p&gt;Spark Streamingは、Sparkに絶えず送信されるストリーミングデータに対してリアルタイム分散処理を可能にする機能を提供するエンジンである。&lt;br&gt;
同様にストリーミングデータを処理するフレームワークとしてApache Stormがある。Apache Stormがストリーミングデータ処理に特化したフレームワークである一方、Spark StreamingはSparkでリアルタイムデータを処理するエンジンとしての機能である。&lt;br&gt;
ほかにもApache Flinkというストリーミング処理フレームワークがある。こちらはバッチ処理も可能であり、機械学習ライブラリやグラフ処理ライブラリなども存在するため、Sparkにかなり似た構成となっており、Sparkの対抗馬と呼ばれている。&lt;/p&gt;
&lt;p&gt;Apache Storm&lt;br&gt;
&lt;a href=&#34;http://storm.apache.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://storm.apache.org/&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Apache Flink&lt;br&gt;
&lt;a href=&#34;http://flink.apache.org/introduction.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://flink.apache.org/introduction.html&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;mllib&#34;&gt;MLlib&lt;/h3&gt;
&lt;p&gt;MLlibはSparkの機械学習ライブラリである。Sparkの柔軟な処理スタイルで機械学習を実行するプログラムを作成できる。&lt;br&gt;
機械学習ライブラリとしては、まずHadoopと連携して機械学習を行うMahoutというソフトウェアが存在したが、Hadoop + MahoutではMapReduceのプログラミングモデルを使用して機械学習プログラムを作成する必要があり、処理速度低下という問題があった。&lt;br&gt;
それに比べてSparkはHadoopより高速に処理でき、SparkとSparkが提供するMLlibを使用した機械学習は効率がよいという点で注目が高まっている。&lt;/p&gt;
&lt;p&gt;Apache Mahout&lt;br&gt;
&lt;a href=&#34;http://mahout.apache.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://mahout.apache.org/&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;graphx&#34;&gt;GraphX&lt;/h3&gt;
&lt;p&gt;GraphXはSparkを通じてグラフデータを並列処理するAPIを提供する。&lt;br&gt;
Sparkの特徴である高速処理により、グラフデータの並列処理が可能である。&lt;/p&gt;
&lt;p&gt;上で説明したSparkを構成する一部のコンポーネントには、ストレージに分類されるものがない。
Sparkでは読み書きに既存の各種ストレージを利用できる。以下はSparkと連携可能なストレージの一部である（サードパーティライブラリ利用を含む）。&lt;/p&gt;
&lt;p&gt;HDFS, Cassandra, HBase, S3, MongoDB, Couchbase, Riak, Neo4j, OrientDB&lt;/p&gt;
&lt;p&gt;また、読み取れるデータソースとしてはCSVやXMLなどのファイルから、Solr、Elasticsearchなどの検索エンジンまで多様である。&lt;/p&gt;
&lt;p&gt;Sparkと各種データソースとの連携パッケージ一覧&lt;br&gt;
&lt;a href=&#34;https://spark-packages.org/?q=tags%3A%22Data%20Sources%22&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://spark-packages.org/?q=tags%3A%22Data%20Sources%22&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;上で示した多様なデータソースとの連携を可能にするパッケージ以外にも、既存のSparkエコシステムを拡張するための各種パッケージが提供されている。
このパッケージはSparkPackageとして次のサイトに掲載される。&lt;br&gt;
&lt;a href=&#34;https://spark-packages.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://spark-packages.org/&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;apache-sparkの動作環境&#34;&gt;Apache Sparkの動作環境&lt;/h2&gt;
&lt;p&gt;Sparkが動作保証しているのは、以下のようなOSである。また、実行するにはJavaがインストールされている必要がある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;主要Linuxディストリビューション&lt;/li&gt;
&lt;li&gt;Windows&lt;/li&gt;
&lt;li&gt;Linux&lt;/li&gt;
&lt;li&gt;MacOSX&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sparkで提供されるAPIがサポートするバージョンは次のとおりである。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Java 8, 11, 17（Java 8u201未満はSpark 3.2.0では非推奨）&lt;/li&gt;
&lt;li&gt;Scala 2.12, 2.13（Spark 3.3.0は互換性のあるScala 2.12.xを使用する必要がある）&lt;/li&gt;
&lt;li&gt;Python 3.7以上（Python 3.9の場合、Apache Arrowとpandas UDFが動作しない場合がある）&lt;/li&gt;
&lt;li&gt;R 3.5以上&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;apache-sparkのライセンス形式&#34;&gt;Apache Sparkのライセンス形式&lt;/h2&gt;
&lt;p&gt;SparkはApacheのトップレベルプロジェクトの一つである。&lt;br&gt;
ライセンスはApache License 2.0であり、ユーザーはソフトウェアの使用、配布、修正、派生版の配布に制限を受けない。&lt;/p&gt;
&lt;h2 id=&#34;apache-spark参考情報&#34;&gt;Apache Spark参考情報&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://spark.apache.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Spark公式サイト&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://spark.apache.org/docs/latest/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Spark公式ドキュメント&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.databricks.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Sparkコミュニティサイト&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Spark開発者たちが始めたDatabricksという会社によって提供されている。&lt;/p&gt;

      </description>
      
      <category>BigData</category>
      
      <category>Apache Spark</category>
      
    </item>
    
    <item>
      <title>PySparkの概念と主な機能</title>
      <link>https://www.devkuma.com/jp/docs/pyspark/</link>
      <pubDate>Fri, 06 Jan 2023 12:36:13 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/jp/docs/pyspark/</guid>
      <description>
        
        
        &lt;h2 id=&#34;pysparkとは&#34;&gt;PySparkとは&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://spark.apache.org/docs/latest/api/python/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PySpark&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;は、リアルタイムの大規模データ処理のためのオープンソース分散コンピューティングフレームワークおよびライブラリ群であるApache Spark向けのPython APIである。PythonやPandasのようなライブラリにすでに慣れているなら、PySparkはよりスケーラブルな分析とパイプラインを作る方法を学ぶのに適した言語である。&lt;/p&gt;
&lt;p&gt;Apache Sparkは基本的に、並列およびバッチシステムで処理することで巨大なデータセットを扱う計算エンジンである。SparkはScalaで書かれており、PySparkはSparkとPythonの連携をサポートするためにリリースされた。Spark用APIを提供するだけでなく、PySparkはPy4Jライブラリを活用してRDD（Resilient Distributed Datasets）とのインターフェースをサポートする。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/apache-spark/python-spark-pyspark.png&#34; alt=&#34;Apache SparkおよびPythonロゴ&#34;&gt;&lt;/p&gt;
&lt;p&gt;PySparkで使用される主なデータ型はSpark DataFrameである。このオブジェクトはクラスター全体に分散されたテーブルと考えることができ、RやPandasのデータフレームと似た機能を持つ。PySparkを使用して分散計算を行うには、他のPythonデータ型ではなくSpark DataFrame上で操作を実行する必要がある。&lt;/p&gt;
&lt;p&gt;PandasとSpark DataFrameの主な違いの1つは、即時実行と遅延実行である。PySparkでは、結果がパイプラインで実際に要求されるまで操作が遅延される。例えば、Amazon S3からデータセットをロードし、DataFrameに複数の変換を適用する処理を指定できるが、これらの操作はすぐには適用されない。代わりに変換グラフが記録され、データが実際に必要になったとき、例えば結果をS3へ書き戻すときに、変換が単一のパイプラインジョブとして適用される。このアプローチは、DataFrame全体をメモリへ取り込むことを防ぎ、システムクラスター全体でより効果的な処理を可能にするために使われる。Pandas DataFrameを使用すると、すべてをメモリに取り込み、すべてのPandas操作が即座に適用される。&lt;/p&gt;
&lt;h2 id=&#34;pysparkの機能とライブラリ&#34;&gt;PySparkの機能とライブラリ&lt;/h2&gt;
&lt;p&gt;Py4JはPySpark内に統合されている広く使われるライブラリで、PythonがJVM（Java Virtual Machine）オブジェクトと動的にインターフェースできるようにする。PySparkは効率的なプログラム作成のために多くのライブラリを提供する。また、以下を含む互換性のあるさまざまな外部ライブラリがある。&lt;/p&gt;
&lt;h3 id=&#34;pysparksql&#34;&gt;PySparkSQL&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://spark.apache.org/docs/2.4.0/api/python/pyspark.sql.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PySparkSQL&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;は、大容量の構造化または半構造化データにSQLに似た分析を適用するPySparkライブラリである。PySparkSQLとともにSQLクエリを使用することもできる。&lt;/p&gt;
&lt;h3 id=&#34;mllib&#34;&gt;MLlib&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://spark.apache.org/docs/latest/ml-guide.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;MLlib&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;は、PySparkおよびSparkのラッパー機械学習（ML）ライブラリである。MLlibは分類、回帰、クラスタリング、協調フィルタリング、次元削減、基本的な最適化プリミティブのための多くの機械学習アルゴリズムをサポートする。&lt;/p&gt;
&lt;h3 id=&#34;graphframes&#34;&gt;GraphFrames&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://graphframes.github.io/graphframes/docs/_site/index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GraphFrames&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;は、PySpark CoreおよびPySparkSQLを使用してグラフ分析を効率的に実行するための一連のAPIを提供するグラフ処理ライブラリである。高速な分散コンピューティングに最適化されている。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Pythonは知っているがScalaは知らないデータエンジニアにとって、PySparkは純粋なSparkよりはるかに使いやすいが、欠点もある。PySparkのエラーはJavaのスタックトレースエラーとPythonコードへの参照の両方を表示するため、PySparkアプリケーションのデバッグは非常に難しい場合がある。&lt;/p&gt;
&lt;p&gt;Sparkは他のデータ処理オプションより多くの処理オーバーヘッドと複雑な設定を含む。RayとDaskが最近登場した。Daskは純粋なPythonフレームワークであるため、ほとんどのデータエンジニアはすぐにDaskを使用できる。&lt;/p&gt;
&lt;h2 id=&#34;参考&#34;&gt;参考&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.databricks.com/kr/glossary/pyspark&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PySpark – Databricks&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.dominodatalab.com/data-science-dictionary/pyspark&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;What is PySpark? | Domino Data Science Dictionary&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

      </description>
      
      <category>BigData</category>
      
      <category>Apache Spark</category>
      
      <category>PySpark</category>
      
    </item>
    
  </channel>
</rss>
