복붙노트

[HADOOP] 스트리밍 작업을 위해 Hadoop 노드에 R 패키지를 임시로 설치

HADOOP

스트리밍 작업을 위해 Hadoop 노드에 R 패키지를 임시로 설치

기본 R (2.14.1)은 있지만 모든 노드에 추가 패키지가 설치되지 않은 Hadoop 클러스터에 액세스 할 수 있습니다. 추가 패키지가 없다는 사실을 극복하기 위해 기본 R 매퍼 및 리듀서 스트리밍 스크립트를 작성했습니다. 그러나 필자는 스크립트의 일부로 rjson과 같은 특정 패키지를 사용해야하는 시점에 도달했습니다.

클러스터에 대한 관리자 권한이 없으며 사용자 계정이 상당히 제한되어 있습니다. 클러스터 관리자가 모든 노드에 패키지를 설치하도록하는 것은 옵션이 아니며 현재로서는 클러스터에 외부 인터넷 액세스가 없습니다.

rjson_0.2.8.tar.gz 소스 파일을 게이트웨이 노드에 업로드했습니다. install.packages ( "rjson_0.2.8.tar.gz", repos = NULL, lib = / tmp) 또는 그 줄을 따라 스크립트를 시작할 때 패키지가 설치되도록 R 패키지를 임시로 설치할 수 있습니까? 스트리밍 작업의 -cacheArchive 매개 변수를 통해 소스를 전달 하시겠습니까? 작업이 완료되면 사라질 수 있도록 임시 위치에 패키지를 설치하고 싶습니다.

이것도 가능합니까?

옵션 인 JSON 처리를위한 것이기 때문에 "파이썬 사용"답변을 얻을 수 있다는 것을 알고 있습니다. 그러나 질문은 모든 패키지에 대한 것입니다. :)

해결법

  1. ==============================

    1.저는 rmr (프로젝트 RHadoop)의 저자입니다. 우리는 설치 문제를 회피하기위한 급진적 인 접근 방식을 실험하고 있습니다. 우리는 설명대로 스트리밍 기능을 사용하지만 간접적 인 수준으로 전체 R 배포, 패키지 및 모든 것을 항아리에 패키지합니다. R 분배는 tmp 디렉토리가 아닌 사용자 hdfs 디렉토리에로드됩니다. 그런 다음 스트리밍은 각 노드로 이동합니다. 작업 자체는 아직 없을 때마다 최종 대상으로 이동합니다. 우리는 전체 배포판이 작지 않기 때문에 스트리밍의 캐싱 기능을 활용하고 R의 구성 요소를 재배치 할 수 없었기 때문에 그렇게했습니다. 따라서 항아리를 다시 빌드하고 무언가를 업데이트하거나 패키지를 추가 할 때마다 hdfs로 옮깁니다. 나머지는 자동이며 필요할 때만 발생합니다 (hdfs-> nodes-> final location). 나는 Hortonworks 직원들로부터 올바른 코칭을 받았습니다. 우리는 브랜치 0 설치에 개념 증명이 있지만 우분투 / EC2에서만 작동하며 분명히 없어야 할 경로를 하드 코딩 할 수 있었고 다른 많은 가정을하고 있습니다. 칩에 기꺼이 참여하려는 개발자에게는 주요 구성 요소가 모두 포함되어 있습니다. 물론 이것은 별도의 결정 인 rmr을 사용하여 작업을 작성하는 조건이되거나 코드를 살펴보고 목적에 맞게 접근 방식을 재현 할 수 있습니다. 그러나 나는 이것을 모든 사람을 위해 한 번에 해결해야합니다. 항아리를 준비하는 스크립트는 다음과 같습니다 : https://github.com/RevolutionAnalytics/RHadoop/blob/0-install/rmr/pkg/tools/0-install/setup-jar 나머지 작업은 rmr :: : rhstream

    저는 rmr (프로젝트 RHadoop)의 저자입니다. 우리는 설치 문제를 회피하기위한 급진적 인 접근 방식을 실험하고 있습니다. 우리는 설명대로 스트리밍 기능을 사용하지만 간접적 인 수준으로 전체 R 배포, 패키지 및 모든 것을 항아리에 패키지합니다. R 분배는 tmp 디렉토리가 아닌 사용자 hdfs 디렉토리에로드됩니다. 그런 다음 스트리밍은 각 노드로 이동합니다. 작업 자체는 아직 없을 때마다 최종 대상으로 이동합니다. 우리는 전체 배포판이 작지 않기 때문에 스트리밍의 캐싱 기능을 활용하고 R의 구성 요소를 재배치 할 수 없었기 때문에 그렇게했습니다. 따라서 항아리를 다시 빌드하고 무언가를 업데이트하거나 패키지를 추가 할 때마다 hdfs로 옮깁니다. 나머지는 자동이며 필요할 때만 발생합니다 (hdfs-> nodes-> final location). 나는 Hortonworks 직원들로부터 올바른 코칭을 받았습니다. 우리는 브랜치 0 설치에 개념 증명이 있지만 우분투 / EC2에서만 작동하며 분명히 없어야 할 경로를 하드 코딩 할 수 있었고 다른 많은 가정을하고 있습니다. 칩에 기꺼이 참여하려는 개발자에게는 주요 구성 요소가 모두 포함되어 있습니다. 물론 이것은 별도의 결정 인 rmr을 사용하여 작업을 작성하는 조건이되거나 코드를 살펴보고 목적에 맞게 접근 방식을 재현 할 수 있습니다. 그러나 나는 이것을 모든 사람을 위해 한 번에 해결해야합니다. 항아리를 준비하는 스크립트는 다음과 같습니다 : https://github.com/RevolutionAnalytics/RHadoop/blob/0-install/rmr/pkg/tools/0-install/setup-jar 나머지 작업은 rmr :: : rhstream

  2. ==============================

    2.-cacheArchive 인수를 사용하여 제안한대로 수행 할 수 있지만이 기능은 더 이상 사용되지 않으며 대신 -archives를 사용해야합니다.

    -cacheArchive 인수를 사용하여 제안한대로 수행 할 수 있지만이 기능은 더 이상 사용되지 않으며 대신 -archives를 사용해야합니다.

    -files 대신 -archives를 사용하면 tar.gz 파일이 수동으로 압축을 풀지 않고 작업 트래커에 의해 압축이 풀리게됩니다.

    코드가 실행될 때 파일 또는 압축 해제 된 파일을 현재 작업 디렉토리에서 사용할 수 있으며, R에서 사용할 수있는 메커니즘에 따라 모듈 패키지를 등록 할 수 있습니다 (R을 사용한 적이 없어서 '여기서 당신은 여기에서)

  3. ==============================

    3.임시 디렉토리를 만들 수 있습니다 (예 : R의 tempfile 또는 python의 mkdtemp 사용). 디렉토리 이름이 고유한지 확인하십시오. 그렇지 않으면 여러 맵퍼가 동일한 위치에 패키지를 동시에 설치할 때 R에서 오류를보고합니다. 이 임시 디렉토리는 install.packages의 라이브러리 위치로 사용될 수 있습니다. 디렉토리는 mapred.child.tmp 특성에 의해 정의 된 위치에 있습니다. 기본 설정에서는 해당 매퍼가 완료된 후에 제거됩니다. mapred.child.tmp를 특정 위치 (예 : -D mapred.child.tmp = / tmp /)로 설정할 수도 있지만 하둡은 임시 디렉토리를 삭제하지 않을 수 있습니다.

    임시 디렉토리를 만들 수 있습니다 (예 : R의 tempfile 또는 python의 mkdtemp 사용). 디렉토리 이름이 고유한지 확인하십시오. 그렇지 않으면 여러 맵퍼가 동일한 위치에 패키지를 동시에 설치할 때 R에서 오류를보고합니다. 이 임시 디렉토리는 install.packages의 라이브러리 위치로 사용될 수 있습니다. 디렉토리는 mapred.child.tmp 특성에 의해 정의 된 위치에 있습니다. 기본 설정에서는 해당 매퍼가 완료된 후에 제거됩니다. mapred.child.tmp를 특정 위치 (예 : -D mapred.child.tmp = / tmp /)로 설정할 수도 있지만 하둡은 임시 디렉토리를 삭제하지 않을 수 있습니다.

  4. from https://stackoverflow.com/questions/11143406/temporarily-installing-r-packages-on-hadoop-nodes-for-streaming-jobs by cc-by-sa and MIT license