2016-08-22 6 views
0

Cloudera Manager Python APIを使用してHadoop-clusterにCDH5パーセルをインストールしようとしています。私は、次のコード使用して、これをやっている:Cloudera Manager Python APIを使用したパーセルリポジトリの追加

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) 

コードの実行後、パーセルのステージはDOWNLOADEDに変更されます。

Ubuntu Trusty(14.04)と互換性のある新しいパーセルリポジトリを追加する必要があります。しかし、Cloudera Manager APIを使用してこれを行うことはわかりません。

正しいCDHをインストールするための新しいリポジトリをどのように指定できますか?

答えて

2

あなたが担当している小包についてより具体的に説明したい場合があります。私は同じ目的のためにこのようなものを使用します。あなたの質問の重要な部分は、parcel.versionparcel.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" 
関連する問題