脚本未在Bash中的基本MapReduce中运行的问题

时间:2017-11-22 18:22:51

标签: bash mapreduce

我正在尝试在bash中创建一个基本的MapReduce函数(我很新)。我目前有两个脚本,job_master.sh和map_function.sh。我正在尝试从作业主机运行map函数以从数据文件中剪切,如果它不存在则将其发送到key,但如果它确实将其发送到该名称的文件。当我以文件作为参数运行job_master脚本或map_function脚本时,没有任何事情发生。在我将if语句添加到map_function之前,它正在工作。

如果有人能够发现他们没有运行的原因,我在下面列出了这两个代码。我尝试包含echo语句进行测试,它没有进入job_master脚本中的循环,或者在map_function脚本中执行任何操作。

MAP_FUNCTION

#!/bin/bash

while IFS="," read -r date prod remainder; do
        if [ ! -e "$prod" ];
        then
                echo $prod >> keys
        else
                echo $prod >> $prod
        fi
done

JOB_MASTER

#!/bin/bash

files=$(ls | egrep 'sales_a*')

for elem in $files ; do
        ./map_function.sh $elem
done

1 个答案:

答案 0 :(得分:0)

地图功能脚本正在等待输入。看看这个:

while IFS="," read -r date prod remainder; do
    # ...
done

read将在哪里获得输入?它在stdin等待,但你没有传递任何东西。

另一方面,我看到你正在调用map函数脚本:

./map_function.sh $elem

也就是说,您正在传递命令行参数。但是map函数脚本不使用该参数。您似乎想要将$elem的内容重定向到脚本的stdin。 写得像这样:

for elem in sales_a*; do
    ./map_function.sh < "$elem"
done

这也解决了您在脚本中遇到的其他一些问题。 files=$(ls | grep 'sales_a*')看起来很麻烦,这是一种不适当的方式来迭代文件。