OSS-HDFSは、クラウドネイティブのデータレイクストレージサービスです。 OSS-HDFSは、メタデータの集中管理機能を提供し、Hadoop分散ファイルシステム (HDFS) APIと完全に互換性があります。 OSS-HDFSはまた携帯用オペレーティングシステムインターフェイス (POSIX) を支えます。 OSS-HDFSを使用して、ビッグデータおよびAI分野のデータレイクベースのコンピューティングシナリオでデータを管理できます。 このトピックでは、Hadoopを使用してJindoSDKを使用してOSS-HDFSにアクセスする方法について説明します。
前提条件
バケットのOSS-HDFSが有効になり、OSS-HDFSにアクセスする権限が付与されます。 詳細については、「OSS-HDFSの有効化」をご参照ください。
背景情報
既存のHadoopおよびSparkアプリケーションを変更する必要なく、OSS-HDFSを使用できます。 HDFSでデータを管理する場合と同様の方法で、OSS-HDFSを簡単に設定してデータにアクセスし、管理することができます。 また、無制限のストレージ容量、柔軟なスケーラビリティ、高いセキュリティ、信頼性、可用性など、OSSの特性を活用することもできます。
クラウドネイティブデータレイクはOSS-HDFSに基づいています。 OSS-HDFSを使用して、エクサバイト単位のデータを分析し、数億のオブジェクトを管理し、テラバイト単位のスループットを取得できます。 OSS-HDFSは、ビッグデータストレージの要件を満たすために、フラットな名前空間機能と階層的な名前空間機能を提供します。 階層的な名前空間機能を使用して、階層的なディレクトリ構造でオブジェクトを管理できます。 OSS-HDFSは、ストレージ構造をフラット名前空間と階層名前空間の間で自動的に変換して、オブジェクトメタデータを一元管理できるようにします。 Hadoopユーザーは、オブジェクトの形式をコピーしたり変換したりすることなく、OSS-HDFSでオブジェクトにアクセスできます。 これにより、ジョブのパフォーマンスが向上し、メンテナンスコストが削減されます。
OSS-HDFSのアプリケーションシナリオ、特性、および機能の詳細については、「OSS-HDFS? 」をご参照ください。
ステップ1: VPCを作成し、VPCにECSインスタンスを作成する
内部エンドポイントを使用してOSS-HDFSへのアクセスを許可する仮想プライベートクラウド (VPC) を作成します。
VPCコンソールにログインします。
VPCページで、VPCの作成をクリックします。
VPCを作成するときは、VPCがOSS-HDFSを有効にするバケットと同じリージョンにあることを確認してください。 VPCの作成方法の詳細については、「VPCとvSwitchの作成」をご参照ください。
VPCにECS (Elastic Compute Service) インスタンスを作成します。
VPCのIDをクリックします。 表示されるページで、[リソース管理] タブをクリックします。
[Basic Cloud Resources Included] セクションで、Elastic Compute Serviceの右側にあるアイコンをクリックします。
インスタンスページで、インスタンスの作成をクリックします。
ECSインスタンスを作成するときは、インスタンスがVPCと同じリージョンにあることを確認してください。 ECSインスタンスの作成方法の詳細については、「インスタンスの作成」をご参照ください。
手順2: Hadoopランタイム環境の作成
Java環境をインストールします。
作成したECSインスタンスの右側で、接続をクリックします。
ECSインスタンスへの接続方法の詳細については、「接続方法の概要」をご参照ください。
既存のJava開発キット (JDK) のバージョンを確認します。
java -version
オプション。 JDKのバージョンが1.8.0より前の場合は、JDKをアンインストールします。 JDKのバージョンが1.8.0以降の場合は、この手順をスキップします。
rpm -qa | grep java | xargs rpm -e --nodeps
JDKパッケージをインストールします。
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キーを生成し、信頼できるリストにキーを追加します。
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インストールパッケージの取得方法の詳細については、「Hadoop」をご参照ください。
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
オプション。 ディレクトリが存在しない場合は、次のコマンドを実行して環境変数を有効にします。
cd $HADOOP_HOME/etc/hadoop
core-site.xmlおよびhdfs-site.xml設定ファイルを更新します。
core-site.xml設定ファイルを更新し、属性を追加します。
<configuration> <!-- Specify the address of the NameNode in HDFS. --> <property> <name>fs.defaultFS</name> <!-- Replace the value with the hostname or localhost. --> <value>hdfs://localhost:9000</value> </property> <!-- Change the temporary directory of Hadoop to a custom directory. --> <property> <name>hadoop.tmp.dir</name> <!-- Run the following command to grant the admin user the permissions to manage the directory: 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> <!-- Specify the number of duplicates for HDFS. --> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
ファイル構造をフォーマットします。
hdfs namenode -format
HDFSを起動します。
HDFSを起動するには、NameNode、DataNode、およびセカンダリNameNodeを起動する必要があります。
HDFSを起動します。
cd /usr/local/hadoop/ sbin/start-dfs.sh
進行状況を照会します。
jps
次の出力が返されます。
上記の手順を実行すると、デーモンプロセスが作成されます。 ブラウザを使用して http://{ip}:9870 にアクセスし、インターフェイスとHDFSに関する詳細情報を表示できます。
Hadoopがインストールされているかどうかをテストします。
hadoop versionコマンドを実行します。 Hadoopがインストールされている場合、バージョン情報が返されます。
ステップ3: オンプレミスHDFSをOSS-HDFSに切り替える
JindoSDK JARパッケージをダウンロードします。
宛先ディレクトリに切り替えます。
cd /usr/lib/
JindoSDK JARパッケージの最新バージョンをダウンロードします。 詳細については、『GitHub』をご参照ください。
JindoSDK JARパッケージを解凍します。
tar zxvf jindosdk-x.x.x-linux.tar.gz
説明x.x.xは、JindoSDK JARパッケージのバージョン番号を示します。
環境変数を設定します。
設定ファイルを変更します。
vim /etc/profile
環境変数を設定します。
export JINDOSDK_HOME=/usr/lib/jindosdk-x.x.x-linux
HADOOP_CLASSPATHを設定します。
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:${JINDOSDK_HOME}/lib/*
次のコマンドを実行して、環境変数を有効にします。
. /etc/profile
JindoSDK DLS実装クラスを設定し、バケットへのアクセスに使用するAccessKeyペアを指定します。
Hadoopの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>
事前に、OSS-HDFSが有効になっているバケットのAccessKey IDとAccessKey secretをHadoopのcore-site.xmlファイルで設定します。
<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を使用してOSSのバケットにアクセスする場合は、OSS-HDFSのエンドポイントを設定する必要があります。 OSS-HDFSへのアクセスに使用されるパスを
oss://<Bucket>.<Endpoint>/<Object>
形式で設定することを推奨します。 例:oss:// examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampleobject.txt
アクセスパスを設定した後、JindoSDKはアクセスパスで指定されたエンドポイントに基づいて対応するOSS-HDFS操作を呼び出します。他の方法を使用してOSS-HDFSのエンドポイントを設定することもできます。 詳細については、「付録1: 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という名前のルートディレクトリを、examplebucketという名前のバケット内の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/
オブジェクトまたはディレクトリの移動
次のコマンドを実行して、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 oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/destfolder/