我试图调整当前在本地Hadoop集群上运行的Spark作业。我想对其进行修改,以使其继续支持本地运行和Google云运行。
我当时在想一种方法,可以检测是否定义了给定的环境变量来确定代码是否在云中运行:
def run_on_gcp():
return is_defined(os.env["ENVIRONMENT_VARIABLE"])
我想知道什么是ENVIRONMENT_VARIABLE
,它总是在Google云上定义并且可以从Dataproc实例访问?
我在想PROJECT_ID
或BUCKET
,您通常使用哪个变量?通常如何以编程方式检测代码在哪里运行?谢谢
答案 0 :(得分:2)
为此,您可以使用if(TextUtils.isEmpty(news.getImage())) {
// Load default image
newsImageView.setImageResource(R.drawable.placeholder);
} else {
Picasso.get().load(news.getImage()).into(newsImageView);
}
。如果您将submit下的PySpark作业{{}}到Dataproc,它将打印出您正在使用的版本(在我的情况下为1.3):
DATAPROC_VERSION
答案 1 :(得分:0)
将作业提交到dataproc时,可以分配args。例如配置文件名称,群集名称。
CMD="--job mytestJob \
--job-args path=gs://tests/report\
profile=gcp \
cluster_name=${GCS_CLUSTER}"
gcloud dataproc jobs submit pyspark \
--cluster ${GCS_CLUSTER} \
--py-files ${PY_FILES} \
--async \
${PY_MAIN} \
-- ${CMD}
然后,您可以在程序中检测这些args。
environment = {
'PYSPARK_JOB_ARGS': ' '.join(args.job_args) if args.job_args else ''
}
job_args = dict()
if args.job_args:
job_args_tuples = [arg_str.split('=') for arg_str in args.job_args]
print('job_args_tuples: %s' % job_args_tuples)
job_args = {a[0]: a[1] for a in job_args_tuples}
print('\nRunning job %s ...\n environment is %s\n' % (args.job_name, environment))
os.environ.update(environment)