2016-08-22 2 views
0

Cloudera Manager Python API을 사용하여 Hadoop-cluster에 CDH5 소포를 설치하려고합니다.Cloudera Manager Python API를 사용하여 소포 저장소 추가

: 인쇄이 소포에 대한 문자열 표현하면 우리가 볼 수

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에 있었다 :

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 

그러나 나는 이러한 오류를 잡아 :이 사용하여 다음과 같은 코드를하고 있어요

<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를 설치하기위한 새로운 저장소를 어떻게 지정할 수 있습니까?

답변

2

당신이 행동하는 소포에 대해 더 구체적으로 원할 수 있습니다. 나는 같은 목적으로 이것을 사용합니다. 귀하의 질문에서 중요한 부분은 parcel.versionparcel.product의 결합 된 검사입니다. 그 후 (필자는 출력 결과에 장황 함) 필자가 원하는 소포 하나만 설치하려고한다는 것을 확인하기 위해 소포 목록을 인쇄합니다.

나는 여기에 왔을 것이라고 확신하지만 그렇지 않다면 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" 
관련 문제