将参数传递给存储在HDFS中的shell脚本

时间:2017-05-19 18:57:35

标签: bash shell hadoop hdfs

我想执行存储在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中的文件夹和文件。还有其他任何方法可以使它运作吗?

3 个答案:

答案 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