Bash 中的基本 MapReduce 中的脚本不是 运行 的问题

Issue with scripts not running in a basic MapReduce in Bash

我正在尝试在 bash 中创建一个基本的 MapReduce 函数(我对此很陌生)。我现在有两个脚本,job_master.sh 和 map_function.sh。我正在尝试 运行 作业主机的地图功能以从数据文件中剪切,如果它不存在,则将其发送到密钥,但如果确实存在,则将其发送到该名称的文件。当我 运行 job_master 脚本或 map_function 脚本单独使用一个文件作为参数时,什么也没有发生。在我将 if 语句添加到 map_function 之前它正在工作。

如果有人能够发现它们不 运行ning 的原因,我已经在下面包含了这两个代码。我尝试包含 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

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

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

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

另一方面,我看到您是这样调用地图函数脚本的:

./map_function.sh $elem

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

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

这也解决了您在脚本中遇到的其他一些问题。 files=$(ls | grep 'sales_a*') 看起来有问题,而且这是一种不合适的遍历文件的方式。