MoveTo命令可以實現表和分區資料的遷移功能。本文為您介紹MoveTo命令的使用方法。
前提條件
- 本地安裝了Java JDK 8。
- 已建立叢集,詳情請參見建立叢集。
背景資訊
MoveTo命令可以在拷貝底層資料結束後,自動更新中繼資料,使表和分區的資料完整地遷移到新路徑;可以通過條件式篩選,一次拷貝大量分區。在資料移轉過程中,還使用了多種措施保護資料的完整性,確保資料安全。
使用限制
EMR-3.36.0及後續版本或EMR-5.2.0及後續版本的叢集,支援使用MoveTo命令。
使用MoveTo命令
重要 叢集上每次僅允許運行一個MoveTo進程。如果叢集上有正在啟動並執行MoveTo進程,啟動新的MoveTo進程時會因為擷取不到配置鎖而退出,並告知正在啟動並執行MoveTo進程。此時,您可以終止掉正在啟動並執行MoveTo進程,啟動新的MoveTo進程,或者等待正在啟動並執行MoveTo進程結束。
- 通過SSH方式登入叢集,詳情請參見登入叢集。
- 執行以下命令,擷取協助資訊。
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路徑。如果您對該路徑無操作許可權時,可以按照如下步驟添加自訂配置,配置該路徑。
- 進入HDFS服務頁面。
- 在頂部功能表列處,根據實際情況選擇地區和資源群組。
- 單擊上方的叢集管理頁簽。
- 在叢集管理頁面,單擊相應叢集所在行的詳情。
- 在左側導覽列,選擇 。
- 修改配置。
- 在HDFS服務的配置頁面,單擊hdfs-site或core-site頁簽。
- 單擊右上方的自訂配置。
- 在新增配置項對話方塊中,添加配置項jindotable.moveto.tablelock.base.dir,參數值為一個已存在的HDFS路徑。重要 自訂配置鎖目錄時,請確保整個叢集的所有節點上不存在正在啟動並執行MoveTo進程,否則可能導致MoveTo執行失敗,甚至導致資料汙染。
- 儲存配置。
- 單擊右上方的儲存。
- 在確認修改對話方塊中,輸入執行原因,單擊確定。