全部產品
Search
文件中心

:Hadoop使用JindoSDK訪問OSS-HDFS服務

更新時間:Jun 19, 2024

OSS-HDFS服務是一款雲原生資料湖儲存產品。基於統一的中繼資料管理能力,在完全相容HDFS檔案系統介面的同時,提供充分的POSIX能力支援,能更好地滿足巨量資料和AI等領域的資料湖計算情境。本文介紹Hadoop如何通過JindoSDK訪問OSS-HDFS服務。

前提條件

已開通並授權訪問OSS-HDFS服務。具體操作,請參見開通並授權訪問OSS-HDFS服務

什麼是OSS-HDFS服務

通過OSS-HDFS服務,無需對現有的Hadoop、Spark巨量資料分析應用做任何修改。通過簡單的配置即可像在原生HDFS中那樣管理和訪問資料,同時獲得OSS無限容量、彈性擴充、更高的安全性、可靠性和可用性支撐。

作為雲原生資料湖基礎,OSS-HDFS在滿足EB級資料分析、億級檔案管理服務、TB級輸送量的同時,全面融合巨量資料儲存生態,除提供Object Storage Service扁平命名空間之外,還提供了階層命名空間服務。階層命名空間支援將對象組織到一個目錄階層中進行管理,並能通過統一中繼資料管理能力進行內部自動轉換。對Hadoop使用者而言,無需做資料複製或轉換就可以實現像訪問本地HDFS一樣高效的資料訪問,極大提升整體作業效能,降低了維護成本。

關於OSS-HDFS服務的應用情境、服務特性、功能特性等更多資訊,請參見什麼是OSS-HDFS服務

步驟一:建立Virtual Private Cloud並添加Elastic Compute Service執行個體

  1. 建立允許內網訪問OSS-HDFS服務的Virtual Private Cloud。

    1. 登入專用網路管理主控台

    2. 專用網路頁面,單擊建立專用網路

      建立Virtual Private Cloud時,需確保建立的VPC與待開啟OSS-HDFS服務的Bucket位於相同的地區(Region)。建立VPC的具體操作,請參見建立專用網路和交換器

  2. 添加Elastic Compute Service執行個體。

    1. 單擊已建立的VPC ID,然後單擊資源管理頁簽。

    2. 包含基礎雲資源地區,單擊Elastic Compute Service右側的序號

    3. 執行個體頁面,單擊建立執行個體

      建立ECS執行個體時,需確保該ECS執行個體與已建立的Virtual Private Cloud位於相同地區。建立ECS執行個體的具體操作,請參見選購ECS執行個體

步驟二:建立Hadoop運行環境

  1. 安裝Java環境。

    1. 在已建立的ECS樣本右側,單擊遠端連線

      關於遠端連線ECS執行個體的具體操作,請參見串連方式概述

    2. 檢查JDK版本。

      java -version
    3. 可選:如果JDK為1.8.0以下版本,請卸載已有的JDK。如果JDK為1.8.0或以上版本,請跳過此步驟。

      rpm -qa | grep java | xargs rpm -e --nodeps
    4. 安裝Java。

      sudo yum install java-1.8.0-openjdk* -y
    5. 執行以下命令,開啟設定檔。

      vim /etc/profile
    6. 添加環境變數。

      如果提示當前JDK Path不存在,請前往/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安裝包。

      wget https://mirrors.sonic.net/apache/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz
    2. 解壓安裝包。

      tar xzf hadoop-3.3.1.tar.gz
    3. 將安裝包移動到常用位置。

      mv hadoop-3.3.1 /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>
          <!-- 指定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.3.1-->
              <value>/opt/module/hadoop-3.3.1/data/tmp</value>
          </property>
        </configuration>
      • 更新設定檔hdfs-site.xml並添加屬性。

        <configuration>
          <!-- 指定HDFS副本的數量。-->
          <property>
              <name>dfs.replication</name>
              <value>1</value>
          </property>
        </configuration>
    7. 格式檔案結構。

      hdfs namenode -format
    8. 啟動HDFS。

      啟動HDFS分為啟動NameNode、DataNode和Secondary NameNode三個步驟。

      1. 啟動HDFS。

        cd /usr/local/hadoop/
        sbin/start-dfs.sh
      2. 查看進程。

        jps

        返回結果如下:

        hdfs

        完成上述步驟後,即可建立HDFS守護進程。由於HDFS本身具備HTTP面板,您可以通過瀏覽器訪問http://{ip}:9870,查看HDFS面板以及詳細資料。

  4. 測試Hadoop是否安裝成功。

    執行hadoop version命令,如果正常返回版本資訊,表明安裝成功。version

步驟三:切換本地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. 將JindoSDK DLS實作類別配置到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>
    2. 將已開啟HDFS服務的Bucket對應的accessKeyId、accessKeySecret預先配置在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服務的Endpoint。

    訪問OSS-HDFS服務時需要配置Endpoint。推薦訪問路徑格式為oss://<Bucket>.<Endpoint>/<Object>,例如oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampleobject.txt。配置完成後,JindoSDK會根據訪問路徑中的Endpoint訪問對應的OSS-HDFS服務介面。

    除上述提到的在訪問路徑中指定Endpoint的方式以外,您還可以通過其他配置OSS-HDFS服務的Endpoint。更多資訊,請參見配置Endpoint的其他方式

步驟四:訪問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
  • 拷貝目錄或檔案

    將目標儲存空間examplebucket下根目錄subdir1拷貝到目錄subdir2下,且根目錄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/
  • 下載檔案

    將目標儲存空間examplebucket下的exampleobject.txt下載到本地根目錄檔案夾/tmp下,樣本如下:

    hdfs dfs -get oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/exampleobject.txt  /tmp/
  • 刪除目錄或檔案

    刪除目標儲存空間examplebucket下目錄destfolder/及其目錄下的所有檔案,樣本如下:

    hdfs dfs -rm oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/destfolder/