二个找寻并上传已更新文件的ftp脚本,shell函数式用法尝试

shell函数式用法尝试

二个物色并上传已更新文件的ftp脚本

使得别的帮助标准IO (stdin, stdout)的可施行程序都能变成hadoop的mapper恐怕reducer。比如:

 

 

复制代码 代码如下:

循环找种种程序目录里面包车型客车富有配置文件内容

#!/bin/ksh

hadoop jar hadoop-streaming.jar -input SOME_INPUT_DIR_OR_FILE
-output SOME_OUTPUT_DIR -mapper /bin/cat -reducer /usr/bin/wc

  www.2cto.com  

########################################################

在这么些事例里,就采取了Unix/Linux自带的cat和wc工具来作为mapper /
reducer,是或不是很美妙?

#循环管理行的函数,参数为要拍卖的文本和处理内容的函数名

#Date: 2012-12-19

假如您屡见不鲜了动用部分动态语言,用动态语言来写mapreduce吧,跟从前的编制程序未有别的例外,hadoop只是运转它的三个框架,上边小编身先士卒一下用PHP来兑现Word
Counter的mapreduce。

whilefun() #arg1 file $1, arg2 cmd  $2

#name: swiftftp.sh

一、找到Streaming jar

{

#decription: Infiniti循环,每1分钟推行三遍,查找当前目录中

Hadoop根目录下是从未有过hadoop-streaming.jar的,因为streaming是三个contrib,所以要去contrib上面找,以hadoop-0.20.2为例,它在那边:

while read  line

修改时间当先1分钟但未超越

复制代码 代码如下:

do

# 2分钟的文书,ftp到前置上

$HADOOP_HOME/contrib/streaming/hadoop-0.20.2-streaming.jar

$2 $line

########################################################

二、写Mapper

done < $1

  www.2cto.com  

新建三个wc_mapper.php,写入如下代码:

}

datestr=`date “+%Y%m%d”`

复制代码 代码如下:

 

_logname=dynamicftp${datestr}.log

#!/usr/bin/php
<?php
$in = fopen(“php://stdin”, “r”);
$results = array();
while ( $line = fgets($in, 4096) )
{
$words = preg_split(‘/\W/’, $line, 0, PREG_SPLIT_NO_EMPTY);
foreach ($words as $word)
$results[] = $word;
}
fclose($in);
foreach ($results as $key => $value)
{
print “$value\t1\n”;
}

#处理函数,列文件名和cat 文件内容

chmod +x *

这段代码的大约意思是:把输入的每行文本中的单词找寻来,并以”
hello 1
world 1″
如此那般的款型出口出来。

custcmd2() # arg1  $line

if [[ ! -f ${_logname} ]];then

和事先写的PHP基本未有啥两样,对吧,大概有一点点让你倍感素不相识有八个地方:

{       echo —————————-c2 —–list file

    touch ${_logname};

PHP作为可推行程序

dir  $1

fi

第一行的“#!/usr/bin/php”告诉linux,要用/usr/bin/php这几个程序作为以下代码的解释器。写过linux
shell的人应该很熟谙这种写法了,各个shell脚本的率先行都以这么:
#!/bin/bash, #!/usr/bin/python

        echo

 

有了这一行,保存好这一个文件从此,就足以像这么直接把wc_mapper.php当作cat,
grep一样的授命实践了:./wc_mapper.php

cat $1

#该函数打字与印刷参数1的年华戳

应用stdin接收输入

}

# perl usage: perl -e “$a=1+4;exit($a);”

PHP帮衬二种参数字传送入的方法,我们最纯熟的应当是从$_GET,
$_POST超全局变量里面取通过Web传递的参数,次之是从$_SERVER[‘argv’]里取通过命令行传入的参数,这里,选用的是正统输入stdin

 

cal_timestamp() 

它的行使效果是:

#管理函数,获得目录,找到conf文件,依次拍卖每一个conf文件

{

在linux调整台输入 ./wc_mapper.php

custcmd() # arg1  $line

   perl -e ‘

wc_mapper.php运维,调整台步入等候客户键盘输入状态

{

    use Time::Local;

顾客通过键盘输入文本

cfdir=`dirname $1`

 

客户按下Ctrl +
D终止输入,wc_mapper.php发轫试行真正的业务逻辑,并将实行结果输出

cd $cfdir

# get current time

那么stdout在哪呢?print本人已经便是stdout啦,跟我们原先写web程序和CLI脚本未有别的例外。

        echo —————————-c1—————————-

# 参数表示,供给返还minu_num个分钟在此之前的光阴戳yyyymmddhhmm.ss

三、写Reducer

ls *.conf > /tmp/tmpfcf2

    $minu_num=”$ARGV[0]”;

新建三个wc_reducer.php,写入如下代码:

        echo ..cat

          localtime(time);

复制代码 代码如下:

        cat /tmp/tmpfcf2

 

#!/usr/bin/php
<?php
$in = fopen(“php://stdin”, “r”);
$results = array();
while ( $line = fgets($in, 4096) )
{
list($key, $value) = preg_split(“/\t/”, trim($line), 2);
$results[$key] += $value;
}
fclose($in);
ksort($results);
foreach ($results as $key => $value)
{
print “$key\t$value\n”;
}

whilefun /tmp/tmpfcf2 custcmd2

       $time1= time -60*$minu_num;

这段代码的忽视是总结每一个单词出现了有个别次,并以”
hello 2
world 1″
那般的款型出口。

}

       ($sec,

四、用Hadoop来运行

 

          $min,

上传要统计的演示文本

#找到运转的前后相继

          $hr,

复制代码 代码如下:

ps -ef | grep home |grep server |grep -v grep|awk ‘{print $8 }’ >
/tmp/tmpfcf;

          $mday,

hadoop fs -put *.TXT /tmp/input

#开班拍卖

          $mon,

以Streaming格局实践PHP mapreduce程序

whilefun /tmp/tmpfcf  custcmd

          $yr,

复制代码 代码如下:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图