hadoop jar cc-jar-with-dependencies.jar com.coupang.pz.cc.merge.Merge_Run \
${IDF_OUT}\
${IG_OUT}\
${PROB_OUT}\
${MERGE_OUT}\
1.00 \
0.000001 \
0.0001 \
有一段shell代码,我知道hadoop将在hdfs上运行cc-jar-with-dependencies.jar。但是第二行下面其他参数的含义是什么。它们是jar包所需的参数吗? $ {...}是hdfs上的路径,例如$ {IDF_OUT}等等。
答案 0 :(得分:1)
使用{WORD}
是bash
中Paramter Expansion
的基本情况,shell
$ PARAMETER
$ {PARAMETER}
最简单的形式是在大括号内使用参数的名称。这与使用$ FOO完全相同,就像你在任何地方看到它一样,但其优点是可以立即跟随字符,否则将被解释为参数名称的一部分。
举个例子,
word="car"
echo "The plural of $word is most likely $words"
echo "The plural of $word is most likely ${word}s"
生成输出,
The plural of car is most likely
The plural of car is most likely cars
请按预期查看不包含cars
的第一行,因为shell只能解释${word}
而不能解释$words
。
回到你的榜样,
hadoop jar cc-jar-with-dependencies.jar com.coupang.pz.cc.merge.Merge_Run \
${IDF_OUT}\
${IG_OUT}\
${PROB_OUT}\
${MERGE_OUT}\
1.00 \
0.000001 \
0.0001 \
从第二行开始,变量${IDF_OUT}
,${IG_OUT}
,${PROB_OUT}
和${MERGE_OUT}
都有可能是某些变量(可能是{中的环境变量) {1}}文件系统)在运行命令时将扩展为值。
虽然我已经解释了hadoop
语法是什么,但上述变量的实际目的在${WORD}
的上下文中并不十分相关。
答案 1 :(得分:1)
这些参数传递给hadoop
命令,因此您需要阅读该命令的文档。
但是,在运行脚本时找出这些参数中包含的值可能会很有趣。你可以这样修改代码,如下所示:
echo >&2 \
hadoop jar cc-jar-with-dependencies.jar com.coupang.pz.cc.merge.Merge_Run \
${IDF_OUT}\
${IG_OUT}\
${PROB_OUT}\
${MERGE_OUT}\
1.00 \
0.000001 \
0.0001 \
此更改将导致整个命令被打印而不是执行,而>&2
导致标准输出输出到标准错误(如果有一些输出捕获,这可能有助于将数据打印到终端继续)。请注意,此更改仅用于调试/好奇,它将使您的脚本省略命令的执行。
如果您知道这些值,整个命令可能更容易理解。