OSS-HDFS は、データレイク向けのクラウドネイティブストレージプロダクトです。統一されたメタデータ管理と Hadoop 分散ファイルシステム (HDFS) API との完全な互換性を備え、POSIX (Portable Operating System Interface) のユースケースを強力にサポートします。これにより、OSS-HDFS はビッグデータや AI コンピューティングのシナリオに適しています。このトピックでは、JindoSDK を使用して Hadoop から OSS-HDFS にアクセスする方法について説明します。
前提条件
バケットに対して OSS-HDFS を有効にし、それにアクセスするために必要な権限を持っていること。詳細については、「OSS-HDFS の有効化」をご参照ください。
OSS-HDFS とは
既存の Hadoop および Spark アプリケーションを変更することなく、OSS-HDFS を使用できます。HDFS でデータを管理するのと同じように、OSS-HDFS を簡単に設定してデータにアクセスし、管理できます。また、無制限のストレージ容量、弾力的なスケーラビリティ、高いセキュリティ、信頼性、可用性といった Object Storage Service (OSS) の特徴も活用できます。
クラウドネイティブデータレイクは OSS-HDFS をベースにしています。OSS-HDFS を使用して、エクサバイト規模のデータや数億のオブジェクトを管理し、テラバイト級のスループットを実現できます。OSS-HDFS は、ビッグデータストレージの要件を満たすために、フラットな名前空間機能と階層的な名前空間機能を提供します。階層的な名前空間機能を使用して、階層的なディレクトリ構造でオブジェクトを管理できます。OSS-HDFS は、フラットな名前空間と階層的な名前空間の間でストレージ構造を自動的に変換し、オブジェクトのメタデータを一元的に管理するのに役立ちます。従来の HDFS における NameNode のアクティブ/スタンバイ冗長アーキテクチャと比較して、OSS-HDFS はメタデータ管理のためにマルチノードのアクティブ/アクティブ冗長メカニズムを実装しており、信頼性とスケーラビリティを大幅に向上させています。Hadoop ユーザーは、オブジェクトのフォーマットをコピーしたり変換したりすることなく、OSS-HDFS 内のオブジェクトにアクセスできます。これにより、ジョブのパフォーマンスが向上し、メンテナンスコストが削減されます。
OSS-HDFS のユースケース、特徴、機能の詳細については、「OSS-HDFS とは」をご参照ください。
ステップ 1: VPC と ECS インスタンスの作成
-
OSS-HDFS への内部アクセスを許可する Virtual Private Cloud (VPC) を作成します。
-
VPC コンソールにログインします。
-
VPC ページで、VPC の作成 をクリックします。
VPC を作成する際は、OSS-HDFS を有効にするバケットと同じリージョンにあることを確認してください。VPC の作成方法の詳細については、「VPC と vSwitch の作成」をご参照ください。
-
-
Elastic Compute Service (ECS) インスタンスを追加します。
-
作成した VPC の ID をクリックし、リソース タブをクリックします。
-
含まれている基本的なクラウドリソース セクションで、ECS の右側にある
アイコンをクリックします。 -
[インスタンス] ページで、ECS インスタンスを作成します。
ECS インスタンスを作成する際は、VPC と同じリージョンにあることを確認してください。詳細な手順については、「ウィザードを使用したインスタンスの作成」をご参照ください。
-
ステップ 2: Hadoop 環境のセットアップ
-
Java 環境をインストールします。
-
作成した ECS インスタンスを見つけて 接続 をクリックします。
ECS インスタンスへのリモート接続を確立する方法の詳細については、「接続方法」をご参照ください。
-
JDK のバージョンを確認します。
java -version -
任意: ご利用の JDK バージョンが 1.8.0 より前の場合は、アンインストールします。それ以外の場合は、このステップをスキップしてください。
rpm -qa | grep java | xargs rpm -e --nodeps -
Java をインストールします。
sudo yum install java-1.8.0-openjdk* -y -
次のコマンドを実行して設定ファイルを開きます。
vim /etc/profile -
環境変数を追加します。
JDK パスが存在しないというメッセージが表示された場合は、`/usr/lib/jvm/` ディレクトリに移動して `java-1.8.0-openjdk` を見つけてください。
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar export PATH=$PATH:$JAVA_HOME/bin -
環境変数の設定を適用します。
source /etc/profile
-
-
SSH サービスを有効にします。
-
SSH サービスをインストールします。
sudo yum install -y openssh-clients openssh-server -
SSH サービスを有効にします。
systemctl enable sshd && systemctl start sshd -
SSH キーを生成し、公開鍵を `authorized_keys` のリストに追加します。
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 0600 ~/.ssh/authorized_keys
-
-
Hadoop をインストールします。
-
Hadoop インストールパッケージをダウンロードします。
この例では Hadoop 3.4.0 を使用します。異なるバージョンを使用する場合は、パッケージ名を適宜置き換えてください。Hadoop インストールパッケージを見つけるには、「Apache Hadoop Releases」をご参照ください。
wget https://downloads.apache.org/hadoop/common/hadoop-3.4.0/hadoop-3.4.0.tar.gz -
インストールパッケージを展開します。
tar xzf hadoop-3.4.0.tar.gz -
パッケージを標準のインストールディレクトリに移動します。
mv hadoop-3.4.0 /usr/local/hadoop -
環境変数を設定します。
-
Hadoop 環境変数を設定します。
vim /etc/profile export HADOOP_HOME=/usr/local/hadoop export PATH=$HADOOP_HOME/bin:$PATH source /etc/profile -
Hadoop 設定ファイル内の `HADOOP_HOME` を更新します。
cd $HADOOP_HOME vim etc/hadoop/hadoop-env.sh -
`${JAVA_HOME}` を実際のパスに置き換えます。
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
-
-
任意: 「directory does not exist」エラーが表示された場合は、次のコマンドを実行して Hadoop 設定ディレクトリに移動します。
cd $HADOOP_HOME/etc/hadoop -
`core-site.xml` および `hdfs-site.xml` 設定ファイルを更新します。
-
次のプロパティを追加して `core-site.xml` ファイルを更新します。
<configuration> <!-- HDFS の NameNode のアドレスを指定します。 --> <property> <name>fs.defaultFS</name> <!-- ホスト名または localhost に置き換えます。 --> <value>hdfs://localhost:9000</value> </property> <!-- Hadoop の一時ディレクトリをカスタムディレクトリに変更します。 --> <property> <name>hadoop.tmp.dir</name> <!-- admin ユーザーにディレクトリの管理権限を付与します: sudo chown -R admin:admin /opt/module/hadoop-3.4.0 --> <value>/opt/module/hadoop-3.4.0/data/tmp</value> </property> </configuration> -
次のプロパティを追加して `hdfs-site.xml` ファイルを更新します。
<configuration> <!-- HDFS レプリカの数を指定します。 --> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
-
-
NameNode をフォーマットします。
hdfs namenode -format -
HDFS を起動します。
HDFS を起動するには、NameNode、DataNode、および Secondary NameNode デーモンを起動する必要があります。
-
HDFS を起動します。
cd /usr/local/hadoop/ sbin/start-dfs.sh -
実行中のプロセスを確認します。
jps出力は次のようになります。

これらのステップを完了すると、HDFS デーモンが実行されます。HDFS は、`http://{ip}:9870` でアクセスできる Web UI を提供しており、クラスターの詳細を表示できます。
-
-
-
Hadoop のインストールをテストします。
`hadoop version` コマンドを実行します。コマンドがバージョン情報を返した場合、Hadoop は正常にインストールされています。
ステップ 3: OSS-HDFS 用の Hadoop の設定
-
JindoSDK JAR パッケージをダウンロードします。
-
ターゲットディレクトリに移動します。
cd /usr/lib/ -
最新の JindoSDK JAR パッケージをダウンロードします。ダウンロードリンクについては、「JindoData GitHub」をご参照ください。
-
JindoSDK JAR パッケージを展開します。
tar zxvf jindosdk-x.x.x-linux.tar.gz説明x.x.x は JindoSDK JAR パッケージのバージョン番号を示します。
-
-
環境変数を設定します。
-
設定ファイルを編集します。
vim /etc/profile -
`JINDOSDK_HOME` 環境変数を設定します。
export JINDOSDK_HOME=/usr/lib/jindosdk-x.x.x-linux -
`HADOOP_CLASSPATH` を設定します。
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:${JINDOSDK_HOME}/lib/* -
次のコマンドを実行して設定を適用します。
. /etc/profile
-
-
JindoSDK 実装クラスと AccessKey ペアを設定します。
-
JindoSDK 実装クラスを Hadoop の `core-site.xml` ファイルに追加します。
<configuration> <property> <name>fs.AbstractFileSystem.oss.impl</name> <value>com.aliyun.jindodata.oss.JindoOSS</value> </property> <property> <name>fs.oss.impl</name> <value>com.aliyun.jindodata.oss.JindoOssFileSystem</value> </property> </configuration> -
OSS-HDFS が有効になっているバケットの AccessKey ID と AccessKey Secret を Hadoop の `core-site.xml` ファイルに追加します。
<configuration> <property> <name>fs.oss.accessKeyId</name> <value>YOUR_ACCESS_KEY_ID</value> </property> <property> <name>fs.oss.accessKeySecret</name> <value>YOUR_ACCESS_KEY_SECRET</value> </property> </configuration>
-
-
OSS-HDFS エンドポイントを設定します。
OSS-HDFS にアクセスするには、エンドポイントを設定する必要があります。次のアクセスパス形式を使用することを推奨します:
oss://<Bucket>.<Endpoint>/<Object>(例:oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/exampleobject.txt)。JindoSDK は、アクセスパス内のエンドポイントを使用して、正しい OSS-HDFS API に接続します。アクセスパスでエンドポイントを指定するだけでなく、他の方法で設定することもできます。詳細については、「OSS-HDFS のエンドポイントの設定」をご参照ください。
ステップ 4: OSS-HDFS へのアクセス
-
ディレクトリの作成
`examplebucket` バケットに `dir/` という名前のディレクトリを作成するには、次のコマンドを実行します。
hdfs dfs -mkdir oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/dir/ -
ファイルのアップロード
ローカルファイル `examplefile.txt` を `examplebucket` バケットにアップロードするには、次のコマンドを実行します。
hdfs dfs -put /root/workspace/examplefile.txt oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/examplefile.txt -
ディレクトリ情報の一覧表示
`examplebucket` バケット内の `dir/` ディレクトリの情報を表示するには、次のコマンドを実行します。
hdfs dfs -ls oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/dir/ -
ファイル情報の一覧表示
`examplebucket` バケット内の `examplefile.txt` ファイルの情報を表示するには、次のコマンドを実行します。
hdfs dfs -ls oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/examplefile.txt -
ファイル内容の表示
`examplebucket` バケット内の `examplefile.txt` ファイルの内容を表示するには、次のコマンドを実行します。
重要このコマンドは、ファイルの内容をプレーンテキストとして画面に出力します。ファイルが特定のフォーマットでエンコードされている場合は、HDFS Java API を使用して内容を読み取り、デコードしてください。
hdfs dfs -cat oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/examplefile.txt -
ディレクトリまたはファイルのコピー
`subdir1/` ディレクトリとその内容を `subdir2/` ディレクトリにコピーするには、次のコマンドを実行します。
hdfs dfs -cp oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/subdir1/ oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/subdir2/subdir1/ -
ディレクトリまたはファイルの移動
`srcdir/` ディレクトリとその内容を `destdir/` ディレクトリに移動するには、次のコマンドを実行します。
hdfs dfs -mv oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/srcdir/ oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/destdir/ -
ファイルのダウンロード
`examplebucket` バケットから `exampleobject.txt` ファイルをローカルの `/tmp/` ディレクトリにダウンロードするには、次のコマンドを実行します。
hdfs dfs -get oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/exampleobject.txt /tmp/ -
ディレクトリまたはファイルの削除
`examplebucket` バケットから `destfolder/` ディレクトリとそのすべての内容を削除するには、次のコマンドを実行します。
hdfs dfs -rm -r oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/destfolder/