2016-07-29 19 views
0

Mahout/Hadoop 환경에 상당히 익숙합니다. 그렇기 때문에이 질문에 사소한 사과를 하긴하지만 아직 간단한 답을 찾지 못했습니다.표준 Mahout recommender를 자동화하십시오

나는 다음과 같은 참고 표준 추천인 작업을 제출할 수 두싯,과 EMR 클러스터가 :

mahout recommenditembased --input s3a://input-bucket/ratings_small.csv 
--output s3a://output-bucket/out/ --numRecommendations 2 
--similarityClassname SIMILARITY_COSINE 

모든 좋은,하지만 나는 마스터 노드에 SSH를 통해 연결되어 있어야합니다.

이제는이 실행을 자동화하여 전용 람다 함수가 EMR에 단계를 제출하고 그것에 대해 잊어 버릴 생각입니다. 그 일을하는 가장 쉬운 방법은 무엇일까요? Java로 전체 추천 애플리케이션을 작성하지 않고 Hadoop의 JAR 단계로 제출할 수 있습니까?

------ ------ 2016년 4월 10일 업데이트]

조금 더 파고 후, (적어도 나에게) 가장 쉬운 옵션은 밝혀졌다 다음 매개 변수를 사용하여 EMR 클러스터에서 "사용자 정의 JAR"작업 :

  1. 이름 : 임의의 단계 이름

  2. JAR 위치 : /usr/lib/mahout/mahout-mr-0.12.2-job.jar

  3. ,개
  4. 인수 : 실패

    org.apache.mahout.cf.taste.hadoop.item.RecommenderJob 
    --input s3a://your-bucket/input/ 
    --output s3a://your-bucket/output/ 
    --similarityClassname SIMILARITY_EUCLIDEAN_DISTANCE 
    --tempDir temp/random_guid/ 
    
  5. 액션 - 계속합니다.

분명히 위의 작업을 AWS CLI 또는 SDK를 통해 프로그래밍 방식으로 완전히 제출할 수도 있습니다.

참고 : 추천인이 실행될 때마다, 두싯 HDFS에서 임시 디렉토리를 생성하기 때문에 내가, 인수 --tempDir을 사용 (기본적으로, 그것은 temp/입니다). 그러나 Mahout 은 계산이 완료되면 디렉토리를 삭제하지 않습니다. 당신이 2 개 개의 연속 된 추천 작업을 제출할 경우에 따라서, 두 번째는

Exception in thread "main" org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory temp/preparePreferenceMatrix/itemIDIndex already exists 

내가 프로그래밍 추천인 작업을 제출으로 유사한 오류로 실패합니다, 나는 모든 작업에 대해 임의의 GUID와 다른 임시 디렉토리를 사용하기로 결정했습니다 . 또는 새 작업을 제출하기 전에 이전 작업에서 작성한 임시 디렉토리를 수동으로 제거 할 수 있습니다.

답변

0

가장 쉬운 방법은 자동화를위한 EMR 데이터 파이프 라인 템플릿을 사용하는 것입니다.

0

이 클러스터가 계속 남아 있을지 여부에 따라 달라질 수 있습니까? AWS Data Pipeline은 실제로 단일 사용 클러스터를 위해 설계되었습니다. 정기적으로 실행되도록 작업을 스케줄해야하는 장기 실행 클러스터의 경우에는 실제로 제대로 작동하지 않습니다.

정기적으로 실행하려면 일반 EMR 클러스터를 사용한 다음 Oozie를 사용하여 작업을 예약하는 것이 좋습니다. 여기에 Mahout의 모든 것을 담은 항아리를 만들어야합니다.

마지막으로 크고 작은 작업에 맞게 클러스터를 축소하고 확장하려는 경우 크기 조정 도구를 사용하여 EMR 클러스터에서 자동 조정을 지원하지 않는 크기 조정 도구를 사용할 수 있습니다. 상자, 소스 코드는 Github에서, 기사의 링크를 볼 수 있습니다이 문서

http://www.lopakalogic.com/articles/hadoop-articles/dynamically-resize-emr/

을 확인하십시오.