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*')
看起来有问题,而且这是一种不合适的遍历文件的方式。
我正在尝试在 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*')
看起来有问题,而且这是一种不合适的遍历文件的方式。