我想执行存储在HDFS中的shell脚本,并选择将参数传递给脚本。我已经验证了以下作品
class MyObject(object):
def __init__(self, a, b):
self.a, self.b = a, b
def total(self, x):
return (self.a + self.b) * x # some time-expensive calculation
def subtotal(self, y, z):
return self.total(x=y) + z # Don't want to have to re-run total() here
# IF y == x from a recent call of total(),
# otherwise, call total().
我想做以下工作
hadoop fs -cat hdfs://path_to_script/sample.sh | exec bash
问题是cat命令要求将文件流式传输到stdout,但参数是存储在HDFS中的文件夹和文件。还有其他任何方法可以使它运作吗?
答案 0 :(得分:2)
您可以尝试以下内容;它使用单独的hadoop fs cat
调用(在进程替换中)来检索每个文件,并将其作为文件名提供给sample.sh
以供阅读。
# Adjust the hdfs: URLs as necessary
hadoop fs -cat hdfs://path_to_script/sample.sh | exec bash \
<(hadoop fs -cat hdfs://param1) \
<(hadoop fs -cat hdfs://param2) \
<(hadoop fs -cat hdfs://param3) \
<(hadoop fs -cat hdfs://param4)
如果sample.sh
已经知道如何从hdfs读取,那么
hadoop fs -cat hdfs://path_to_script/sample.sh | exec bash -s param1 param2 param3 param4
可能就足够了。 -s
选项告诉bash从标准输入读取脚本,这样它就不会将param1
误认为要运行的脚本的名称。
答案 1 :(得分:0)
您可以尝试:
hadoop fs -cat hdfs://path_to_script/sample.sh | exec bash -s param1 param2 param3 param4
答案 2 :(得分:0)
这将执行HDFS中的shell脚本
hdfs dfs -cat /user/gno1kor/HiveSqoop/HivequeryToWrite.sh | exec bash -s param1, param2