JindoTable SDK模式提供archiveTable和unarchiveTable命令,可以在不依賴Jindo Namespace Service的情況下進行歸檔和解凍等操作。本文為您介紹archiveTable和unarchiveTable命令的使用方法。
前提條件
- 本地安裝了Java JDK 8。
- 已建立叢集,詳情請參見建立叢集。
- 待歸檔的資料必須是表資料(可以是分區表或非分區表),且已經位於阿里雲Object Storage Service。
背景資訊
JindoTable原有archive和unarchive命令可以對OSS上的表或分區進行歸檔或解凍等操作,但archive和unarchive命令依賴SmartData組件Jindo Namespace Service。現在新增的archiveTable和unarchiveTable命令,可以在不依賴Jindo Namespace Service的情況下進行歸檔和解凍等操作。
新增的archiveTable和unarchiveTable命令與原有archive和unarchive命令的主要區別為:
- 可以在未部署SmartData服務的叢集上執行。例如,非EMR的使用者自建叢集。
- 可以通過傳入過濾參數,一次應用於大量分區,多線程執行。如果本地多線程仍不能滿足需求,還可以啟動MapReduce任務在整個叢集上執行。
原有archive和unarchive命令的詳細資料,請參見JindoTable使用說明。
使用限制
EMR-3.36.0及後續版本或EMR-5.2.0及後續版本的叢集,支援新增的archiveTable和unarchiveTable命令。
archiveTable命令
archiveTable命令可以對OSS上的表或分區進行歸檔。
- 通過SSH方式登入叢集,詳情請參見登入叢集。
- 執行以下命令,擷取協助資訊。
jindo table -help archiveTable
返回如下資訊。<dbName.tableName> The table to archive. -a/-i storage policy, -a for Archive and -i for IA (Infrequent Access). <condition>/-fullTable A filter condition to determine which partitions should be archived, supporting common operators (like '>'), while -fullTable means that all partitions (or a whole un-partitioned table) should be archived. One but only one option must be specified among -c "<condition>" and -fullTable. <before days> Optional, saying that table/partitions should be archived only when they are created (not updated or modified) more than some days before from now. <parallelism> The maximum concurrency when archiving partitions, 1 by default. -mr/-mapReduce Archive table/partitions using cluster-level MapReduce job instead of local-level multi-thread. -e/-explain If present, the command would not really archive data, but only prints the table/partitions that would be archived for given conditions. <working directory>: A directory to locate map-reduce temp files. Must not be a local file system directory. 'hdfs:///tmp/<current user>/jindotable-policy/' by default. <log directory> A directory to locate log files, '/tmp/<current user>/' by default.
archiveTable命令語句格式如下所示。-archiveTable -t <dbName.tableName> \ -a/-i \ [-c "<condition>" | -fullTable] \ [-b/-before <before days>] \ [-p/-parallel <parallelism>] \ [-mr/-mapReduce] \ [-e/-explain] \ [-w/-workingDir <working directory>] \ [-l/-logDir <log directory>]
參數 描述 是否必選參數 -t <dbName.tableName> 待歸檔的表名稱,格式為 資料庫名.表名
。資料庫和表名之間以半形句號(.)分隔。表可以是分區表或非分區表。
是 -a/-i 目標儲存方式。支援如下方式: -a
:歸檔(Archive)儲存。-i
:低頻 (Infrequent Access,IA)儲存。
如果使用-i即表示低頻儲存,會跳過已經處于歸檔儲存的檔案。
是 -c "<condition>" | -fullTable -fullTable
和-c "<condition>"
只需提供一個,即要麼指定-c "<condition>"
,要麼指定-fullTable
。- 指定
-fullTable
時,則為移動整表,既可以是非分區表也可以是分區表。 - 指定
-c "<condition>"
時,則提供了一個過濾條件,用來選擇希望移動的分區,支援常見運算子,例如大於符號(>)。例如,資料類型為String的分區ds,希望分區名大於 'd',則代碼為
-c " ds > 'd' "
。
否 -b/before <before days> 只有建立時間距離現在超過一定天數的表或分區才會被歸檔。 否 -p/-parallel <parallelism> 歸檔操作的並行度。 否 -mr/-mapReduce 使用Hadoop MapReduce而非本地多線程來歸檔資料。 否 -e/-explain 如果出現該選項,則為解釋(explain)模式,只會顯示待移動的分區列表,而不會真正移動資料。 否 -w/-workingDir 只在MapReduce作業時使用,為MapReduce作業的工作目錄。必須有讀寫權限,工作目錄可以非空(作業執行過程中會建立臨時檔案,執行完畢會清理臨時檔案)。 否 -l/-logDir <log directory> 指定Log檔案的目錄。 否
unarchiveTable命令
unarchiveTable命令與archiveTable命令格式基本一致,但效果相反。unarchiveTable命令可以對OSS上的表或分區進行解凍。
- 通過SSH方式登入叢集,詳情請參見登入叢集。
- 執行以下命令,擷取協助資訊。
jindo table -help unarchiveTable
返回如下資訊。<dbName.tableName> The table to unarchive. -i unarchive to IA (Infrequent Access). -o restore to make archived data accessible temporarily. <condition>/-fullTable A filter condition to determine which partitions should be unarchived, supporting common operators (like '>'), while -fullTable means that all partitions (or a whole un-partitioned table) should be unarchived. One but only one option must be specified among -c "<condition>" and -fullTable. <before days> Optional, saying that table/partitions should be unarchived only when they are created (not updated or modified) more than some days before from now. <parallelism> The maximum concurrency when unarchiving partitions, 1 by default. -mr/-mapReduce Unarchive table/partitions using cluster-level MapReduce job instead of local-level multi-thread. -e/-explain If present, the command would not really unarchive data, but only prints the table/partitions that would be unarchived for given conditions. <working directory>: A directory to locate map-reduce temp files. Must not be a local file system directory. 'hdfs:///tmp/<current user>/jindotable-policy/' by default. <log directory> A directory to locate log files, '/tmp/<current user>/' by default.
unarchiveTable命令語句格式如下所示。-unarchiveTable -t <dbName.tableName> \ [-i/-o] \ [-c "<condition>" | -fullTable] \ [-b/-before <before days>] \ [-p/-parallel <parallelism>] \ [-mr/-mapReduce] \ [-e/-explain] \ [-w/-workingDir <working directory>] \ [-l/-logDir <log directory>]
unarchiveTable命令與archiveTable命令參數只有一處區別,即沒有必選參數-a/-i,而被選擇性參數-i/-o替代。
選擇性參數-i/-o描述如下:
- 如果不指定-i/-o參數,則轉換儲存格式為標準(Standard)儲存。
- 如果指定-i參數,則轉換儲存格式為低頻(Infrequent Access,IA)儲存,原本為標準儲存的檔案被跳過。
- 如果指定-o參數,則僅做解凍(Restore)操作。原本為標準儲存或低頻儲存的檔案均被跳過。已經處於解凍狀態的檔案也會被跳過,即不會重複解凍。