Passando argumentos em linha para o shell script sendo executado no HDFS

0

Estou executando um shell script armazenado no HDFS (para que possa ser reconhecido pelo meu fluxo de trabalho oozie). para executar este script que estou usando

hadoop fs -cat script.sh |exec sh  

No entanto, preciso passar argumentos inline ao script. No CLI eu simplesmente faria isso com

./script.sh arg1

Em seguida, faça o eco da variável com $ 1. Eu estou tentando descobrir como eu faria o mesmo com um script armazenado no HDFS

    
por user2211504 06.07.2017 / 18:47

1 resposta

0

Você pode tentar algo parecido com o seguinte; ele usa uma invocação separada de hadoop fs cat (em uma substituição de processo) para recuperar cada arquivo e apresentá-lo ao script.sh como um nome de arquivo a ser aberto para leitura.

 # 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)

Se o script.sh já sabe ler o hdfs, então

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

pode ser suficiente. A opção -s diz ao bash para ler o script da entrada padrão, para que ele não confunda param1 como o nome do script a ser executado.

    
por 06.07.2017 / 19:25