全部產品
Search
文件中心

E-MapReduce:JindoTable MoveTo命令介紹

更新時間:Jul 01, 2024

MoveTo命令可以實現表和分區資料的遷移功能。本文為您介紹MoveTo命令的使用方法。

前提條件

  • 本地安裝了Java JDK 8。
  • 已建立叢集,詳情請參見建立叢集

背景資訊

MoveTo命令可以在拷貝底層資料結束後,自動更新中繼資料,使表和分區的資料完整地遷移到新路徑;可以通過條件式篩選,一次拷貝大量分區。在資料移轉過程中,還使用了多種措施保護資料的完整性,確保資料安全。

使用限制

EMR-3.36.0及後續版本或EMR-5.2.0及後續版本的叢集,支援使用MoveTo命令。

使用MoveTo命令

重要 叢集上每次僅允許運行一個MoveTo進程。如果叢集上有正在啟動並執行MoveTo進程,啟動新的MoveTo進程時會因為擷取不到配置鎖而退出,並告知正在啟動並執行MoveTo進程。此時,您可以終止掉正在啟動並執行MoveTo進程,啟動新的MoveTo進程,或者等待正在啟動並執行MoveTo進程結束。
  1. 通過SSH方式登入叢集,詳情請參見登入叢集
  2. 執行以下命令,擷取協助資訊。
    jindo table -help moveTo
    協助資訊類似如下所示。
    <dbName.tableName>      The table to move.
    <destination path>      The destination base directory which is always at the
                              same level of a 'table location', where the moved
                              partitions or un-partitioned data would located in.
    <condition>/-fullTable  A filter condition to determine which partitions should
                              be moved, supporting common operators (like '>') and
                              built-in UDFs (like to_date) (UDFs not supported
                              yet...), while -fullTable means that all partitions (or
                              a whole un-partitioned table) should be moved. One but
                              only one option must be specified among -c
                              "<condition>" and -fullTable.
    <before days>           Optional, saying that table/partitions should be moved
                              only when they are created (not updated or modified)
                              more than some days before from now.
    <parallelism>           The maximum concurrency when copying partitions, 1 by
                              default.
            <OSS storage policy>: Storage policy for OSS destination, which can be Standard
      (by default), IA, Archive, or ColdArchive. Not applicable for destinations other
      than OSS. NOTE: if you are willing to use ColdArchive storage policy, please
      make sure that Cold Archive has been enabled for your OSS bucket.
    
    -o/-overWrite     Overwriting the final paths where the data would be moved.
                        For partitioned tables this overwrites partitions' locations
                        which are subdirectories of <destination path>; for
                        un-partitioned table this overwrites the <destination path>
                        itself.
    -r/-removeSource  Let the source data be removed when the corresponding
                        table/partition is successfully moved to the new destination.
                        Otherwise (by default), the source data would be left as it
                        was.
    -skipTrash        Applicable only when [-r/-removeSource] is enabled. If
                        present, source data would be immediately deleted from the
                        file system, bypassing the trash.
    -e/-explain       If present, the command would not really move data, but only
                        prints the table/partitions that would be moved for given
                        conditions.
    <log directory>   A directory to locate log files, '/tmp/<current user>/' by
                        default.
    MoveTo命令語句如下所示。
    jindo table -moveTo \
      -t <dbName.tableName> \
      -d <destination path> \
      [-c "<condition>" | -fullTable] \
      [-b/-before <before days>] \
      [-p/-parallel <parallelism>] \
      [-s/-storagePolicy <OSS storage policy>] \
      [-o/-overWrite] \
      [-r/-removeSource] \
      [-skipTrash] \
      [-e/-explain] \
      [-l/-logDir <log directory>]
    參數描述是否必選參數
    -t <dbName.tableName>待移動的表名稱,格式為 資料庫名.表名

    資料庫和表名之前以半形句號(.)分隔。表可以是分區表或非分區表。

    -d <destination path>待移動的目標位置。無論是移動分區還是移動非分區表的整表,該位置都對應 "表" 一級的位置。如果移動的是分區,則分區的完整路徑是該路徑+分區名。例如<destination path>/p1=v1/p2=v2/
    -c "<condition>" | -fullTable兩者必須且只能提供一個,即要麼指定-c "<condition>",要麼指定-fullTable
    • 指定-fullTable時,則為移動整表,既可以是非分區表也可以是分區表。
    • 指定-c "<condition>"時,則提供了一個過濾條件,用來選擇希望移動的分區,支援常見運算子,例如大於符號(>)。

      例如,資料類型為String的分區ds,希望分區名大於 'd',則代碼為-c " ds > 'd' "

    -b/before <before days>僅建立時間距離現在超過一定天數的表或者分區才會被移動。
    -p/-parallel <parallelism>遷移操作的並行度。
    -s/-storagePolicy <OSS storage policy>拷貝到OSS時,在OSS上的儲存策略。儲存策略如下:
    • Standard:Archive Storage。
    • IA:低頻 (Infrequent Access)儲存。
    • Archive:標準儲存。
    • ColdArchive:冷Archive Storage。
      說明 使用前請確保OSS Bucket開通了該功能。
    -o/-overWrite是否強制覆蓋目標寫入路徑。如果是分區表,則只會清空待移動分區的分區路徑,不會清空整個表路徑。
    -r/-removeSource移動完成,中繼資料也同步更新後,是否清理源路徑。如果是分區表,則只會清理成功移動的分區的源路徑。
    -skipTrash清理源路徑時是否跳過Trash。
    說明 在指定了參數-r/-removeSource時適用。
    -e/-explain如果出現該選項,則為解釋(explain )模式,只會顯示待移動的分區列表,而不會真正移動資料。
    -l/-logDir <log directory>指定Log檔案目錄。

配置鎖目錄

MoveTo工具實現了進程鎖,需要提供一個HDFS的路徑放置鎖檔案。預設情況下,該路徑為hdfs:///tmp/jindotable-lock/
重要 放置鎖檔案的路徑只能是HDFS路徑。如果您對該路徑無操作許可權時,可以按照如下步驟添加自訂配置,配置該路徑。
  1. 進入HDFS服務頁面。

    1. 在頂部功能表列處,根據實際情況選擇地區和資源群組
    2. 單擊上方的叢集管理頁簽。
    3. 叢集管理頁面,單擊相應叢集所在行的詳情
    4. 在左側導覽列,選擇叢集服務 > HDFS
  2. 修改配置。
    1. 在HDFS服務的配置頁面,單擊hdfs-sitecore-site頁簽。
    2. 單擊右上方的自訂配置
      hdfs-site
    3. 新增配置項對話方塊中,添加配置項jindotable.moveto.tablelock.base.dir,參數值為一個已存在的HDFS路徑。
      重要 自訂配置鎖目錄時,請確保整個叢集的所有節點上不存在正在啟動並執行MoveTo進程,否則可能導致MoveTo執行失敗,甚至導致資料汙染。
  3. 儲存配置。
    1. 單擊右上方的儲存
    2. 確認修改對話方塊中,輸入執行原因,單擊確定