すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:Hadoopを使用したJindoSDKによるOSS-HDFSへのアクセス

最終更新日:Oct 16, 2024

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インスタンスを作成する

  1. 内部エンドポイントを使用してOSS-HDFSへのアクセスを許可する仮想プライベートクラウド (VPC) を作成します。

    1. VPCコンソールにログインします。

    2. VPCページで、VPCの作成をクリックします。

      VPCを作成するときは、VPCがOSS-HDFSを有効にするバケットと同じリージョンにあることを確認してください。 VPCの作成方法の詳細については、「VPCとvSwitchの作成」をご参照ください。

  2. VPCにECS (Elastic Compute Service) インスタンスを作成します。

    1. VPCのIDをクリックします。 表示されるページで、[リソース管理] タブをクリックします。

    2. [Basic Cloud Resources Included] セクションで、Elastic Compute Serviceの右側にある序号アイコンをクリックします。

    3. インスタンスページで、インスタンスの作成をクリックします。

      ECSインスタンスを作成するときは、インスタンスがVPCと同じリージョンにあることを確認してください。 ECSインスタンスの作成方法の詳細については、「インスタンスの作成」をご参照ください。

手順2: Hadoopランタイム環境の作成

  1. Java環境をインストールします。

    1. 作成したECSインスタンスの右側で、接続をクリックします。

      ECSインスタンスへの接続方法の詳細については、「接続方法の概要」をご参照ください。

    2. 既存のJava開発キット (JDK) のバージョンを確認します。

      java -version
    3. オプションJDKのバージョンが1.8.0より前の場合は、JDKをアンインストールします。 JDKのバージョンが1.8.0以降の場合は、この手順をスキップします。

      rpm -qa | grep java | xargs rpm -e --nodeps
    4. JDKパッケージをインストールします。

      sudo yum install java-1.8.0-openjdk* -y
    5. 次のコマンドを実行して、設定ファイルを開きます。

      vim /etc/profile
    6. 環境変数を追加します。

      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
    7. 次のコマンドを実行して、環境変数を有効にします。

      source /etc/profile
  2. SSHサービスを有効にします。

    1. SSHサービスをインストールします。

      sudo yum install -y openssh-clients openssh-server
    2. SSHサービスを有効にします。

      systemctl enable sshd && systemctl start sshd
    3. SSHキーを生成し、信頼できるリストにキーを追加します。

      ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
      cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
      chmod 0600 ~/.ssh/authorized_keys
  3. Hadoopをインストールします。

    1. Hadoopインストールパッケージをダウンロードします。

      この例では、Hadoop 3.4.0のインストールパッケージがダウンロードされます。 異なるバージョンをダウンロードする場合は、インストールパッケージの実際の名前を指定してください。 Hadoopインストールパッケージの取得方法の詳細については、「Hadoop」をご参照ください。

      wget https://downloads.apache.org/hadoop/common/hadoop-3.4.0/hadoop-3.4.0.tar.gz
    2. パッケージを解凍します。

      tar xzf hadoop-3.4.0.tar.gz
    3. 頻繁にアクセスされるパスにパッケージを移動します。

      mv hadoop-3.4.0 /usr/local/hadoop
    4. 環境変数を設定します。

      1. Hadoopの環境変数を設定します。

        vim /etc/profile
        export HADOOP_HOME=/usr/local/hadoop
        export PATH=$HADOOP_HOME/bin:$PATH
        source /etc/profile
      2. HADOOPの設定ファイルでHadoop_HOMEを更新します。

        cd $HADOOP_HOME
        vim etc/hadoop/hadoop-env.sh
      3. ${JAVA_HOME} を実際のパスに置き換えます。

        export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
    5. オプションディレクトリが存在しない場合は、次のコマンドを実行して環境変数を有効にします。

      cd $HADOOP_HOME/etc/hadoop
    6. 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>
    7. ファイル構造をフォーマットします。

      hdfs namenode -format
    8. HDFSを起動します。

      HDFSを起動するには、NameNode、DataNode、およびセカンダリNameNodeを起動する必要があります。

      1. HDFSを起動します。

        cd /usr/local/hadoop/
        sbin/start-dfs.sh
      2. 進行状況を照会します。

        jps

        次の出力が返されます。

        hdfs

        上記の手順を実行すると、デーモンプロセスが作成されます。 ブラウザを使用して http://{ip}:9870 にアクセスし、インターフェイスとHDFSに関する詳細情報を表示できます。

  4. Hadoopがインストールされているかどうかをテストします。

    hadoop versionコマンドを実行します。 Hadoopがインストールされている場合、バージョン情報が返されます。

ステップ3: オンプレミスHDFSをOSS-HDFSに切り替える

  1. JindoSDK JARパッケージをダウンロードします。

    1. 宛先ディレクトリに切り替えます。

      cd /usr/lib/
    2. JindoSDK JARパッケージの最新バージョンをダウンロードします。 詳細については、『GitHub』をご参照ください。

    3. JindoSDK JARパッケージを解凍します。

      tar zxvf jindosdk-x.x.x-linux.tar.gz
      説明

      x.x.xは、JindoSDK JARパッケージのバージョン番号を示します。

  2. 環境変数を設定します。

    1. 設定ファイルを変更します。

      vim /etc/profile
    2. 環境変数を設定します。

      export JINDOSDK_HOME=/usr/lib/jindosdk-x.x.x-linux
    3. HADOOP_CLASSPATHを設定します。

      export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:${JINDOSDK_HOME}/lib/*
    4. 次のコマンドを実行して、環境変数を有効にします。

      . /etc/profile

  3. JindoSDK DLS実装クラスを設定し、バケットへのアクセスに使用するAccessKeyペアを指定します。

    1. 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>
    2. 事前に、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>
  4. 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/