其三干将客之awk

作者:Jack47

第1章 awk简介

转载请保留作者及原文出处

1.1 awk简介

  • 一律种名字怪的言语。
  • 模式扫描和拍卖。处理文本流,水流。

awk不仅仅是linux系统中之一个下令,而且是平等栽编程语言,可以据此来拍卖数量及扭转报告。

拍卖的数足以是一个或多独文本,可以是来自专业输入,也可以透过管道获取标准输入,awk可以

于指令行上直接编辑命令进行操作,也可编制成awk程序来拓展更为复杂的以。这里要教学

awk命令行的动。

拟完本章你晤面了解:

  • 域(字段)与记录
  • 模式以及配合
  • 中心的awk执行进程
  • awk常用内置变量(预定义变量)
  • awk数组(工作负比常用)

再有一些另awk用法:(这里不发介绍)

  • awk语法:循环,条件
  • awk常用函数:print
  • 向awk传递参数
  • awk引用shell变量
  • awk编程

 

迎关注自己之微信公众账号程序员杰克,两度的章会共同,也足以补充加我之RSS订阅源。

1.2 awk环境简介

[root@linux-node1 ~]# cat /etc/redhat-release

CentOS release 6.6 (Final)

 

[root@linux-node1 ~]# uname -r

2.6.32-504.el6.x86_64

 

[root@linux-node1 ~]# awk –version

GNU Awk 3.1.7

 

[root@linux-node1 ~]# which awk

/bin/awk

#/bin下和/sbin下之命令区别:

/bin : commands in this dir are all system installed user commands
   系统的局部发令

/sbin:  commands in this dir are all system installed super user
commands  超级用户指令
系统管理命令,这里存放的凡系统管理员使用的管制程序 

/usr/bin: user commands for applications  后期安装之组成部分软件的运作脚本

/usr/sbin: super user commands for applications  超级用户的有的管理程序

 

 

本文是Storm系列之一,主要介绍Storm的架构设计,推荐读者在阅读Storm介绍(一)的底蕴之上,阅读这无异于首。本文只是作者的读书笔记,偏重于浅层次的架介绍,如果想实在掌握里面设计上的衡量,还需再行多的去看Storm源码。

1.3 awk的格式

awk指令是出于模式,动作,或者模式与动作的重组成。

模式既pattern,可以接近理解成sed的模式匹配,可以由表达式组成,也得是鲜单刚斜杠之间的正则表达式。比如NR=1,这就算是模式,可以拿他解呢一个条件。

动作即action,是由以大括如泣如诉中的一样长达或多长达告句子组成,语句之间为此分号隔开。如awk使用格式:

 图片 1

 

祈求1-1 awk命令行格式

awk处理的情可以来专业输入(<),一个要么多单公文文件要管道。

图片 2

 

贪图1-2 awk模式动作解释图

pattern既模式,也得以理解为极,也让找哪位,你摸哪位?高矮,胖瘦,男女?都是条件,既模式。

action 既动作,可以了解呢涉及啥,找到人下您要是开啊。

 

接头Storm的架,有助于帮助我们领略大型分布式系统设计中需缓解之题材,以及缓解问题的思绪,帮助我们又好之拓Storm性能调优化。

1.4 awk执行进程

当深刻摸底awk前,我们要知道awk如何处理文件的。

演示1-1 演示文件的缔造

[root@linux-node1 ~]# mkdir -p /server/files/

[root@linux-node1 ~]# head /etc/passwd > /server/files/awkfile.txt

[root@linux-node1 ~]# cat /server/files/awkfile.txt  

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

 

[root@linux-node1 ~]# awk ‘NR>=2{print $0}’
/server/files/awkfile.txt

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

 

[root@linux-node1 ~]# awk ‘NR>=2{print NR,$0}’
/server/files/awkfile.txt

2 bin:x:1:1:bin:/bin:/sbin/nologin

3 daemon:x:2:2:daemon:/sbin:/sbin/nologin

4 adm:x:3:4:adm:/var/adm:/sbin/nologin

5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

6 sync:x:5:0:sync:/sbin:/bin/sync

7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

8 halt:x:7:0:halt:/sbin:/sbin/halt

9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

10 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

awk是透过一致行一行的拍卖文件,这漫长命令中含模式有(条件)和动作有(动作),awk将处理模式指定的施行。

小结awk执行进程:

a)awk读入第一执内容

b)判断称模式面临之准绳(NR>=2)

l 如果配合配默认则执行相应的动作({print
$0})

l 如果非配合原则,继续读博下一行

c))继续读博下一行

d)重复过程a-c,直到读取到终极一实行(EOF:end of file)

 

架构

先期上同一摆Storm的架构图,如果熟悉
GFS和Hadoop的架,会意识这些网的架构图都充分相近。
图片 3

Storm架构图

 1.5 区域与笔录

名称

含义

field

域,区域,字段

record

记录,默认一整行

eg:$1,$2,$3,$NF

$0: 整行,一个记录

$ 取 引用

 

1.5.1 字段(区域)

各国条记下还是由于多只字段(field)组成的,默认情况下里面的相间符是由空白符(即空格或制表符)来分隔,并且以分隔符记录在放置变量FS中。每行记录的字段数保存在awk的停放变量NF中。

 

 

贪图1-4 awk区域分隔符

awk使用内置变量FS来记录字段分隔符的情,可以经BEGIN语句来改,也堪在指令行上通过-F参数来改变,下面通过示范来加强学习。

演示1-3  FS演示文件生成

[root@linux-node1 ~]# awk -F “:” ‘NR>=2&&NR<=5{print $1,$3}’
/server/files/awkfile.txt

bin 1

daemon 2

adm 3

lp 4

1.5.2记录

awk对每个要拍卖的输入数据人为都是有着格式和布局的,而不仅仅是一致堆积字符串。默认情况下,每一样推行内容还成同漫长记下,并因变行符结束。

 

² 默认情况 -一行==一个笔录,每行都是一个记下。

² RS ==》 record separator 每个记录读入的时段的分隔符。

² NR==》 number of record 行号,记录的累累。awk当前拍卖着的,记录之反复。

² ORS==》 output record separate 输出食肉的相间符

 

awk使用内置变量来存放记录分隔符,RS代表的是输入的记录分隔符,这个价为得以为特定的办法修改。

面前我们说到了之$0,awk使用$0来表示整条记录。记录分隔符\n保在RS变量中。另外awk对各个一行的记录号都发出一个坐变量NR来保存,每处理终结一条记下NR的值就是见面自动+1.

下面通过示范来提高一下啊是记录,记录分隔符。

以身作则1-5 NR记录行号

[root@linux-node1 files]# awk ‘{print NR,$0}’ awkfile.txt

1 root:x:0:0:root:/root:/bin/bash

2 bin:x:1:1:bin:/bin:/sbin/nologin

3 daemon:x:2:2:daemon:/sbin:/sbin/nologin

4 adm:x:3:4:adm:/var/adm:/sbin/nologin

5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

6 sync:x:5:0:sync:/sbin:/bin/sync

7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

8 halt:x:7:0:halt:/sbin:/sbin/halt

9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

10 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

 

演示1-6 RS记录分隔符

#以/为分隔符记录一行

[root@linux-node1 files]# awk ‘BEGIN{RS=”/”}{print NR,$0}’
awkfile.txt

1 root:x:0:0:root:

2 root:

3 bin

4 bash

bin:x:1:1:bin:

5 bin:

6 sbin

7 nologin

daemon:x:2:2:daemon:

8 sbin:

9 sbin

10 nologin

adm:x:3:4:adm:

11 var

12 adm:

13 sbin

14 nologin

lp:x:4:7:lp:

15 var

16 spool

17 lpd:

18 sbin

19 nologin

#盖:为分隔符记录一行

[root@linux-node1 files]# awk ‘BEGIN{RS=”:”}{print NR,$0}’
awkfile.txt  

1 root

2 x

3 0

4 0

5 root

6 /root

7 /bin/bash

bin

8 x

9 1

10 1

11 bin

12 /bin

13 /sbin/nologin

daemon

14 x

15 2

16 2

17 daemon

18 /sbin

19 /sbin/nologin

adm

20 x

21 3

22 4

23 adm

24 /var/adm

25 /sbin/nologin

lp

26 x

27 4

28 7

29 lp

30 /var/spool/lpd

31 /sbin/nologin

awk 眼中之文本,从头到尾一段落连接的字符串,恰巧中间略\n(回车换行符)

 

示例1-7 RS为空值

#RS为空值的时候以指定行输出为平履行

[root@linux-node1 files]# awk ‘BEGIN{RS=””}{print NR,$1,$2,$3}’
awkfile.txt  

 

 

说明:

当行首打印输出记录号,并打印出各一行$0的始末

 

庄案例1:计算文件被每个单词的还数量

[root@linux-node1 files]# sed -ri.bak ‘s#[:/0-9]+# #g’
awkfile.txt

1)单词将成一排列(排队)

其中 -o 表示“only-matching 精确匹配

[root@linux-node1 files]# egrep -o “[a-zA-z]+” awkfile.txt |sort|
uniq -c|sort -r

      5 x

      5 sbin

      4 nologin

      4 bin

      3 root

      3 adm

      2 var

      2 lp

      2 daemon

      1 spool

      1 lpd

      1 bash

2)统计

[root@linux-node1 files]# awk ‘BEGIN{RS=”() | \n”}{print $0}’
awkfile.txt|sort |uniq -c|sort -rn

      5 x

      5 sbin

      4 nologin

      4 bin

      3 root

      3 adm

      2 var

      2 lp

      2 daemon

      1 spool

      1 lpd

      1 bash

      1

 

合作社案例2: 统计文件中每个字母的再数量

 

笔录小结:

  1. 象放冰箱分几步?打开冰箱,把大象放上,关闭冰箱门。
  2. 大多用NR,NF,$数字,配合而进行调试awk命令。
  3. NR存放着每个记录的哭喊(行号)读取新行时候会活动+1
  4. RS是记录之分隔符,简单了解就是是好指定每个记录之末段标志。
  5. (用RS替换\n)
  6. RS作用就是表示一个记下的收尾。
  7. FS标识着每个区域的利落。

各级节点的企图

而你熟悉Hadoop的口舌,可以如此做一下近似比较:

Hadoop Storm
JobTracker Nimbus(只有一个)
TaskTracker Supervisor(有很多个)
MapReduce任务 Topology

足见见Nimbus凡是调度器,WorkerTask的容器,Task凡是任务之的确实施者。

1.6 模式匹配

1.6.1 正则表达式

awk支持之正则表达式元字符

元字符

功能

示例

解释

^

字符串开头

/^cool/

匹配有坐cool开头的字符串

$

字符串结尾

/cool$/

相当有为cool结尾的字符串

.

配合任意单个字符

(包括回车符)

/c..l/

匹配配字母c,然后简单独随机字符,再盖l结尾的执行,比如ckk1,c@#1等

*

配合配0只或多独带字符

/a*cool/

匹配配0个或多单a之后紧跟着cool的行,比如cool,aaacool

+

再度雷同不善还是雷同不善以上

/a+b/

相当一个要么多只a加b的施行

配合配0独或一个带字符

/a?b/

匹配b或ab的行

[]

匹配指定字符组内之不论是一个字符

/^[abc]/

相当以字母a或b或c开头的实行

[^]

配合不以指定字符组

/^[^abc]/

 匹配不因为字母a或b或c开头的施行

x{m}

x重复m次

x重复至少m次

x重复至少m次,但非超过n次

内需指定参数:–posix或者–re-interval

/(cool){5}

需留意的一些是,cool加括号或未加括号的别,x可以要字符串也可独自是一个字符,所有/cool\{5\}/表示匹配coo再增长5单l,即coolllll,

^(cool\){2,\}则象征匹配coolcool,

coolcoolcool等

x{m,}

/(cool){2,}/

 

/(cool){5,6}/

正则表达式的行使,默认是于行内查找匹配的字符串,若有相当则执行action操作,但是有时只是需要稳定的排来配合指定的正则表达式,比如:$3这同样排查找匹配tom的尽,这样尽管待另外两只相当操作符:

~:用于对记录或字段的表达式进行(匹配)

!~:用于表达以及~想法的意。(不兼容)

#匹配配 第五排列以l或者a开头的装有行 ,这里(l|a) 可以转换成[al]

[root@linux-node1 files]# awk ‘$3~/^(l|a)/{print $0}’ awkfile.txt

adm x adm var adm sbin nologin

lp x lp var spool lpd sbin nologin

#取eth0 ip

[root@linux-node1 files]# ifconfig eth0| awk -F “[ :]+”
‘NR==2{print $4}’

10.0.0.7

[root@linux-node1 files]# ifconfig eth0| awk -F “addr:| Bcast:”
‘NR==2{print $2}’  

10.0.0.7

[root@linux-node1 files]# echo “—–=====1#######2”

—–=====1#######2

[root@linux-node1 files]# echo “—–=====1#######2″|grep
“[-=#]”

—–=====1#######2

[root@linux-node1 files]# echo “—–=====1#######2″|grep -o
“[-=#]”

=

=

=

=

=

#

#

#

#

#

#

#

[root@linux-node1 files]# echo “—–=====1#######2″|egrep -o
“[-=#]+”

—–=====

#######

 

 

 

#匹配o出现同潮或少不好的行打印第一列和最终一排列

[root@linux-node1 files]# awk –posix ‘$1~/o{1,2}/{print NR,$1,$NF}’
awkfile.txt

1 root bash

3 daemon nologin

1.6.2比表达式

示例1-18

[root@linux-node1 files]# awk ‘NR>=2&&NR<=5{print NR,$0}’
awkfile.txt

2 bin x bin bin sbin nologin

3 daemon x daemon sbin sbin nologin

4 adm x adm var adm sbin nologin

5 lp x lp var spool lpd sbin nologin

1.6.3克模式

awk ‘/start pos/,/end pos/{print $0} ‘ test.txt

awk ‘/start pos/,NR==XXX{print $0}’ passwd.oldboy

限制模式之时节,范围条件的时刻,表达式必须配合一行,

[root@linux-node1 files]# awk ‘NR==2,NR==5{print NR,$1,$3}’
awkfile.txt

2 bin bin

3 daemon daemon

4 adm adm

5 lp lp

[root@linux-node1 files]# awk ‘NR==2,NR==5{print NR,$0}’ awkfile.txt
     

2 bin x bin bin sbin nologin

3 daemon x daemon sbin sbin nologin

4 adm x adm var adm sbin nologin

5 lp x lp var spool lpd sbin nologin

[root@linux-node1 files]# awk ‘NR==2,NR<=5{print NR,$0}’
awkfile.txt  

2 bin x bin bin sbin nologin

1.6.4公司案例:取出常用服务端口号

ftp http https mysql ssh 端口号
/etc/services 文件

[root@linux-node1 files]# awk -F “[ /]+”
‘$1~/ftp|https|mysql|ssh)$/{print $1,$2}’ /etc/services|uniq

小结:

  1. 模式===》条件
  2. 正则表达式
  3. 标准表达式(NR>=2
    NR==2)
  4. 限定表达式
  5. (NR==2,NR==5)
  6. /正则表达式-开始/,/正则结束/
  7. $1~/正则表达式-开始/,$3~/正则结束/ 行,记录。
  8. 区域:FS刀分隔的,FS区域分隔符
  9. 记录:RS刀分隔的,RS记录分隔符
  10. FS===>NF 区域之数码
  11. RS===>NR 记录号,随着记录之长NR自动+1

 

开行拓扑

以以集群达启动一个拓扑,需要首先将代码打包改成一个“胖jar包”–必须含有有的负代码,除了Storm它自身,因为Storm集群会提供。然后以一如既往台设置了storm命令行的机及经过storm jar命来付拓扑:

storm jar my-topology-version-with-dependency.jar com.corp.MyTopology arg1 arg2

夫令会并到Nimbus,上传jar包。接下来Nimbus会把拓扑的代码运送及多台不同的机器要JVM上。只有当拓扑在机上布置成功了并且在JVM中初始化了今后,才会真正开始拍卖消息。

1.7 awk布局的回想

1.7.1 BEGIN模块

BEGIN模式之前我们有于演示中干,自定义变量,给内容变量赋值等,都是因此了。需要留意的凡BEGIN模式后要连接跟一个action操作块,包含在大括号内。awk必须于对输入文件进行其他处理前先实施BEGIN定义之action操作块。我们得免若另外输入文件,就好对BEGIN模块进行测试,因为awk需要事先实行完BEGIN模式,菜对输入文件举行处理。BEGIN模式时让用来修改内置变量ORS,RS,FS,OFS等的价。

示例1-25

[root@linux-node1 files]# awk ‘BEGIN{print “this is begin!\nand
thiscommand donnot have file”}’

this is begin!

and thiscommand donnot have file

说明:

并未公文awk依旧可以拍卖BEGIN模式下之操作块。

1.7.2 END模块

END 以awk读博了所有的文本的时

awk编程思想:

1.先处理,最后再END模块输出。

及BEGIN模式相对于的END模式,格式一样,但是END模式仅在awk处理完所有输入行后才开展拍卖。并且以END模式下awk不匹配任何输入行。

1.7.3 总结awk执行进程

1.朗诵入一行

2.断定是否是内需的行 条件$3>15 满足超过15 执行action :print

3.非满足条件重复1,2手续

1.7.4 企业案例3:统计文件中的空行数量

[root@linux-node1 files]# grep -c “^$” /etc/services

16

[root@linux-node1 files]# awk ‘/^$/{a=a+1;print a}’ /etc/services  

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

[root@linux-node1 files]# awk ‘/^$/{a=a+1}END{print a}’ /etc/services
            

16

 

 head -20 /etc/passwd >awkfile2.txt

面试题:awkfile2.txt 里面 以:为分隔符,区域3格外让15履行,一共发生小个?

[root@linux-node1 files]# awk -F “:” ‘$3>15{print $0}’
awkfile2.txt   

nobody:x:99:99:Nobody:/:/sbin/nologin

dbus:x:81:81:System message bus:/:/sbin/nologin

usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin

vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin

rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin

rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin

#计同一浅,输出一破

[root@linux-node1 files]# awk -F “:” ‘$3>15{a=a+1;print a}’
awkfile2.txt           

1

2

3

4

5

6

#拍卖完毕文件后还输出a   这里a=a+1 可以为此a++代替

[root@linux-node1 files]# awk -F “:” ‘$3>15{a=a+1;}END{print a}’
awkfile2.txt        

6

号面试题5:1+…..+100 1加以到100底价值,用awk实现

root@linux-node1 files]# seq 100 > test.txt  

[root@linux-node1 files]# cat test.txt |awk ‘{a+=$0}END{print a}’

5050

[[root@linux-node1 files]# awk ‘a=a+$0;END{print a}’ test.txt |sed
-n ‘$p’

5050

1.7.4 企业案例4:

搜来环境变量$PATH中,所有只生三独随机字符的一声令下,例如tee,并拿他们重定向到command.txt中,要求一行显示1独,并以文书尾统计他们的单数.

 

[root@linux-node1 files]# find $(echo $PATH|tr “:” ” “) -type f -name
“???”| awk ‘{a++}END{print “result:”a}’

find: `/root/bin’: No such file or directory

result:75

通配符:用来配合文件称的。{}字符序列

正巧则表达:字符串

1.7.5 总结awk执行进程

 

[root@linux-node1 files]# awk -F “:” ‘BEGIN{print FS}’        

:

先期执行命令再实施BEGIN模块

 

 

思想:

  1. awk核心思想就是临时处理,然后END模块输出。(累加(a++;a+=$0),awk数组)
  2. BEGIN模块用于awk内置变量FS,RS的赋值,打印标题头的信,(excel表格里面标题行)
  3. END模块用来最后输出,统计信息,awk数组信息。
  4. 区域,记录

 

  1. BEGIN和END模块只能有一个。不克BEGIN{}BEGIN{}或者END{}END{}
  2. 搜哪个干啥模块,可以是大半单。

NR=2{print $1}NR=5{print $0}

Master结点(Master node)

以分布式系统中,调度服务大重要,它的宏图,会一直关联及系统的运作效率,错误恢复(fail
over),故障检测(error detection)和品位扩展(scale)的力。

集群达职责(task)的调度由一个Master节点来承担。这台机械上运行的Nimbus过程负责任务的调度。另外一个进程是Storm
UI,可以界面上查看集群和具有的拓扑的运转状态。

1.8awk内置变量(预定义变量)

 

变量名

属性

$0

当前记录

$1-$n

当前记录的第n个字段,字段间由FS分隔

FS

输入字段分隔符 默认是空格

NF

当前记录中的字段个数。就是有多少列

NR

已经读出的记录数,就是行号,从1开始

RS

输入的记录分隔符默认为换行符

OFS

输出字段分隔符 默认也是空格

ORS

输出的记录分隔符,默认为

FNR

当前文件的读入记录号

从节点(Slave node)

Storm集群上起差不多单由节点,他们自Nimbus上下载拓扑的代码,然后去真正执行。Slave上的Supervisor过程是因此来监督和管理实际上运行工作代码的经过。在Storm
0.9事后,又多了一个过程Logviewer,可以用Storm
UI来查看Slave节点上之log文件。
在布局文件storm.yaml中,决定了平玉机械及运行几独worker:

supervisor.slots.ports:
- 6700
- 6701
- 6702

1.9 awk数组

以身作则1-9屡组演示

array[b]=”aaa”:array…..

 

 

1.9.1小卖部面试题1

 

处理以下文件内容,将域名取出并冲域名进行计数排序处理(去重):(百度和sohu面试题)

[root@linux-node1 files]# cat awkfile3.txt

http://www.etiantian.org/index.html

http://www.etiantian.org/1.html

http://post.etiantian.org/index.html

http://mp3.etiantian.org/index.html

http://www.etiantian.org/3.html

http://post.etiantian.org/2.html

 

[root@linux-node1 files]# awk -F “/” ‘{array[$3]++}END{for(key in
array) print key,array[key]}’ awkfile3.txt

mp3.etiantian.org 1

post.etiantian.org 2

www.etiantian.org 3

 

[root@linux-node1 files]# awk -F “/+” ‘{array[$2]++}END{for(key in
array)print key,array[key]}’  awkfile3.txt

mp3.etiantian.org 1

post.etiantian.org 2

www.etiantian.org 3

小结:

 

  1. awk数组去还
  2. 挑好分隔符 -F “/”
  3. 选好处理的区域,print
    $1,$3,$2
  4. array[$3]++
  5. 优先处理,最后END模块输出
  6. 输出awk数组我们下for(key in array)
  7. ===>for ()循环
  8. key in array 手去框里,抓苹果。
  9. key 就是苹果名字(数组元素的讳)
  10. array数组名(框的名)
  11. 打印输出print
    key,array[key]

 

1.9.2 企业案例2统计每个IP的访问量

access_awk.log

 

1.10 awk系英语总结

名称

含义

filed

域,区域,字段

record

记录,默认一整行

Filed Separator

FS:区域分隔符,表示一个区域的结束,字段,域

Number of Filed

NF:每一个记录中区域的数量

Record Separator

RS:记录分隔符,表示每个记录的结束

output filed separator

OFS

output Record Separator

ORS

awk当前处理的文件的记录号

FNR

[root@linux-node1 files]# seq 20 30 >20-30.txt

[root@linux-node1 files]# seq 50 60 >50-60.txt

[root@linux-node1 files]# awk ‘{print FNR,NR,$0}’ 20-30.txt 50-60.txt

1 1 20

2 2 21

3 3 22

4 4 23

5 5 24

6 6 25

7 7 26

8 8 27

9 9 28

10 10 29

11 11 30

1 12 50

2 13 51

3 14 52

4 15 53

5 16 54

6 17 55

7 18 56

8 19 57

9 20 58

10 21 59

11 22 60

ZooKeeper的作用

ZooKeeper在Storm上无是故来做信息传用的,而是用来提供协调服务(coordination
service),同时储存拓扑的状态和统计数据。

  • ZooKeeper相当于平块黑板,SupervisorNimbus与worker都于方留约定好的信。例如Supervisor启动时,会在ZooKeeper上注册,Nimbus哪怕足以窥见SupervisorSupervisor当ZooKeeper上留心跳信息,Nimbus由此这些心跳信息来对Supervisor进展健康检测,检测出深节点
  • 出于Storm组件(component)的状态信息囤积在ZooKeeper上,所以Storm组件就得管状态,可以
    kill -9来杀死

    • 像:Supervisors/Nimbus的再开不影响在运作面临之拓扑,因为状态还在ZooKeeper上,从ZooKeeper上更加载一下哪怕哼了
  • 故而来开心跳
    • Worker通过ZooKeeper把孩子executor的事态以心跳的款型汇报给Nimbus
    • Supervisor进程经过ZK把好的状态吧因心跳的款式反映给Nimbua
  • 存储最近任务的错误情况(拓扑停止时会删除)

第2章awk总结:

Storm的容错(Fault Tolerance)机制

正如“搭建一个Storm集群”一样缓介绍的平,必须用工具要daemontools或者monit来监督Nimbus和Supervisor的后台进程。这样一旦Nimbus或者Supervisor进程挂掉,会于daemontools检测到,并拓展重新开。

NimbusSupervisor经过被规划成为疾砸(fail
fast)的(当遇到特别的动静,进程就见面挂掉)并且是无状态的(状态且保留于Zookeeper或者在磁盘上)。

顶要紧之是,worker进程不见面为Nimbus或者Supervisor挂掉而于影响。这同Hadoop是未平等的,当JobTracker挂掉,所有的天职都见面没了。

  1. 当Nimbus挂掉会如何?

    苟Nimbus是以引进的不二法门处于进程监管(例如通过supervisord)之下,那它们见面被再开,不会见出任何影响

    否则当Nimbus挂掉后:

    • 就是的拓扑可以继续健康运作,但是不能够交付新拓扑
    • 恰以运作的worker进程仍然可以持续做事。而且当worker挂掉,supervisor会一直还开worker。
    • 黄的天职不见面于分配至任何机器(是Nimbus的职责)上了
  2. 当一个Supervisor(slave节点)挂掉会什么?

    要Supervisor是因引进的法门处于进程监管(例如通过(supervisord)[supervisord.org/])之下,那其会受再度开,不见面发另影响

    否则当Supervisor挂掉:
    分配到及时大机械的有任务(task)会过,Nimbus会把这些职责(task)重新分配给另外机器。

  3. 当一个worker挂掉会怎样?

    当一个worker挂掉,supervisor会重开它。如果开行一直失败那么这worker也尽管非可知及Nimbus保持中心跳了,Nimbus会重新分配worker到其他机器

  4. Nimbus算是一个单点故障吗?
    如Nimbus节点挂掉,worker进程仍然可以继续做事。而且当worker挂掉,supervisor会一直还开worker。但是,没有了Nimbus,当用的当儿(如果worker机器挂掉了)worker就无能够叫重新分配到另外机器了。
    就此答案是,Nimbus在“某种程度”上属于单点故障的。在其实被,这种情况没什么好未了之,因为当Nimbus进程挂掉,不见面发生悲惨的事务发

2.1.搜索哪个干啥模块

 图片 4

图片 5

 

 

 

 

 

 

 

 

硬件要求

2.2awk执行进程-完全

 图片 6

 

BEGIN模块输出一些提示性文字。awk内置变量FS,RS,ORS,OFS。

END 模块输出一些提示性文字,显示最后之结果,计算空行,awk数组,去苹果之经过将苹果来得处理。

awk里面的日常变量不用初始化。

awk先处理,一行一行的拍卖,然后END模块输出。

  1. 地域与记录

FS指定各种各样的刀(正则象征),RS正则达

 

  1. 模式匹配===》条件 如何寻找人。

正则表达式

^字符串开头

$字符串结尾

$3~/^http$/

–posix或 –re-interval

r{n,m}

相当精确,模糊

NR==1

NR>=2

模式默认匹配 一行$0

$3~/^r/

awk ‘$3~/[4-6]/{print $0}’ passwd.txt

限定匹配

NR=2,NR=5   ==>2,5p

/start 位置/,/结束位置/

 

  1. 遇上正则表达式/ /
  2. $3~/reg/
  3. > = <
  4. NR==2,NR=5 /start位置/,/结束位置/

 

  1. awk数组

数组 ==>元素

一个筐==》苹果

图片 7

图片 8

图片 9

 

 

 

题材来:

http://edu.51cto.com/course/course\_id-4319.html

 

ZooKeeper

  1. 引进精心设计过之机械,因为ZooKeeper是Storm的瓶颈
    • 每个机器使用一个ZK的实例
    • 小心为平台机械及之另外进程或虚拟机他们是共享这台机械的,所以可能会见潜移默化ZK的性(来源)
  2. I/O是ZooKeeper的瓶颈

  3. 把ZooKeeper的储存放到自己之磁盘上

  4. 用SSD会显著升级性
  5. 例行状况下,Zookeeper的每次写操作都见面联手到磁盘,这即招致了一定量蹩脚磁盘寻址操作(一涂鸦是数据,一次等是数量的日志)。当所有的worker都发心跳给ZooKeeper时,可能会见明显影响属性(来源)。

    • 欲监控ZooKeeper节点的I/O负载
  6. 引进以生产条件达到运行的ZooKooper集群有至少3只节点,这样便有一个ZooKeeper服务器挂掉了(例如进行保护),也是可以的。

3. 考试题

试验开1:处理以下文件内容,将域名取出并冲域名进行计数排序处理:(百度和sohu面试题)

oldboy.log

http://www.etiantian.org/index.html

http://www.etiantian.org/1.html

http://post.etiantian.org/index.html

http://mp3.etiantian.org/index.html

http://www.etiantian.org/3.html

http://post.etiantian.org/2.html

答案 (4种)

#这里的

root@linux-node1 files]# awk -F “/” ‘{array[$3]++}END{for(key in
array) print key,array[key]}’ awkfile3.txt

[root@linux-node1 files]# awk -F “/+” ‘{array[$2]++}END{for(key in
array)print key,array[key]}’  awkfile3.txt

[root@linux-node1 files]#  cut -d / -f3 awkfile3.txt|sort|uniq
-c|sort -nrk2

[root@linux-node1 files]#  sort -t / -rk3 awkfile3.txt|awk -F /
‘{print $3}’|uniq -c

 

试题2:统计公司办事负高并发web服务器不同网络连接状态对应的数码

[root@linux-node1 files]# netstat -ant|awk
‘NR>=3{array[$6]++}END{for(key in array)print key,array[key]}’
             

TIME_WAIT 134

SYN_SENT 1

ESTABLISHED 5

LISTEN 10

 

[root@linux-node1 files]# netstat -ant|awk ‘{print $6}’|uniq -c|sort
-nr

    138 TIME_WAIT

      7 LISTEN

      5 ESTABLISHED

      3 LISTEN

      1 Foreign

      1 established)

考试书3.分析图片服务日志,把日记(每个图片看次数*图片大小的总额)排行,取top10,也就是计量每个url的终究看大小【附加题:加分题】。

证明:本题生产环境下:这个意义可用来IDC网站流量带富很高,然后经过分析服务器日志哪些因素占用流量过特别,进而进行优化还是淘汰剪该图片,压缩js等艺术。

主题需要输出三个指标: 【访问次数】  
 【访问次数*单个文件大小】   【文件称(可以拉动URL)】

测试数据

59.33.26.105 – – [08/Dec/2010:15:43:56 +0800] “GET
/staticphotos/2.jpg HTTP/1.1” 200 11299
“http://oldboy.blog.51cto.com/static/web/column/17/index.shtml?courseId=43”
“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR
2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)”

59.33.26.105 – – [08/Dec/2010:15:43:56 +0800] “GET
/staticphotos/2.jpg HTTP/1.1” 200 11299
“http://oldboy.blog.51cto.com/static/web/column/17/index.shtml?courseId=43”
“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR
2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)”

59.33.26.105 – – [08/Dec/2010:15:44:02 +0800] “GET
/static/flex/vedioLoading.swf HTTP/1.1” 200 3583
“http://oldboy.blog.51cto.com/static/flex/AdobeVideoPlayer.swf?width=590&height=328&url=/\[\[DYNAMIC\]\]/2”
“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR
2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)”

124.115.4.18 – – [08/Dec/2010:15:44:15 +0800] “GET /?= HTTP/1.1” 200
46232 “-” “-“

124.115.4.18 – – [08/Dec/2010:15:44:25 +0800] “GET
/static/js/web_js.js HTTP/1.1” 200 4460 “-” “-“

124.115.4.18 – – [08/Dec/2010:15:44:25 +0800] “GET
/static/js/jquery.lazyload.js HTTP/1.1” 200 1627 “-” “-“

 

答案:

[root@linux-node1 files]# awk
‘BEGIN{print”URL:””\t””num:\t””total_size:”}{a[$7]++;b[$7]=$10}END{for(key
in a)print key”\t”a[key]”\t”a[key]*b[key]}’ images.log  

URL:    num:    total_size:

/?=     1       46232

/static/js/web_js.js    1       4460

/staticphotos/2.jpg     2       22598

/static/flex/vedioLoading.swf   1       3583

/static/js/jquery.lazyload.js   1       1627

晓透上述问题并搞定后,你将可轻松搞定如下扩展的考查开:

壮大考试书1:

4.假如现行出个文本,格式如下:

a  1

b  3

c  2

d  7

b  5

a  3 

g  2

f  6

d  9

哪怕左边是本机字母,右边是随机数字,要求写单下论使该出口格式为:

a  4

b  8

c  2

d  16

f  6

g  2

就要同之假名后面的数字加在一起,按字母之一一输出。

答案:

答案

[root@linux-node1 files]# awk ‘{if(!
a[$1]++)b[++n]=$1;c[$1]+=$2}END{for(i=1;i<=n;i++)print
b[i],c[b[i]]}’ a.txt

a 4

b 8

c 2

d 16

g 2

f 6

扩大考试题2:用shell处理以下内容

1、按单词出现频率降序排序!

2、按字母出现频率降序排序!

the squid project provides a number of resources to assist users
design,implement and support squid installations. Please browse the
documentation and support sections for more infomation

1.答案

[root@linux-node1 files]# sed -r ‘s#,| #\n#g’ b.txt|awk
‘{array[$0]++}END{for(key in array) print array[key],key}’|sort -r
         

2 the

2 support

2 squid

2 and

1 users

1 to

1 sections

1 resources

1 provides

1 project

1 of

1 number

1 more

1 installations.

1 infomation

1 implement

1 for

1 documentation

1 design

1 browse

1 assist

1 a

1 Please

1

 

 

 

2.答案

[root@linux-node1 files]# sed ‘s#[a-zA-Z]#& #g’ b.txt|awk
‘BEGIN{RS=” “}{arr[$1]++}END{for(i in arr) print arr[i],i}’|sort -nr
    

25

19 s

17 e

16 o

14 t

12 n

11 r

11 i

9 a

8 u

7 p

7 d

6 m

4 l

4 c

3 f

2 q

2 h

2 b

1 w

1 v

1 j

1 g

1 P

1 .

1 ,i

 

Storm安全性

土生土长设计Storm时,完全没把安全性考虑在内
兹安性能相关的功能在一步步加以进去
Storm 0.9.x本子及之平安题材:

  1. 没有证实机制(authentication),没有授权机制(authorization)
  2. 传输的多寡(例如worker之间)没有加密
  3. ZooKeeper上囤积的数量没有看限制
  4. 而Nimbus的Thrift端口没有锁住,任意的用户代码都好于节点上推行

再度多Storm安全性方面的提议见这里

题外话:
于触及Storm之后,有个问题在自身的脑海里升腾,国内的怪商家,比如Baidu,Ali,腾讯,都是生出生Storm这类实时计算框架的泥土的,可是为什么没开下呢?

Apache Storm Basic
Training
Fault
tolerance

Storm in pictures

Storm 0.9 Basic
Training


倘您看了本篇博客,觉得对而抱有获,请点击右侧下角的“推荐”,让更多人视!

资助Jack47写作,打赏一个鸡蛋灌饼钱吧

图片 10

微信打赏

图片 11

支付宝打赏