OSS-HDFS (JindoFS) は、Hadoop分散ファイルシステム (HDFS) API操作と完全に互換性があり、ディレクトリレベルの操作をサポートします。 JindoSDKでは、MapReduce、Hive、Spark、FlinkなどのApache Hadoopベースのコンピューティングおよび分析アプリケーションがHDFSにアクセスできます。 このトピックでは、Elastic Compute Service (ECS) インスタンスにJindoSDKをデプロイし、OSS-HDFSに関連する基本的な操作を実行する方法について説明します。
前提条件
Elastic Compute Service (ECS) インスタンスが作成されました。 詳細は、インスタンスの作成をご参照ください。
Hadoop環境が作成されます。 Hadoopのインストール方法の詳細については、「手順2: Hadoopランタイム環境の作成」をご参照ください。
バケットのOSS-HDFSが有効になり、OSS-HDFSにアクセスする権限が付与されます。 詳細については、「OSS-HDFSの有効化とアクセス許可の付与」をご参照ください。
ビデオチュートリアル
次のビデオでは、非EMRクラスターをOSS-HDFSに接続し、一般的な操作を実行する方法の例を示します。
手順
ECS インスタンスに接続します。 詳細については、「インスタンスへの接続」をご参照ください。
JindoSDK JARパッケージをダウンロードして解凍します。 詳細については、『GitHub』をご参照ください。
JindoSDK JARパッケージを解凍します。
次のサンプルコードは、
jindosdk-x.x.x-linux.tar.gz
という名前のパッケージを解凍する方法の例を示しています。 別のバージョンのJindoSDKを使用する場合は、パッケージ名を対応するJARパッケージの名前に置き換えます。tar zxvf jindosdk-x.x.x-linux.tar.gz
説明x.x.xは、JARパッケージのバージョン番号を示します。
環境変数を設定します。
設定
JINDOSDK_HOME
.次のサンプルコードは、パッケージを /usr/lib/jindosdk-x.x.x-linuxディレクトリに解凍する方法の例を示しています。
エクスポートJINDOSDK_HOME=/usr/lib/jindosdk-x.x.x-linux
設定
HADOOP_CLASSPATH
.export HADOOP_CLASSPATH=$HADOOP_CLASSPATH :${ JINDOSDK_HOME}/lib/*
重要パッケージのインストールディレクトリを指定し、必要なすべてのノードに環境変数を設定します。
バケットの実装クラスを設定し、OSS-HDFSへのアクセスに使用するAccessKeyペアを指定します。
次のコマンドを実行して、Hadoop構成ファイルcore-site.xmlに移動します。
vim /usr/local/hadoop/etc/hadoop/core-site.xml
core-site.xmlファイルでJindoSDK DLS実装クラスを設定します。
<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>
core-site.xmlファイルでOSS-HDFSが有効になっているバケットへのアクセスに使用するAccessKey IDとAccessKey secretを設定します。
<configuration> <property> <name>fs.oss.accessKeyId</name> <value>xxx</value> </property> <property> <name>fs.oss.accessKeySecret</name> <value>xxx</value> </property> </configuration>
OSS-HDFSのエンドポイントを設定します。
OSS-HDFSを使用してObject Storage Service (OSS) のバケットにアクセスする場合は、エンドポイントを設定する必要があります。
oss://<Bucket>.<Endpoint>/<Object>
の形式でアクセスパスを設定することを推奨します。 例:oss:// examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/exampleobject.txt
アクセスパスを設定すると、JindoSDKはアクセスパスで指定されたエンドポイントに基づいて対応するOSS-HDFS操作にアクセスします。他の方法を使用してOSS-HDFSのエンドポイントを設定することもできます。 さまざまなメソッドを使用して設定されたエンドポイントは、特定の優先順位で有効になります。 詳細については、このトピックの「付録1: OSS-HDFSのエンドポイントを設定するために使用されるその他の方法」をご参照ください。
HDFS Shellコマンドを実行して、OSS-HDFSに関連する一般的な操作を実行します。
ローカルファイルをオブジェクトグループにアップロードします。
次のコマンドを実行して、ローカルルートディレクトリにあるexamplefile.txtという名前のローカルファイルをexamplebucketという名前のバケットにアップロードします。
hdfs dfs -put examplefile.txt oss:// examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/
ディレクトリの作成
次のコマンドを実行して、examplebucketという名前のバケットにdir/ という名前のディレクトリを作成します。
hdfs dfs -mkdir oss:// examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/dir/
オブジェクトまたはディレクトリの照会
次のコマンドを実行して、examplebucketという名前のバケット内のオブジェクトまたはディレクトリを照会します。
hdfs dfs -ls oss:// examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/
オブジェクトまたはディレクトリのサイズを照会する
次のコマンドを実行して、examplebucketという名前のバケット内のすべてのオブジェクトまたはディレクトリのサイズを照会します。
hdfs dfs -du oss:// examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/
オブジェクトのコンテンツを照会する
次のコマンドを実行して、examplebucketという名前のバケット内のlocalfile.txtという名前のオブジェクトのコンテンツを照会します。
hdfs dfs -cat oss:// examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/localfile.txt
重要照会されたオブジェクトのコンテンツは、プレーンテキストで画面に表示されます。 コンテンツがエンコードされている場合は、HDFS API for Javaを使用してコンテンツを読み取り、デコードします。
オブジェクトまたはディレクトリのコピー
次のコマンドを実行して、examplebucketという名前のバケット内のsubdir1という名前のルートディレクトリを、同じバケット内のsubdir2という名前のディレクトリにコピーします。 さらに、subdir1ルートディレクトリの位置、subdir1ルートディレクトリ内のオブジェクト、およびsubdir1ルートディレクトリ内のサブディレクトリの構造および内容は変更されない。
hdfs dfs -cp oss:// examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/subdir1 oss:// examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/subdir2/subdir1
オブジェクトまたはディレクトリの移動
次のコマンドを実行して、examplebucketという名前のバケット内のsrcdirという名前のルートディレクトリと、ルートディレクトリ内のオブジェクトおよびサブディレクトリをdestdirという名前の別のルートディレクトリに移動します。
hdfs dfs -mv oss:// examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/srcdir oss:// examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/destdir
オブジェクトのダウンロード
次のコマンドを実行して、exampleobject.txtという名前のオブジェクトを、examplebucketという名前のバケットからコンピュータの /tmpという名前のルートディレクトリにダウンロードします。
hdfs dfs -get oss:// examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/exampleobject.txt /tmp/
オブジェクトまたはディレクトリの削除
次のコマンドを実行して、destfolder/ という名前のディレクトリとそのディレクトリ内のすべてのオブジェクトをexamplebucketという名前のバケットから削除します。
hdfs dfs -rm -r oss:// examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/destfolder/