bash将参数传递到hdfs中存储的shell脚本

z31licg0  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(302)

我想执行一个存储在hdfs中的shell脚本,其中包含一个向脚本传递参数的选项。我已经验证了以下工作 hadoop fs -cat hdfs://path_to_script/sample.sh | exec bash 我想做以下工作 hadoop fs -cat hdfs://path_to_script/sample.sh param1 param2 param3 param4 | exec bash 问题是cat命令期望文件流式传输到stdout,但参数是存储在hdfs中的文件夹和文件。还有别的办法吗?

vsmadaxz

vsmadaxz1#

您可以尝试:

hadoop fs -cat hdfs://path_to_script/sample.sh | exec bash -s param1 param2 param3 param4
jfewjypa

jfewjypa2#

这将执行hdfs中的shell脚本

hdfs dfs -cat /user/gno1kor/HiveSqoop/HivequeryToWrite.sh | exec bash -s param1, param2
oxalkeyp

oxalkeyp3#

您可以尝试以下方法:;它使用单独的 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 作为要运行的脚本的名称。

相关问题