Hadoop 指令指南

概觀

所有 Hadoop 指令和子專案都遵循相同的基本結構

用法:shellcommand [SHELL_OPTIONS] [COMMAND] [GENERIC_OPTIONS] [COMMAND_OPTIONS]

欄位 說明
shellcommand 正在呼叫的專案指令。例如,Hadoop 常用會使用 hadoop,HDFS 會使用 hdfs,而 YARN 會使用 yarn
SHELL_OPTIONS 在執行 Java 之前,shell 會處理的選項。
COMMAND 要執行的動作。
GENERIC_OPTIONS 多個指令支援的共通選項集。
COMMAND_OPTIONS 此文件說明 Hadoop 共用子專案的各種指令及其選項。HDFS 和 YARN 在其他文件中說明。

Shell 選項

所有 shell 指令都接受一組共通選項。對於某些指令,這些選項會被忽略。例如,在只執行於單一主機的指令上傳遞 ---hostnames 會被忽略。

SHELL_OPTION 說明
--buildpaths 啟用開發人員版本的 jar。
--config confdir 覆寫預設組態目錄。預設為 $HADOOP_HOME/etc/hadoop
--daemon mode 如果指令支援背景執行(例如 hdfs namenode),則以適當模式執行。支援的模式為 start(以背景模式啟動程序)、stop(停止程序)和 status(判斷程序的活動狀態)。status 會傳回 符合 LSB 的結果碼。如果未提供選項,支援背景執行的指令會在前台執行。對於不支援背景執行的指令,此選項會被忽略。
--debug 啟用 shell 層級組態除錯資訊
--help Shell 腳本使用資訊。
--hostnames 當使用 --workers 時,以空白分隔的主機名稱清單覆寫 workers 檔案,用於執行多主機子指令。如果未使用 --workers,此選項會被忽略。
--hosts 當使用 --workers 時,以包含主機名稱清單的另一個檔案覆寫 workers 檔案,用於執行多主機子指令。如果未使用 --workers,此選項會被忽略。
--loglevel loglevel 覆寫記錄層級。有效的記錄層級為 FATAL、ERROR、WARN、INFO、DEBUG 和 TRACE。預設為 INFO。
--workers 如果可能,在 workers 檔案中的所有主機上執行此指令。

一般選項

許多子指令採用一組共通組態選項來變更其行為

GENERIC_OPTION 說明
-archives <逗號分隔的檔案清單> 指定要解壓縮到運算機器上的逗號分隔檔案。僅適用於工作。
-conf <組態檔> 指定應用程式組態檔。
-D <屬性>=<值> 對指定的屬性使用值。
-files <逗號分隔的檔案清單> 指定要複製到 MapReduce 群集的逗號分隔檔案。僅適用於工作。
-fs <file:///> 或 <hdfs://namenode:port> 指定要使用的預設檔案系統 URL。會覆寫組態中的「fs.defaultFS」屬性。
-jt <local> 或 <resourcemanager:port> 指定 ResourceManager。僅適用於工作。
-libjars <以逗號分隔的 jar 清單> 指定要包含在類別路徑中的以逗號分隔的 jar 檔案。僅適用於工作。

Hadoop 常見指令

所有這些指令都是從 hadoop shell 指令執行的。它們已分為 使用者指令管理指令

使用者指令

對 hadoop 群集使用者有用的指令。

archive

建立 hadoop 檔案。可在 Hadoop 檔案指南 中找到更多資訊。

checknative

用法:hadoop checknative [-a] [-h]

COMMAND_OPTION 說明
-a 檢查所有函式庫是否可用。
-h 列印說明

此指令檢查 Hadoop 原生程式碼的可用性。請參閱 原生函式庫 以取得更多資訊。預設情況下,此指令僅檢查 libhadoop 的可用性。

classpath

用法:hadoop classpath [--glob |--jar <路徑> |-h |--help]

COMMAND_OPTION 說明
--glob 展開萬用字元
--jar 路徑 將類別路徑寫入名為 路徑 的 jar 中的清單
-h, --help 列印說明

列印取得 Hadoop jar 和所需函式庫所需的類別路徑。如果未帶引數呼叫,則列印由指令腳本設定的類別路徑,其中類別路徑條目中可能會包含萬用字元。其他選項會在萬用字元展開後列印類別路徑,或將類別路徑寫入 jar 檔案的清單中。後者適用於無法使用萬用字元且展開的類別路徑超過最大支援的命令列長度的環境。

conftest

用法:hadoop conftest [-conffile <路徑>]...

COMMAND_OPTION 說明
-conffile 要驗證的組態檔案或目錄的路徑
-h, --help 列印說明

驗證組態 XML 檔案。如果未指定 -conffile 選項,則會驗證名稱以 .xml 結尾的 ${HADOOP_CONF_DIR} 中的檔案。如果指定,則會驗證該路徑。您可以指定檔案或目錄,如果指定目錄,則會驗證名稱以 .xml 結尾的該目錄中的檔案。您可以多次指定 -conffile 選項。

驗證相當基本:會剖析 XML 並檢查重複和空白的屬性名稱。此指令不支援 XInclude;如果您使用它來擷取組態項目,它會宣告 XML 檔案無效。

credential

用法:hadoop credential <子命令> [選項]

COMMAND_OPTION 說明
建立 別名 [-供應者 供應者路徑] [-嚴格] [-值 憑證值] 提示使用者輸入憑證,並將其儲存為指定的別名。除非指定 -供應者,否則將使用 core-site.xml 檔案中的 hadoop.security.credential.provider.path。如果供應者使用預設密碼,-嚴格 旗標會導致命令失敗。使用 -值 旗標提供憑證值(別名密碼),而不是提示輸入。
刪除 別名 [-供應者 供應者路徑] [-嚴格] [-f] 刪除具有提供別名的憑證。除非指定 -供應者,否則將使用 core-site.xml 檔案中的 hadoop.security.credential.provider.path。如果供應者使用預設密碼,-嚴格 旗標會導致命令失敗。除非指定 -f,否則命令會要求確認
列出 [-供應者 供應者路徑] [-嚴格] 列出所有憑證別名,除非指定 -供應者,否則將使用 core-site.xml 檔案中的 hadoop.security.credential.provider.path。如果供應者使用預設密碼,-嚴格 旗標會導致命令失敗。
檢查 別名 [-供應者 供應者路徑] [-嚴格] 檢查指定別名的密碼。除非指定 -供應者,否則將使用 core-site.xml 檔案中的 hadoop.security.credential.provider.path。如果供應者使用預設密碼,-嚴格 旗標會導致命令失敗。

用於管理憑證供應者中的憑證、密碼和機密。

Hadoop 中的 CredentialProvider API 允許應用程式與其儲存所需密碼/機密的方式分離。為了指出特定供應者類型和位置,使用者必須在 core-site.xml 中提供 hadoop.security.credential.provider.path 設定元件,或在以下每個命令中使用命令列選項 -供應者。此供應者路徑是 URL 的逗號分隔清單,指出應諮詢的供應者清單的類型和位置。例如,下列路徑:user:///,jceks://file/tmp/test.jceks,jceks://hdfs@nn1.example.com/my/path/test.jceks

表示應透過使用者供應者諮詢目前使用者的憑證檔案,位於 /tmp/test.jceks 的本機檔案是 Java 金鑰庫供應者,而位於 HDFS 中的檔案 nn1.example.com/my/path/test.jceks 也是 Java 金鑰庫供應者的儲存。

在使用憑證命令時,通常會將密碼或機密配置到特定憑證儲存提供者。若要明確指出要使用哪個提供者儲存,應使用 -provider 選項。否則,在提供多個提供者的路徑時,將使用第一個非暫態提供者。這可能是您預期的,也可能不是。

提供者通常需要提供密碼或其他機密。如果提供者需要密碼且找不到密碼,它將使用預設密碼,並發出正在使用預設密碼的警告訊息。如果提供 -strict 旗標,警告訊息將變成錯誤訊息,且命令會立即傳回錯誤狀態。

範例:hadoop credential list -provider jceks://file/tmp/test.jceks

distch

用法:hadoop distch [-f urilist_url] [-i] [-log logdir] path:owner:group:permissions

COMMAND_OPTION 說明
-f 要變更的物件清單
-i 忽略失敗
-log 記錄輸出的目錄

一次變更多個檔案的所有權和權限。

distcp

遞迴複製檔案或目錄。可以在 Hadoop DistCp 指南 中找到更多資訊。

dtutil

用法:hadoop dtutil [-keytab keytab_file -principal principal_name ] subcommand [-format (java|protobuf)] [-alias alias ] [-renewer renewer ] filename…

用於在憑證檔案中擷取和管理 Hadoop 委派權杖的公用程式。它旨在取代較簡單的命令 fetchdt。有多個子命令,每個子命令都有自己的旗標和選項。

對於每個寫出檔案的子命令,-format 選項將指定要使用的內部格式。java 是與 fetchdt 相符的舊版格式。預設值為 protobuf

對於每個連線到服務的子命令,會提供便利旗標來指定要使用於驗證的 Kerberos 主體名稱和 keytab 檔案。

子命令 說明
列印
   [-alias alias ]
   filename [ filename2 ...]
列印包含在 filename(和 filename2 …)中的權杖中的欄位。
如果指定 alias,則只列印與 alias 相符的權杖。否則,列印所有權杖。
get URL
   [-service scheme ]
   [-format (java|protobuf)]
   [-alias alias ]
   [-renewer 更新者 ]
   檔名
URL 中的服務取得權杖並將其放入 檔名 中。
URL 是必要的,且必須緊接在 get 之後。
URL 是服務 URL,例如 hdfs://127.0.0.1:9000
別名 會覆寫權杖中的服務欄位。
它適用於具有外部和內部名稱的主機,例如 firewall.com:14000
檔名 應放在最後,且是權杖檔案的名稱。
如果檔案不存在,它將會建立。否則,權杖會新增到現有的檔案中。
-service 旗標只能與以 httphttps 開頭的 URL 搭配使用。
下列為等效的:hdfs://127.0.0.1:9000/https://127.0.0.1:9000 -service hdfs
附加
   [-format (java|protobuf)]
   檔名 檔名2 [ 檔名3 ...]
將前 N 個檔名的內容附加到最後一個檔名。
當多個檔案中存在具有共用服務欄位的權杖時,較早檔案的權杖會被覆寫。
也就是說,最後一個檔案中的權杖始終會被保留。
remove -alias 別名
   [-format (java|protobuf)]
   filename [ filename2 ...]
從指定的每個檔案中移除與 別名 相符的權杖,並使用指定的格式寫出每個檔案。
必須指定 別名
cancel -alias 別名
   [-format (java|protobuf)]
   filename [ filename2 ...]
remove 相同,但權杖也會使用權杖物件中指定的服務取消。
必須指定 別名
renew -alias 別名
   [-format (java|protobuf)]
   filename [ filename2 ...]
對於指定的每個檔案,更新與 別名 相符的權杖,並使用指定的格式寫出每個檔案。
必須指定 別名
import base64
   [-alias alias ]
   檔名
從 base64 權杖匯入權杖。
別名 會覆寫權杖中的服務欄位。

fs

此指令已在 檔案系統 Shell 指南 中說明。當使用 HDFS 時,它是 hdfs dfs 的同義詞。

gridmix

Gridmix 是 Hadoop 群集的基準測試工具。更多資訊可在 Gridmix 指南 中找到。

jar

用法:hadoop jar <jar> [mainClass] args...

執行 jar 檔案。

改用 yarn jar 來啟動 YARN 應用程式。

jnipath

用法:hadoop jnipath

列印計算出的 java.library.path。

kerbname

用法:hadoop kerbname principal

透過 auth_to_local 規則將命名主體轉換為 Hadoop 使用者名稱。

範例:hadoop kerbname user@EXAMPLE.COM

kdiag

用法:hadoop kdiag

診斷 Kerberos 問題

key

用法:hadoop key <subcommand> [options]

COMMAND_OPTION 說明
create keyname [-cipher cipher] [-size size] [-description description] [-attr attribute=value] [-provider provider] [-strict] [-help] -provider 參數指定的提供者中,為 keyname 參數指定的使用者名稱建立新的金鑰。如果提供者使用預設密碼,-strict 旗標會導致指令失敗。您可以使用 -cipher 參數指定加密法。目前的預設加密法為「AES/CTR/NoPadding」。預設金鑰大小為 128。您可以使用 -size 參數指定要求的金鑰長度。可以使用 -attr 參數指定任意屬性=值樣式屬性。-attr 可以指定多次,每次指定一個屬性。
roll keyname [-provider provider] [-strict] [-help] 在使用 -provider 參數指示的提供者中,為指定的金鑰建立新的版本。如果提供者使用預設密碼,-strict 旗標會導致指令失敗。
delete keyname [-provider provider] [-strict] [-f] [-help] -provider 指定的提供者中刪除 keyname 參數指定的金鑰的所有版本。如果提供者使用預設密碼,-strict 旗標會導致指令失敗。除非指定 -f,否則指令會要求使用者確認。
list [-provider provider] [-strict] [-metadata] [-help] 顯示 core-site.xml 中設定或使用 -provider 參數指定的特定提供者中包含的金鑰名稱。如果提供者使用預設密碼,-strict 旗標會導致指令失敗。-metadata 會顯示元資料。
check keyname [-provider provider] [-strict] [-help] 檢查 core-site.xml 中設定或使用 -provider 參數指定的特定提供者中包含的 keyname 的密碼。如果提供者使用預設密碼,-strict 旗標會導致指令失敗。

| -help | 列印此指令的用法 |

透過 KeyProvider 管理金鑰。有關 KeyProvider 的詳細資訊,請參閱 透明加密指南

提供者通常需要提供密碼或其他機密。如果提供者需要密碼且找不到密碼,它將使用預設密碼,並發出正在使用預設密碼的警告訊息。如果提供 -strict 旗標,警告訊息將變成錯誤訊息,且命令會立即傳回錯誤狀態。

注意:某些 KeyProvider(例如 org.apache.hadoop.crypto.key.JavaKeyStoreProvider)不支援大寫的 key 名稱。

注意:某些 KeyProvider 不会直接執行 key 刪除(例如執行軟刪除或延遲實際刪除,以防止錯誤)。在這些情況下,刪除 key 之後,在使用相同名稱建立/刪除 key 時可能會遇到錯誤。請查看底層 KeyProvider 以取得詳細資料。

kms

用法:hadoop kms

執行 KMS(金鑰管理伺服器)。

trace

檢視和修改 Hadoop 追蹤設定。請參閱 追蹤指南

version

用法:hadoop version

列印版本。

CLASSNAME

用法:hadoop CLASSNAME

執行名為 CLASSNAME 的類別。該類別必須是套件的一部分。

envvars

用法:hadoop envvars

顯示已計算的 Hadoop 環境變數。

管理命令

對於 Hadoop 群集管理員有用的命令。

daemonlog

用法

hadoop daemonlog -getlevel <host:port> <classname> [-protocol (http|https)]
hadoop daemonlog -setlevel <host:port> <classname> <level> [-protocol (http|https)]
COMMAND_OPTION 說明
-getlevel 主機:埠號 類別名稱 [-protocol (http|https)] 列印在 主機:埠號 執行的守護程式中,由合格的 類別名稱 識別的記錄的記錄層級。-protocol 旗標指定連線的通訊協定。
-setlevel 主機:埠號 類別名稱 層級 [-protocol (http|https)] 設定在 主機:埠號 執行的守護程式中,由合格的 類別名稱 識別的記錄的記錄層級。-protocol 旗標指定連線的通訊協定。

動態取得/設定守護程式中由合格類別名稱識別的記錄的記錄層級。預設情況下,此命令會傳送 HTTP 要求,但可以使用引數 -protocol https 傳送 HTTPS 要求來覆寫此設定。

範例

$ bin/hadoop daemonlog -setlevel 127.0.0.1:9870 org.apache.hadoop.hdfs.server.namenode.NameNode DEBUG
$ bin/hadoop daemonlog -getlevel 127.0.0.1:9871 org.apache.hadoop.hdfs.server.namenode.NameNode DEBUG -protocol https

請注意,設定並非永久性的,且會在守護程式重新啟動時重設。此命令透過將 HTTP/HTTPS 要求傳送至守護程式的內部 Jetty servlet 來執行,因此它支援下列守護程式

  • 一般
    • 金鑰管理伺服器
  • HDFS
    • 名稱節點
    • 次要名稱節點
    • 資料節點
    • 日誌節點
    • HttpFS 伺服器
  • YARN
    • 資源管理員
    • 節點管理員
    • 時序伺服器

檔案

etc/hadoop/hadoop-env.sh

此檔案儲存所有 Hadoop shell 命令使用的全域設定。

etc/hadoop/hadoop-user-functions.sh

此檔案允許進階使用者覆寫某些 shell 功能。

~/.hadooprc

這儲存了個別使用者的個人環境。它會在 hadoop-env.sh 和 hadoop-user-functions.sh 檔案之後處理,且可以包含相同的設定。