antony@notes:~/data-platform$ cat "資科平台重要資訊.md"
資科平台重要資訊
資科平台重要資訊
[TOC]
查看 hadoop 管理者帳號
$ hdfs dfs -ls -d /-d,Directories are listed as plain files.
output :
drwxr-xr-x - bigred bigboss 0 2022-07-27 23:08 /- hdfs 檔案系統 根目錄 的擁有者 : bigred
練習寫一隻程式
功能 : 透過 time 命令以及 for 迴圈,得出在 YARN 運算系統執行 x 支程式 跑 n 輪的時間,並將每次得到的時間平均
用法 :
參數 1 為 : 設定幾支 map 程式 參數 2 為 : 設定要 run 幾輪
完整程式
#!/bin/bash
[ "$#" != "2" ] && echo -e "\n用法\n\n參數 1 為 : 設定幾支 map 程式\n參數 2 為 : 設定要 run 幾輪\n" && exit 1
# clean file
cat /dev/null > /tmp/txt
cat /dev/null > /tmp/average
# 收集資料
for ((i=0;i<${2};i=i+1))
do
/usr/bin/time -p -o /tmp/txt yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-${HADOOP_HOME##*-}.jar pi $1 10000000 &>/dev/null
cat /tmp/txt | grep 'real' | cut -d " " -f 2 >>/tmp/average
done
# 加總收集到的秒數
a=0
while read line
do
a=$(echo "${line} + ${a}" | bc)
done < /tmp/average
# 取平均值
c=$(cat /tmp/average | wc -l)
average=$(echo "scale=5; ${a}/${c}" | bc)
t=$(echo "${1} + 2" | bc)
echo -e "\n總共 ${t} 支程式,跑 ${c} 輪的平均時間 : ${average} 秒\n"程式解析
#!/bin/bash, 宣告以下程式內容由 bash 程式執行$#,參數總數echo -e,讓\反斜線轉譯\n,換行符號
cat /dev/null > /tmp/txt,將/tmp目錄下的 txt 檔案清空for ((i=0;i<${2};i=i+1)),格式為 for ((起始值;最大值;累進值))$2,第二個參數,主要用來設定跑幾輪time用於統計命令執行所消耗的時間及相關係統資源等資訊。/usr/bin/time,用絕對路徑的原因是因為如果只執行time,會去執行 busybox 的time命令,功能不完整-p,使用相容輸出格式,real %e user %U sys %S%e,執行指令所花費的時間,單位是秒%S:指令執行時在內核模式(kernel mode)所花費的時間,單位是秒%U:指令執行時在用戶模式(user mode)所花費的時間,單位是秒-o /tmp/txt,設定結果輸出到 /tmp 目錄下的 txt 檔案。這個選項會將 time 的輸出寫入所指定的檔案中。如果檔案已經存在,覆寫其內容- 詳解 Linux time 命令的使用 連結
yarn jar,Runs a jar file. Users can bundle their Yarn code in a jar file and execute it using this command.*.jar,人家寫好的 java 程式pi,計算 pi 值2,產生兩個 map 程式100000,座標reduce,會幫我們處理和分析examples-3.3.3.jar的資料&>/dev/null,將 1 號裝置 (標準輸出) 和 2 號裝置 (警告訊息 or 錯誤訊息) 重導到 黑洞
cat /tmp/txt,將檔案內容顯示在螢幕上|,pipe,將左邊命令執行後的結果輸入給右邊的命令grep 'real',搜索 real 字串cut -d " ",指定用空格作為分隔符號,-f 2,將第 2 欄的內容剪下>>/tmp/average,將左邊 cut 完的結果 append 到 /tmp 目錄下的 average 這個檔案
while結合read的語法,先讀檔(每次會只讀一行)後,再跑迴圈。a=$(echo "${line} + ${a}" | bc),因 bash 不支援有小數的運算,所以要透過 pipe 丟給 bc 這個命令去算wc -l,得出檔案有幾行scale=5,小數點後面保留 5 位數,預設為 0
程式執行結果
$ bash time.sh 5 5
總共 7 支程式,跑 5 輪的平均時間 : 18.58800 秒