JindoFS SDK is fully open for use
ビッグデータと OSS
従来のビッグデータ分野では、基盤ストレージとして HDFS を使用し、その上で MapReduce や Hadoop 上の SQL ジョブを実行するのが一般的でした。クラウド上でのビッグデータ技術の発展に伴い、従来の HDFS のボトルネックがますます顕在化しているため、多くのユーザーが HDFS のデータを Alibaba Cloud OSS などのオブジェクトストレージシステムに移行し、OSS 上で MapReduce や SQL ジョブを直接実行するようになっています。同時に、機械学習のデータセットを OSS に配置し、関連する機械学習処理を行うことも一般的になっています。ユーザーは OSS をデータウェアハウスやデータレイクの基盤として活用するようになり、OSS の処理速度がジョブ実行効率を左右する重要な要素となっています。
OSS SDK
[公式 SDK](https://help.aliyun.com/document_detail/52834.html) は、Alibaba Cloud OSS チームが開発した公式 SDK で、バケット管理、ファイル管理、ファイルのアップロードとダウンロード、バージョン管理、認可されたアクセス、画像処理などの API インターフェイスを提供します。公式 SDK には Java、Python、C++ などのバージョンがあり、いずれも RESTful API をラップしたものです。公式 SDK は OSS リソースを包括的に管理するためのインターフェイスを提供します。これらのインターフェイスは非常に包括的で、比較的ローレベルです。
Hadoop-OSS-SDK
[Hadoop-OSS-SDK](https://hadoop.apache.org/docs/stable/hadoop-aliyun/tools/hadoop-aliyun/index.html) は、公式 SDK (Java 版) をベースにパッケージ化されており、Hadoop の FileSystem インターフェイスの抽象化レイヤーを提供します。Hive や Spark などのビッグデータエコシステムは公式 SDK を直接使用できませんが、FileSystem インターフェイスを介して OSS ファイルを直接読み書きできます。Hadoop-OSS-SDK は、Hadoop ビッグデータエコシステムと OSS を接続する接着剤の役割を果たします。FileSystem インターフェイスは、主に OSS のファイル管理、ファイルのアップロードとダウンロード機能に焦点を当てており、公式 SDK のバケット管理や画像処理は対象としません。公式 SDK の代替ではありません。FileSystem インターフェイスを使用すると、シンプルアップロードとマルチパートアップロードの使い分けを意識する必要がありません。FileSystem インターフェイスがユーザーに代わってこれらの処理を考慮しているためです。一方、公式 SDK を直接使用する場合はこれらの問題を考慮する必要があり、使い方がより複雑になります。
JindoFS SDK
[JindoFS SDK](https://github.com/aliyun/aliyun-emapreduce-datasources/blob/main/docs/jindofs_sdk_how_to.md) は使いやすい JindoFS クライアントで、現在は主に E-MapReduce クラスターで使用されており、JindoFS クラスターへのアクセス機能と OSS ファイルを操作する機能を提供します。Hadoop-OSS-SDK と比べて、大幅なパフォーマンス最適化が施されています。現在、JindoFS SDK は一般公開されており、この SDK を使用して OSS へのアクセス機能と優れたパフォーマンスを取得できます。
JindoFS SDK は Hadoop-OSS-SDK と等価であり、Hadoop-OSS-SDK を直接置き換えられます。Hadoop-OSS-SDK と異なる点は、JindoFS SDK が Java SDK をラップするのではなく、OSS の RESTful API を直接ベースに実装されていることです。JindoFS SDK も Hadoop FileSystem インターフェイスを提供しており、ファイル管理、ファイルのアップロードとダウンロード操作において一連のパフォーマンス最適化が施されています。
JindoFS SDK の互換性はどの程度ですか?
Hadoop のオープンソース版 (本稿執筆時点での最新安定版は Hadoop 3.2.1) は、OSS SDK 3.4.1 をベースとしており、create、open、list、mkdir などの FileSystem インターフェイスを実装することで、Hive や Spark などのプログラムから OSS にアクセスできるようにしています。Hadoop-OSS-SDK で実装されているインターフェイスは、JindoFS SDK でもすべてサポートされています。使い方はまったく同じで、一部の設定項目のキー名が異なるだけです。JindoFS SDK の jar パッケージを Hadoop の lib ディレクトリに配置し、OSS の AccessKey を設定するだけでよいため、非常に便利です。JindoFS SDK は Hadoop 3 との互換性が強化されており、OSS のランダム読み取り (pread インターフェイス) のサポートや、ByteBuffer 読み取りのサポートなどが追加されています。
JindoFS SDK を使用するとパフォーマンスはどの程度向上しますか?
[JindoFS SDK と Hadoop-OSS-SDK のパフォーマンス比較テスト](https://github.com/aliyun/aliyun-emapreduce-datasources/blob/main/docs/jindofs_sdk_vs_hadoop_sdk.md) を実施しました。このテストでは 3 種類のデータセットを用意し、異なる観点から検証を行いました。読み取り、書き込み、移動、削除などの操作を網括し、大きなファイルと小さなファイルの両方でパフォーマンスをテストしています。このテストは、通常のユーザージョブでカバーされるほとんどのシナリオを含んでいます。。[Screenshot 2020-07-09 pm 2.19.35.png](https://ucc.alicdn.com/pic/developer-ecology/a3fd5f28965c440990a7609a33cf7a7b.png) このテスト結果から、JindoFS SDK は mv および delete 操作において、Hadoop-OSS-SDK よりも大幅に優れたパフォーマンスを示しています。
SDK のインストール
1. jar パッケージのインストール
[GitHub リポジトリ](https://github.com/aliyun/aliyun-emapreduce-datasources/blob/main/docs/jindofs_sdk_how_to.md) から最新の jar パッケージ jindofs-sdk-x.x.x.jar をダウンロードし、SDK パッケージを Hadoop の classpath にインストールします。
cp ./jindofs-sdk-*.jar hadoop-2.8.5/share/hadoop/hdfs/lib/jindofs-sdk.jar
注意:現在、SDK は Linux および MacOS オペレーティングシステムのみをサポートしています。SDK の基盤部分でネイティブコードを使用しているためです。
2. クライアント設定ファイルの作成
/etc/profile ファイルに以下の環境変数を追加します export B2SDK_CONF_DIR=/etc/jindofs-sdk-conf 以下の内容を含む /etc/jindofs-sdk-conf/bigboot.cfg ファイルを作成します ``` [bigboot] logger.dir = /tmp/bigboot-log [bigboot-client] client.oss.retry=5 client.oss.upload.threads=4 client.oss.upload.queue.size=5 client.oss.upload.max.parallelism=16 client.oss.timeout.millisecond=30000 client.oss.connection.timeout.millisecond=3000 ``` hadoop-2.8.5/etc/hadoop/core-site.xml に OSS の AccessKey とエンドポイントを事前設定することで、利用時に毎回 AccessKey を入力する手間を省くことができます。 ``` fs.AbstractFileSystem.oss.implcom.aliyun.emr.fs.oss.OSSfs.oss.implcom.aliyun.emr.fs.oss.JindoOssFileSystemfs.jfs.cache.oss-accessKeyIdxxxfs.jfs.cache.oss-accessKeySecretxxxfs .jfs.cache.oss-endpointoss-cn-xxx.aliyuncs.com ``` これでインストールは完了です。とても便利です。
さらに、[パスワードレス機能](https://help.aliyun.com/document_detail/156418.html) を設定して、AccessKey を平文で保存しないようにし、セキュリティを向上させることを推奨します。
ユースケース:Hadoop シェルで OSS にアクセスする
Hadoop シェルを使用して OSS にアクセスしてみましょう。以下のコマンドで一時的な OSS バケットにアクセスできます。
``` hadoop fs -ls oss://:@./ ```
この方法は本番環境には推奨されません。AccessKey がパスの一部としてログに記録されてしまうためです。
事前に core-site.xml で AccessKey を設定している場合、またはパスワードレス機能を設定している場合は、以下のコマンドで直接アクセスできます。 ``` hadoop fs -ls oss:/// ```
ユースケース:Hive テーブルを OSS に保存する
デフォルトでは Hive は HDFS を基盤ストレージとして使用しています。Hive の基盤ストレージを OSS に置き換えるには、hive-site.xml で以下の設定を変更します。 ``` hive.metastore.warehouse.diross://bucket/user/hive/ warehouse ``` これで、Hive 経由で作成したテーブルは直接 OSS に保存されます。以降、Hive 経由のクエリは OSS 上のデータをクエリします。
CREATE TABLE pokes_jfs(foo INT, bar STRING);
Hive ウェアハウス全体を OSS に配置したくない場合は、単一テーブルの保存先を OSS 上に指定することもできます。
CREATE TABLE pokes_jfs (foo INT, bar STRING) LOCATION 'oss://bucket/warehouse/pokes_jfs.db';
ユースケース:Spark で OSS テーブルをクエリする
Spark は独自の Hadoop クライアントパッケージを使用しているため、JindoFS SDK を Spark のディレクトリにもコピーする必要があります。
cp ./jindofs-sdk-*.jar spark-2.4.6/jars/
その後、spark-sql を実行して Hive の OSS テーブルにクエリを実行します。
bin/spark-sql
select * from pokes_jfs;
従来のビッグデータ分野では、基盤ストレージとして HDFS を使用し、その上で MapReduce や Hadoop 上の SQL ジョブを実行するのが一般的でした。クラウド上でのビッグデータ技術の発展に伴い、従来の HDFS のボトルネックがますます顕在化しているため、多くのユーザーが HDFS のデータを Alibaba Cloud OSS などのオブジェクトストレージシステムに移行し、OSS 上で MapReduce や SQL ジョブを直接実行するようになっています。同時に、機械学習のデータセットを OSS に配置し、関連する機械学習処理を行うことも一般的になっています。ユーザーは OSS をデータウェアハウスやデータレイクの基盤として活用するようになり、OSS の処理速度がジョブ実行効率を左右する重要な要素となっています。
OSS SDK
[公式 SDK](https://help.aliyun.com/document_detail/52834.html) は、Alibaba Cloud OSS チームが開発した公式 SDK で、バケット管理、ファイル管理、ファイルのアップロードとダウンロード、バージョン管理、認可されたアクセス、画像処理などの API インターフェイスを提供します。公式 SDK には Java、Python、C++ などのバージョンがあり、いずれも RESTful API をラップしたものです。公式 SDK は OSS リソースを包括的に管理するためのインターフェイスを提供します。これらのインターフェイスは非常に包括的で、比較的ローレベルです。
Hadoop-OSS-SDK
[Hadoop-OSS-SDK](https://hadoop.apache.org/docs/stable/hadoop-aliyun/tools/hadoop-aliyun/index.html) は、公式 SDK (Java 版) をベースにパッケージ化されており、Hadoop の FileSystem インターフェイスの抽象化レイヤーを提供します。Hive や Spark などのビッグデータエコシステムは公式 SDK を直接使用できませんが、FileSystem インターフェイスを介して OSS ファイルを直接読み書きできます。Hadoop-OSS-SDK は、Hadoop ビッグデータエコシステムと OSS を接続する接着剤の役割を果たします。FileSystem インターフェイスは、主に OSS のファイル管理、ファイルのアップロードとダウンロード機能に焦点を当てており、公式 SDK のバケット管理や画像処理は対象としません。公式 SDK の代替ではありません。FileSystem インターフェイスを使用すると、シンプルアップロードとマルチパートアップロードの使い分けを意識する必要がありません。FileSystem インターフェイスがユーザーに代わってこれらの処理を考慮しているためです。一方、公式 SDK を直接使用する場合はこれらの問題を考慮する必要があり、使い方がより複雑になります。
JindoFS SDK
[JindoFS SDK](https://github.com/aliyun/aliyun-emapreduce-datasources/blob/main/docs/jindofs_sdk_how_to.md) は使いやすい JindoFS クライアントで、現在は主に E-MapReduce クラスターで使用されており、JindoFS クラスターへのアクセス機能と OSS ファイルを操作する機能を提供します。Hadoop-OSS-SDK と比べて、大幅なパフォーマンス最適化が施されています。現在、JindoFS SDK は一般公開されており、この SDK を使用して OSS へのアクセス機能と優れたパフォーマンスを取得できます。
JindoFS SDK は Hadoop-OSS-SDK と等価であり、Hadoop-OSS-SDK を直接置き換えられます。Hadoop-OSS-SDK と異なる点は、JindoFS SDK が Java SDK をラップするのではなく、OSS の RESTful API を直接ベースに実装されていることです。JindoFS SDK も Hadoop FileSystem インターフェイスを提供しており、ファイル管理、ファイルのアップロードとダウンロード操作において一連のパフォーマンス最適化が施されています。
JindoFS SDK の互換性はどの程度ですか?
Hadoop のオープンソース版 (本稿執筆時点での最新安定版は Hadoop 3.2.1) は、OSS SDK 3.4.1 をベースとしており、create、open、list、mkdir などの FileSystem インターフェイスを実装することで、Hive や Spark などのプログラムから OSS にアクセスできるようにしています。Hadoop-OSS-SDK で実装されているインターフェイスは、JindoFS SDK でもすべてサポートされています。使い方はまったく同じで、一部の設定項目のキー名が異なるだけです。JindoFS SDK の jar パッケージを Hadoop の lib ディレクトリに配置し、OSS の AccessKey を設定するだけでよいため、非常に便利です。JindoFS SDK は Hadoop 3 との互換性が強化されており、OSS のランダム読み取り (pread インターフェイス) のサポートや、ByteBuffer 読み取りのサポートなどが追加されています。
JindoFS SDK を使用するとパフォーマンスはどの程度向上しますか?
[JindoFS SDK と Hadoop-OSS-SDK のパフォーマンス比較テスト](https://github.com/aliyun/aliyun-emapreduce-datasources/blob/main/docs/jindofs_sdk_vs_hadoop_sdk.md) を実施しました。このテストでは 3 種類のデータセットを用意し、異なる観点から検証を行いました。読み取り、書き込み、移動、削除などの操作を網括し、大きなファイルと小さなファイルの両方でパフォーマンスをテストしています。このテストは、通常のユーザージョブでカバーされるほとんどのシナリオを含んでいます。。[Screenshot 2020-07-09 pm 2.19.35.png](https://ucc.alicdn.com/pic/developer-ecology/a3fd5f28965c440990a7609a33cf7a7b.png) このテスト結果から、JindoFS SDK は mv および delete 操作において、Hadoop-OSS-SDK よりも大幅に優れたパフォーマンスを示しています。
SDK のインストール
1. jar パッケージのインストール
[GitHub リポジトリ](https://github.com/aliyun/aliyun-emapreduce-datasources/blob/main/docs/jindofs_sdk_how_to.md) から最新の jar パッケージ jindofs-sdk-x.x.x.jar をダウンロードし、SDK パッケージを Hadoop の classpath にインストールします。
cp ./jindofs-sdk-*.jar hadoop-2.8.5/share/hadoop/hdfs/lib/jindofs-sdk.jar
注意:現在、SDK は Linux および MacOS オペレーティングシステムのみをサポートしています。SDK の基盤部分でネイティブコードを使用しているためです。
2. クライアント設定ファイルの作成
/etc/profile ファイルに以下の環境変数を追加します export B2SDK_CONF_DIR=/etc/jindofs-sdk-conf 以下の内容を含む /etc/jindofs-sdk-conf/bigboot.cfg ファイルを作成します ``` [bigboot] logger.dir = /tmp/bigboot-log [bigboot-client] client.oss.retry=5 client.oss.upload.threads=4 client.oss.upload.queue.size=5 client.oss.upload.max.parallelism=16 client.oss.timeout.millisecond=30000 client.oss.connection.timeout.millisecond=3000 ``` hadoop-2.8.5/etc/hadoop/core-site.xml に OSS の AccessKey とエンドポイントを事前設定することで、利用時に毎回 AccessKey を入力する手間を省くことができます。 ``` fs.AbstractFileSystem.oss.implcom.aliyun.emr.fs.oss.OSSfs.oss.implcom.aliyun.emr.fs.oss.JindoOssFileSystemfs.jfs.cache.oss-accessKeyIdxxxfs.jfs.cache.oss-accessKeySecretxxxfs .jfs.cache.oss-endpointoss-cn-xxx.aliyuncs.com ``` これでインストールは完了です。とても便利です。
さらに、[パスワードレス機能](https://help.aliyun.com/document_detail/156418.html) を設定して、AccessKey を平文で保存しないようにし、セキュリティを向上させることを推奨します。
ユースケース:Hadoop シェルで OSS にアクセスする
Hadoop シェルを使用して OSS にアクセスしてみましょう。以下のコマンドで一時的な OSS バケットにアクセスできます。
``` hadoop fs -ls oss://:@./ ```
この方法は本番環境には推奨されません。AccessKey がパスの一部としてログに記録されてしまうためです。
事前に core-site.xml で AccessKey を設定している場合、またはパスワードレス機能を設定している場合は、以下のコマンドで直接アクセスできます。 ``` hadoop fs -ls oss:/// ```
ユースケース:Hive テーブルを OSS に保存する
デフォルトでは Hive は HDFS を基盤ストレージとして使用しています。Hive の基盤ストレージを OSS に置き換えるには、hive-site.xml で以下の設定を変更します。 ``` hive.metastore.warehouse.diross://bucket/user/hive/ warehouse ``` これで、Hive 経由で作成したテーブルは直接 OSS に保存されます。以降、Hive 経由のクエリは OSS 上のデータをクエリします。
CREATE TABLE pokes_jfs(foo INT, bar STRING);
Hive ウェアハウス全体を OSS に配置したくない場合は、単一テーブルの保存先を OSS 上に指定することもできます。
CREATE TABLE pokes_jfs (foo INT, bar STRING) LOCATION 'oss://bucket/warehouse/pokes_jfs.db';
ユースケース:Spark で OSS テーブルをクエリする
Spark は独自の Hadoop クライアントパッケージを使用しているため、JindoFS SDK を Spark のディレクトリにもコピーする必要があります。
cp ./jindofs-sdk-*.jar spark-2.4.6/jars/
その後、spark-sql を実行して Hive の OSS テーブルにクエリを実行します。
bin/spark-sql
select * from pokes_jfs;
Related Articles
-
A detailed explanation of Hadoop core architecture HDFS
Knowledge Base Team
-
What Does IOT Mean
Knowledge Base Team
-
6 Optional Technologies for Data Storage
Knowledge Base Team
-
What Is Blockchain Technology
Knowledge Base Team
Explore More Special Offers
-
Short Message Service(SMS) & Mail Service
50,000 email package starts as low as USD 1.99, 120 short messages start at only USD 1.00
