對於在Linux下開發的同學來說,Shell可以說是一種基本功。
對於運維的同學來說,Shell可以說是一種必備的技能,而且應該要非常熟練的書寫Shell。對於Release Team,軟件配置管理的同學來說,Shell也起到了非常重要的作用。尤其是分布式系統發展的如火如荼,很多開源項目都開展的如火如荼(好像不是分布式的系統都不好意思拿出來說事)。分布式系統的配置,管理,Shell也起到了非常重要的作用,雖然只是簡單的文件拷貝,但是誰讓Shell天生是做這些的呢?
當然了,以上不是本文的主題。本文的主題是Shell在大數據分析領域的作用。
看一代經典的百度面試題吧:
對於一個用戶日志文件,每行記錄了一個用戶查詢串,長度為1-255字節,共幾千萬行,請排出查詢最多的前100條。 日志可以自己構造。
對於使用C++, Java的同學來說,這個不是說幾分鐘就可以把可運行的代碼搞定的。這個怎麼樣也得幾十行代碼吧。當然了,這個也可以考察一個同學編程,設計的基本能力。
但是我相信,如果你能用Shell來完成,面試官,或者至少是我,會很滿意,因為Shell天生就是做這個的:
一行代碼搞定:
awk '{print $1}' $file | sort | uniq -c | sort -k1nr | head -n$100
不用擔心內存的問題,因為這幾千萬條數據完全可以裝在內存中,而且,現在集群中的可用節點,沒有幾十G的內存都不好意思活著(當然了如果你們生產環境下的機器還是個位數的內存,那麼你們。。。)。
尤其是你上線了自己的某個Feature,可能想很快的看一下相關的數據,那麼把某個時間段的數據拿來分析一下,可以很好的去評估一下上線Feature的性能,等等。
Linux Shell參數替換 http://www.linuxidc.com/Linux/2013-06/85356.htm
Shell for參數 http://www.linuxidc.com/Linux/2013-07/87335.htm
Linux/Unix Shell 參數傳遞到SQL腳本 http://www.linuxidc.com/Linux/2013-03/80568.htm
Shell腳本中參數傳遞方法介紹 http://www.linuxidc.com/Linux/2012-08/69155.htm
Shell腳本傳遞命令行參數 http://www.linuxidc.com/Linux/2012-01/52192.htm