apache-pig - 在 GCP Dataproc 上运行 Bash 脚本

标签 apache-pig google-cloud-dataproc

我想在 Dataproc 上运行 shell 脚本,它将使用参数执行我的 Pig 脚本。这些参数始终是动态的,由 shell 脚本计算。

目前,此脚本在 script-runner.jar 的帮助下在 AWS 上运行。我不确定如何将其移动到 Dataproc。是否有类似的东西可用于 Dataproc?

或者我将不得不更改我所有的脚本并在 pig sh 的帮助下计算 Pig 中的参数。或 pig fs ?

最佳答案

正如 Aniket 所说,pig sh本身将被视为 Dataproc 作业的脚本运行程序;不必将您的包装脚本本身转换为 Pig 脚本,只需使用 Pig 引导您要运行的任何 bash 脚本即可。例如,假设您有一个任意的 bash 脚本 hello.sh :

gsutil cp hello.sh gs://${BUCKET}/hello.sh
gcloud dataproc jobs submit pig --cluster ${CLUSTER} \
    -e 'fs -cp -f gs://${BUCKET}/hello.sh file:///tmp/hello.sh; sh chmod 750 /tmp/hello.sh; sh /tmp/hello.sh'
pig fs命令使用 Hadoop 路径,因此要从 GCS 复制您的脚本,您必须复制到指定为 file:/// 的目的地。确保它在本地文件系统而不是 HDFS 上;然后是 sh之后的命令将自动引用本地文件系统,因此您不要使用 file:///那里。

或者,您可以利用方式--jars用于自动将文件暂存到仅为您的 Pig 作业创建的临时目录中,而不是从 GCS 显式复制到本地目录;您只需将 shell 脚本本身指定为 --jars争论:
gcloud dataproc jobs submit pig --cluster ${CLUSTER} \
    --jars hello.sh \
    -e 'sh chmod 750 ${PWD}/hello.sh; sh ${PWD}/hello.sh'

或者:
gcloud dataproc jobs submit pig --cluster ${CLUSTER} \
    --jars gs://${BUCKET}/hello.sh \
    -e 'sh chmod 750 ${PWD}/hello.sh; sh ${PWD}/hello.sh'

在这些情况下,脚本只会临时下载到类似 /tmp/59bc732cd0b542b5b9dcc63f112aeca3 的目录中。并且只存在于养 pig 工作的整个生命周期。

关于apache-pig - 在 GCP Dataproc 上运行 Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58376623/

相关文章:

apache - 在Pig Latin中加载UDF时发生ClassCastException错误

hadoop - 使用Pig从CSV文件读取数据

hadoop - Pig UDF无法过滤单词

hadoop - 创建dataproc集群时报告DataNodes数量不足

google-cloud-dataproc - Dataproc 上的 Jupyterlab -- 403 错误 - 无法读取未定义的属性 'path'

hadoop - 如何使用数据上的某些键将 HDFS 文件拆分为多个目录

hadoop - 为什么没有明显原因杀死 map task ?

apache-spark - 如何让 PySpark 在 Google Cloud Dataproc 集群上运行

Dataproc 上的 Pyspark 作业陷入阶段 0

apache-spark - Google Cloud Logging 中 Dataproc Spark 作业的输出