使用 Cloudera Manager 添加包裹存储库 Python API
Adding a parcel repository using Cloudera Manager Python API
我正在尝试使用 Cloudera Manager Python API 在 Hadoop 集群上安装 CDH5 包裹。我正在使用以下代码执行此操作:
test_cluster = ... # configuring cluster
# adding hosts ...
for parcel in test_cluster.get_all_parcels():
if parcel.product == 'CDH' and 'cdh5':
parcel.start_download().wait()
parcel.start_distribution().wait()
success = parcel.activate().wait().success
但是我发现了这样的错误:
cm_api.api_client.ApiException: Parcel for CDH : 5.8.0-1.cdh5.8.0.p0.42 is not available on UBUNTU_TRUSTY. (error 400)
CDH 5.8.0-1.cdh5.8.0.p0.42
在 AVAILABLE_REMOTELY
中,我们可以看到如果在这个包裹上打印一个字符串表示:
<ApiParcel>: CDH-5.8.0-1.cdh5.8.0.p0.42 (stage: AVAILABLE_REMOTELY) (state: None) (cluster: TestCluster)
代码执行后,parcel 的状态变为DOWNLOADED
。
看来,我应该添加一个与 Ubuntu Trusty (14.04) 兼容的新包裹存储库。但我不知道如何使用 Cloudera Manager API。
如何指定新的存储库以安装正确的 CDH?
您可能想要更具体地说明您正在处理的地块。我出于同样的目的使用类似的东西,你的问题的重要部分是对 parcel.version
和 parcel.product
的组合检查。之后(是的,我的输出很冗长)我打印包裹列表以验证我是否尝试只安装我想要的 1 个包裹。
我确定您来过这里,但如果没有,cm_api github site 也有一些有用的示例。
cdh_version = "CDH5"
cdh_version_number = "5.6.0"
# CREATE THE LIST OF PARCELS TO BE INSTALLED (CDH)
parcels_list = []
for parcel in cluster.get_all_parcels():
if parcel.version.startswith(cdh_version_number) and parcel.product == "CDH":
parcels_list.append(parcel)
for parcel in parcels_list:
print "WILL INSTALL " + parcel.product + ' ' + parcel.version
# DISTRIBUTE THE PARCELS
print "DISTRIBUTING PARCELS..."
for p in parcels_list:
cmd = p.start_distribution()
if not cmd.success:
print "PARCEL DISTRIBUTION FAILED"
exit(1)
# MAKE SURE THE DISTRIBUTION FINISHES
for p in parcels_list:
while p.stage != "DISTRIBUTED":
sleep(5)
p = get_parcel(api, p.product, p.version, cluster_name)
print p.product + ' ' + p.version + " DISTRIBUTED"
# ACTIVATE THE PARCELS
for p in parcels_list:
cmd = p.activate()
if not cmd.success:
print "PARCEL ACTIVATION FAILED"
exit(1)
# MAKE SURE THE ACTIVATION FINISHES
for p in parcels_list:
while p.stage != "ACTIVATED":
p = get_parcel(api, p.product, p.version, cluster_name)
print p.product + ' ' + p.version + " ACTIVATED"
我正在尝试使用 Cloudera Manager Python API 在 Hadoop 集群上安装 CDH5 包裹。我正在使用以下代码执行此操作:
test_cluster = ... # configuring cluster
# adding hosts ...
for parcel in test_cluster.get_all_parcels():
if parcel.product == 'CDH' and 'cdh5':
parcel.start_download().wait()
parcel.start_distribution().wait()
success = parcel.activate().wait().success
但是我发现了这样的错误:
cm_api.api_client.ApiException: Parcel for CDH : 5.8.0-1.cdh5.8.0.p0.42 is not available on UBUNTU_TRUSTY. (error 400)
CDH 5.8.0-1.cdh5.8.0.p0.42
在 AVAILABLE_REMOTELY
中,我们可以看到如果在这个包裹上打印一个字符串表示:
<ApiParcel>: CDH-5.8.0-1.cdh5.8.0.p0.42 (stage: AVAILABLE_REMOTELY) (state: None) (cluster: TestCluster)
代码执行后,parcel 的状态变为DOWNLOADED
。
看来,我应该添加一个与 Ubuntu Trusty (14.04) 兼容的新包裹存储库。但我不知道如何使用 Cloudera Manager API。
如何指定新的存储库以安装正确的 CDH?
您可能想要更具体地说明您正在处理的地块。我出于同样的目的使用类似的东西,你的问题的重要部分是对 parcel.version
和 parcel.product
的组合检查。之后(是的,我的输出很冗长)我打印包裹列表以验证我是否尝试只安装我想要的 1 个包裹。
我确定您来过这里,但如果没有,cm_api github site 也有一些有用的示例。
cdh_version = "CDH5"
cdh_version_number = "5.6.0"
# CREATE THE LIST OF PARCELS TO BE INSTALLED (CDH)
parcels_list = []
for parcel in cluster.get_all_parcels():
if parcel.version.startswith(cdh_version_number) and parcel.product == "CDH":
parcels_list.append(parcel)
for parcel in parcels_list:
print "WILL INSTALL " + parcel.product + ' ' + parcel.version
# DISTRIBUTE THE PARCELS
print "DISTRIBUTING PARCELS..."
for p in parcels_list:
cmd = p.start_distribution()
if not cmd.success:
print "PARCEL DISTRIBUTION FAILED"
exit(1)
# MAKE SURE THE DISTRIBUTION FINISHES
for p in parcels_list:
while p.stage != "DISTRIBUTED":
sleep(5)
p = get_parcel(api, p.product, p.version, cluster_name)
print p.product + ' ' + p.version + " DISTRIBUTED"
# ACTIVATE THE PARCELS
for p in parcels_list:
cmd = p.activate()
if not cmd.success:
print "PARCEL ACTIVATION FAILED"
exit(1)
# MAKE SURE THE ACTIVATION FINISHES
for p in parcels_list:
while p.stage != "ACTIVATED":
p = get_parcel(api, p.product, p.version, cluster_name)
print p.product + ' ' + p.version + " ACTIVATED"