Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 将参数传递到存储在HDFS中的shell脚本_Bash_Shell_Hadoop_Hdfs - Fatal编程技术网

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

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

我想执行一个存储在HDFS中的shell脚本,其中有一个向脚本传递参数的选项。我已经验证了以下工作

hadoop fs-cathdfs://path_to_script/sample.sh |exec bash

我想做以下工作

hadoop fs-cathdfs://path_to_script/sample.sh param1 param2 param3 param4| exec bash

问题是cat命令期望文件流式传输到stdout,但参数是存储在HDFS中的文件夹和文件。还有别的办法吗

您可以尝试:

hadoop fs -cat hdfs://path_to_script/sample.sh | exec bash -s param1 param2 param3 param4
您可以尝试以下方法:

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

您可以尝试以下方法:;它使用单独调用
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)

可能足够了。
-s
选项告诉bash从标准输入读取脚本,这样就不会将
param1
误认为要运行的脚本的名称;它使用单独调用
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)

可能足够了。
-s
选项告诉bash从标准输入读取脚本,这样就不会将
param1
误认为要运行的脚本的名称。

这将执行HDFS中的shell脚本

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

这将执行HDFS中的shell脚本

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

谢谢你,切普纳,-s选项起作用了,现在我可以将参数传递给脚本谢谢,切普纳,-s选项起作用了,现在我可以将参数传递给脚本了