離線數據分析平臺實戰——020Hadoop Shell命令(可跳過)
Hadoop Shell命令簡單描述
Hadoop的Shell命令主要分為兩類:
- 一類是啟動命令
- 一類是控制/操作命令(hdfs+mapred+yarn)
其中啟動命令位于sbin目錄下面,
控制/操作命令主要位于bin目錄下面
其實最終的啟動命令也是調用控制命令來進行集群服務的啟動,區別在于啟動命令中需要使用ssh的相關命令來控制其他機器啟動服務,
而控制/操作命令主要是直接調用hadoop提供的服務類接口。
Hadoop配置信息
Hadoop命令的執行先需要設置配置信息,
然后再進行命令的執行;
了解命令必須先了解hadoop的配置信息。
Hadoop的配置信息主要在三個地方,分別是
${HADOOP_HOME}/libexec
,
主要儲存hadoop的默認環境變量信息,
${HADOOP_HOME}/etc/hadoop
,
主要是我們搭建環境的時候配置的環境變量信息
${HADOOP_HOME}/share/hadoop
。
主要是hadoop的相關依賴包信息,包括各個模塊依賴的其他第三方jar等信息。
Hadoop環境信息配置腳本
-
libexec/hadoop-config.sh
:最基本的、公用的環境變量配置腳本,會調用etc/hadoop/hadoop-env.sh
腳本。主要是配置java啟動項相關參數,比如java執行環境的classpath等。 -
libexec/hdfs-config.sh
: hdfs對應的配置信息,里面會調用hadoop-config.sh
。 -
libexec/mapred-config.sh
: mapred對應的配置信息,里面會調用hadoop-config.sh
。 -
libexec/yarn-config.sh
:yarn對應的配置信息,里面會調用hadoop-config.sh
。 -
libexec/httpfs-config.sh
&kms-config.sh
: 分別對應webhdfs和kms(Key Management Service)的配置信息。 -
etc/hadoop/hadoop-env.sh
: 用戶自定義的公用的相關環境變量信息,比如JAVA_HOME
,HADOOP_PID_DIR
,HADOOP_CLASSPATH
等(基本上除httpfs和kms外其他服務均就會調用該腳本)。 -
etc/hadoop/mapred-env.sh
:mapred相關的環境變量信息,比如配置mapred相關的pid存儲路徑(historyserver)等。 -
etc/hadoop/yarn-env.sh
: yarn相關環境變量信息(yarn相關服務執行的時候會調用該腳本)。 -
etc/hadoop/httpfs-env.sh
&kms-env.sh
:具體的webhdfs和kms相關的環境變量信息,比如日志存儲路徑,pid存儲路徑等。
distribute-exclude.sh
作用:
將需要排除的datanode節點主機文件發布到所有NN機器上去。
參數:
無
前置條件:
集群必須啟動;需要在hdfs-site.xml
文件中指定dfs.hosts.exclude
,默認為空,如果需要的話,可以指定一個文件的絕對路徑。
httpfs.sh
作用:
啟動/停止webhdfs,主要是提供一個基于HTTP的RESTful操作接口,基本包括hdfs文件系統的所有命令。
參數:
debug, start(啟動), stop(停止)等。
前置條件:
hdfs相關服務必須啟動;需要在core-site.xml
文件中指定hadoop.proxyuser.#user#.hosts
和hadoop.proxyuser.#user#.groups
,前一個參數中指定代理用戶可代理的用戶ip,后一個參數指定代理用戶所屬組,參數均可以為數組信息的value,如果給定*表示不進行限制。#user#
指啟動httpfs服務的用戶名,也是訪問api時候攜帶的用戶名。并指定dfs.webhdfs.enabled
是否啟動webhdfs,默認為true啟動。
這個是最簡單的一個配置信息,如果需要自定義其他信息,比如監聽端口號,pid存儲路徑等一些列信息,那么需要在etc/hadoop/httpfs-env.sh
中進行配置。比如端口號配置信息為HTTPFS_HTTP_PORT
默認為14000
,pid存儲文件為CATALINA_PID
默認/tmp/httpfs.pid
httpfs.sh命令簡單介紹
啟動/停止服務: httpfs.sh start/stop
RESTful API:
- 獲取指定路徑的liststatus信息,命令為LISTSTATUS,請求方式為GET。
- 創建一個文件夾, 命令為MKDIRS,請求方式為PUT。
- 刪除一個文件,命令為DELETE,請求方式為DELETE。
- 新增一個文件并打開,命令CREATE,請求方式PUT。
- 打開一個文件,命令為OPEN,請求方式GET。
hadoop-daemon.sh
作用:
啟動/停止當前節點的hdfs相關的服務或者執行相對應的腳本命令。
命令格式:
hadoop-daemon.sh [--config <conf-dir>] [--hosts hostlistfile] [--script script] (start|stop) (namenode|secondarynamenode|datanode|journalnode|dfs|dfsadmin|fsck|balancer|zkfc|其他)
注意:
hadoop-daemons.sh
其實就是在hadoop-daemon.sh
的基礎上,通知其他機器執行命令,也就是說hadoop-daemon.sh
只對一臺機器起作用,但是hadoop-daemons.sh
會對多臺機器起作用。
yarn-daemon.sh
作用:
啟動/停止當前節點的yarn相關的服務。
命令格式:
yarn-daemon.sh [--config <conf-dir>] [--hosts hostlistfile] (start|stop) (resourcemanager|nodemanager)
注意:
yarn-daemons.sh
其實就是在yarn-daemon.sh
的基礎上,通知其他機器執行命令,也就是說yarn-daemon.sh
只對一臺機器起作用,但是yarn-daemons.sh
會對多臺機器起作用。
start-dfs.sh
作用:
啟動所有節點的hdfs相關服務進程。
命令格式:
start-dfs.sh
里面按順序分別調用hadoop-daemons.sh
腳本啟動namenode
,datanode
,secondarynamenode
,journalnode
,zkfc
。
stop-dfs.sh
和start-dfs.sh
恰恰相反,按照啟動的調用hadoop-daemons.sh
來關閉服務進程。
start-yarn.sh
作用:
啟動所有節點的yarn相關服務進程。
命令格式:
start-yarn.sh
里面按順序分別調用yarn-daemons.sh
腳本啟動resourcemanager
,nodemanager
服務。
stop-yarn.sh
和start-yarn.sh
恰恰相反,按照啟動的調用yarn-daemons.sh
來關閉服務進程。
mr-jobhistory-daemon.sh
作用:
啟動/停止當前節點的mapred相關服務。
參數:
start(啟動), stop(停止)等。
比如說我們經常會啟動job
history
server
,默認情況下,這個服務是沒有啟動的,我們可以通過命令mr-jobhistory-daemon.sh start historyserver
其他命令
kms.sh
: 啟動/停止kms(Hadoop Key Management Service)。
refresh-namenodes.sh
:刷新所有NN節點內容。
slaves.sh
: 通知其他slave節點執行命令。
start/stop-secure-dns.sh
: 啟用/停用受保護的DN服務。
start/stop-balance.sh
: 啟用/停用數據平衡服務。
start/stop-all.sh
: 啟動/停止hdfs和yarn服務進程,底層調用start/stop-dfs.sh
和start/stop-yarn.sh
命令。
主要講解運行命令,也就是sbin目錄下面的啟動shell文件。
distribute-exclude.sh
作用:將exclude文件分布到各個namenode上。
exclude文件主要作用不允許這個文件中host對應的主機連接NN,配置在hdfs-site.xml中配置key為dfs.hosts.exclude,默認為空。
那么對應就有一個允許列表dfs.hosts,默認為空。
兩個屬性都是給定文件路徑。
也就是說將一個不允許的hosts列表文件,復制到全部namenode機器上去。包括本機(如果本機是NN)。
執行步驟:
1、執行hdfs-config.sh
2、讀取NN節點和配置的exclude文件地址
3、scp copy 覆蓋
httpfs.sh
作用:啟動http fs文件系統,也就是使用http來進行文件訪問操作。好處是:如果我們的集群處于防火墻內,但是我們又需要進行訪問的情況,就可以開啟這個服務,使用的是內置的tomcat,一般情況不會使用。
httpfs.sh start/stop
需要配置信息為:core-site.xml文件中添加
<property>
<name>hadoop.proxyuser.xxx.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.xxx.groups</name>
<value>*</value>
</property>
制定httpfs的用戶代理hosts和用戶組分別不進行限制(*)
get 請求:
http://10.2.3.12:14000/webhdfs/v1</path>?op=LISTSTATUS 查看list status
open
put請求:
curl -i -X PUT "http://hh:14000/webhdfs/v1/tmp/webhdfs?op=MKDIRS&user.name=hadoop"
curl -i -X DELETE "http://<host>:<port>/webhdfs/v1/<path>?op=DELETE
[&recursive=<true|false>]"
"http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETFILESTATUS"
kms.sh
作用啟動kms服務,默認監聽端口為16000
slaves.sh
作用:通知其他slave節點機器,執行命令
參數:
執行步驟:
1.首先執行libexec/hadoop-config.sh設置環境變量
2.執行${HADOOP_CONF_DIR}/hadoop-env.sh設置環境變量
3.獲取${HADOOP_CONF_DIR}/slaves文件的內容
4.通過ssh命令訪問其他機器,這里指定端口號HADOOP_SSH_OPTS,并讓其他機器執行命令。
ssh 22 host 命令
命令有個要求;指定全稱,默認路徑為用戶根目錄。不要求本機有這個命令。
hadoop-daemon.sh
作用:啟動當前節點的hadoop服務
Usage: hadoop-daemon.sh [--config conf-dir] [--hosts hostlistfile] [--script script] (start|stop) <hadoop-command> <args...>
--config 指定運行參數
--script指定執行的腳本,當hadoop-commend指定的參數不是下面的這些的時候
hadoop-command: namenode|secondarynamenode|datanode|journalnode|dfs|dfsadmin|fsck|balancer|zkfc
執行步驟:
1.執行libexce/hadoop-config.sh
2.讀取參數,這里直接就開始讀取--script參數,沒有看到讀取--config參數和--hosts參數
3.執行etc/hadoop/hadoop-env.sh: ”需要配置HADOOP_CONF_DIR“
4.設置一些pid和log日志位置信息
4.決定是start stop
5.如果command是hadoop集群的一些命令,那么執行bin/hdfs命令,否則執行--script指定的命令,如果為空,那就不執行
hadoop-daemons.sh
作用:啟動集群的hadoop的服務
Usage: hadoop-daemons.sh [--config confdir] [--hosts hostlistfile] [start|stop] command args...
--config 指定參數信息
執行步驟:
1.執行libexec/hadoop-config.sh
2.執行sbin/slaves.sh
3.使用slaves.sh來通知所有機器執行hadoop-daemon.sh,并將傳入的參數同事傳遞過去。
hdfs-config.sh
作用:執行libexec/hadoop-config.sh,我們從這個代碼中可以看出必須將sbin目錄添加到PATH路徑中去。
配置環境變量:HADOOP_LIBEXEC_DIR HADOOP_COMMON_HOME HADOOP_HOME 必須有一個配置,當然不配置也是可以的。
mr-jobhistory-daemon.sh
作用:啟動當前節點的jobhistory相關服務
Usage: mr-jobhistory-daemon.sh [--config <conf-dir>] (start|stop) <mapred-command> 其實--config參數沒有進行處理
執行步驟:
1. 執行libexec/mapred-config.sh配置mapred相關環境變量
2. 執行${HADOOP_CONF_DIR}/mapred-env.sh
3. 設置日志和pid存儲路徑
4. 判斷是start or stop。如果是stop直接kill pid
5. 如果是start,調用bin/mapred
refresh-namenodes.sh
作用:刷新namenode節點數據
hdfs dfsadmin -fs hdfs://xxx -refreshNodes
start-all.sh
同時啟動hdfs和yarn
stop-all.sh
同時關閉hdfs和yarn
start-balancer.sh
作用:啟動數據平衡器
執行步驟:
1.執行libexce/hadoop-config.sh環境變量
2.調用hadoop-daemon.sh --script bin/hdfs start balancer, 也就是說最終還是調用了hdfs的start balancer命令。
stop-balancer.sh
停止數據平衡器
底層調用hadoop-daemon.sh的stop命令
start-dfs.sh
作用:啟動hdfs相關服務
Usage: start-dfs.sh [-upgrade|-rollback] [other options such as -clusterId]
upgrade: 升級
rollback:回滾到上一個版本
執行步驟:
1. 獲取當前命令的絕對路徑,獲取libexec的路徑
2. 執行libexce/hdfs-config.sh(其實就是為了hadoop-config.sh來進行環境配置)
3. 解析參數
4. 獲取namenode列表, 通過hdfs的getconf命令來獲取
5. 啟動namenode節點,使用hadoop-daemons.sh來啟動,并指定config為etc/hadoop;hostname為獲取的nn列表,script為hdfs,start, namenode;并將其他參數傳遞過去。其實這里可以不指定script的。
6. 判斷是否設置環境變量HADOOP_SECURE_DN_USER, 如果設置那么就不能啟動datanode,必須使用start-secure-dns.sh來啟動。否則使用hadoop-daemons.sh來啟動datanode。
7. 通過hdfs命令獲取列表,啟動secondaryNamenodes
8. 通過hdfs命令獲取shared edits路徑,如果配置的路徑是以qjournal://開頭的,那么通過hadoop-daemons.sh來啟動journalnode
9. 獲取hdfs-site.xml中的配置參數dfs.ha.automatic-failover-enabled,如果為true, 那么啟動zkfc
stop-dfs.sh
作用:關閉全部的hdfs相關服務,沒有參數
執行步驟:
1. 獲取路徑
2. 執行libexec/hdfs-config.sh<也就是執行hadoop-config.sh>
3. 使用hdfs的命令獲取namenode節點列表,然后執行hadoop-daemons.sh命令停止服務
4. 停止datanode
5. 停止secondarynamenode
6. 停止journalnode
7. 停止zkfc
start-secure-dns.sh
作用:啟動安全驗證的datanode節點服務,要求設置環境變量EUID=0 HADOOP_SECURE_DN_USER指定用戶
底層也是調用hadoop-daemons.sh
stop-secure-dns.sh
停止datanode
start-yarn.sh
作用:啟動yarn相關所有服務resourcemanager和nodemanager
參數無
執行步驟“;
1. 執行yarn-config.sh,
2. 啟動resourcemanager,調用yarn-daemon.sh(因為只需要啟動一次, 而nn可能因為存儲ha機制(有多個namenode),所以調用的是hadoop-daemons.sh)
3. 啟動nodemanager
stop-yarn.sh 命令yarn相關停止服務
yarn-daemons.sh
作用:啟動/停止yarn相關服務
Usage: yarn-daemons.sh [--config confdir] [--hosts hostlistfile] [start
|stop] command args...
執行步驟:
1. 執行yarn-config.sh設置環境變量
2. 執行slaves.sh通知其他機器執行yarn-daemon.sh
yarn-daemon.sh
作用:啟動/停止當前節點的yarn相關服務
Usage: yarn-daemon.sh [--config <conf-dir>] [--hosts hostlistfile] (start|stop) <yarn-command>
執行步驟:
1. 設置hdfs-config.sh相關環境變量
2. 設置yarn-env.sh相關環境變量
3. 設置pid log等信息
4. 如果是start,調用hdfs啟動
5. 如果是stop,直接kill進程。
hadoop-config.sh
配置一些環境變量信息
hdfs-config.sh
根據是否環境變量調用hadoop-config.sh文件
httpfs-config.sh
配置httpfs相關環境變量,比如pid的存儲路徑,log日志的存儲路徑等。還有這個其他配置信息。
kms-config.sh
配置kms相關環境變量,最終會調用/etc/hadoop/kms-env.sh
mapred-config.sh
配置mapred相關環境變量,主要是historyserver
先調用hadoop-config.sh
配置日志信息
yarn-config.sh
調用hadoop-config.sh