메뉴 건너뛰기

Bigdata, Semantic IoT, Hadoop, NoSQL

Bigdata, Hadoop ecosystem, Semantic IoT등의 프로젝트를 진행중에 습득한 내용을 정리하는 곳입니다.
필요한 분을 위해서 공개하고 있습니다. 문의사항은 gooper@gooper.com로 메일을 보내주세요.


* 출처 : http://hoondongkim.blogspot.kr/2016/01/sparkr-1-installation-guide-on-yarn.html


SparkR 설치 사용기 1 - Installation Guide On Yarn Cluster & Mesos Cluster & Stand Alone Cluster

SparkR은 설치 및 사용기, 기타 내부 작동방식 등에 대한 자료가 너무 부족한거 같다. 내부 작동 방식에 대하여 너무 궁금했었는데, 여러가지 Mode 로 설치해보고 다양한 삽집을 거친 후, 조금씩 돌아가는 코드들을 만들어 돌려 보고 나서야, 조금씩 내부 구조가 감이 잡히기 시작했다.

사용을 해보기 전 가졌던 의문들은 다음과 같다. 의문에 대한 답은 정답이 아닐지도 모른다. 아직 코드 레벨에서 SparkR Core Code 까지는 까보고 확인해 보진 않았기 때문이다. 하지만, 실제 돌아가는 코드들을 하나 둘 만들어 수행해가며 실험을 해보니, 아래와 같은 유추가 가능하였다.

  1. Spark 는 Yarn 이나 Mesos 위에서 구동시 Spark 엔진을 모든 노드에 깔아줄 필요가 없다. R도 그럴가?
    1. SparkR은 R없이 동작되지 않는다. Local R과 Spark 엔진 사이에는 Layer 가 잘 나누어져 있는듯 하다. SparkR 모듈에서 R의 모든것을 처리하는 것이 아니라 인터페이스도 한다는 의미이다. 즉, bin 디렉토리에서 sparkR 을 수행하면, 로컬의 R이 반드시 있어야 그 위에서 무언가가 sparkR로서 완벽한 구동이 가능하다.
  2. R에서 사용하는 외부 Package 들은 모든 노드에 직접 설치 수행해 주어야 하나?
    1. 실험해 보니... 그렇다. 모든 노드에 설치해주지 않으면, 해당 모듈이 설치되지 않는 노드에서 계산 시 해당 노드에서만 에러가 난다.
    2. 외부 Package 설치는 일반적인 R의 그것과 동일하였다. SparkR 이 아닌 그냥 R 콘솔에서 install.package("패키지명") 하여 설치하면, SparkR 에서도 잘 인식 한다.
  3. 경로 참조는 어떤식으로 이루어 지나?
    1. 여러가지 메소드를 사용해보았는데, 동작 방식이 다소 차이가 있었다.
    2. 어떤 메소드는 해당 노드의 로컬경로를 찾는 것이 있다. (주로 R 고유 메소드 들..)
    3. 그리고, 어떤 메소드는 Hadoop 에서 해당 경로를 찾는 것도 있었다. (옵션 인자 를 확인해보진 않았지만, default 옵션이 그렇게 동작하는 것들이 있었다.)
    4. SparkR 이 제공하는 특화 메소드들은 몇몇 Hadoop 이 default 인것들이 보인다.
  4. 전통적인 R 스타일의 코드는 동작하지 않나? 예를 들어 R이 제공하는 data.frame 을 모두 SparkR 이 제공하는 dataframe(RDD Base) 로 일부 코드레벨로 치환해주어야만 동작하나?
    1. 답은 아니다 이다.
    2. 전통적인 R 스타일 코드도 동작하고, SparkR 스타일로 치환한 스타일 코드 또한 당연히 잘 동작한다.
    3. 단, 전자는 병렬처리가 안되는 것을 확인하였다. 후자는 병렬 처리가 이루어 진다.
  5. Production Level 의 실용적인 R코드를 SparkR 로 치환하는 대 진입장벽은 어느정도 인가?
    1. 계산 로직을 처음부터 만드는 경우이거나, Primitive 한 계산 로직 혹은 데이타 가공 처리 위주의 Legacy R 코드는 SparkR 스타일로 치환하기가 크게 어렵진 않다. 
    2. 단, data.frame 이나 data.read 부분의 메소드 들을 SparkR  스타일로 변경해주는 약간의 작업이 필요하다. 해당 코드들은 그러나 대부분 Legacy 코드의 5% 미만인 경우가 대부분일 것이다.
    3. 외부 Package 를 그대로 사용하는 경우는 약간 제약이 따른다. 일부 그래프 패키지 등은 SparkR 스타일로 계산을 끝내고, 자료구조에 최종 결과 Dataframe 만을 남긴 이후, 해당 data 를 R스타일 자료로 옮기고 그대로 사용가능하다. (sparkR 의 dataframe 을 input 으로 받아주지 못하는 Package 가 대부분이므로...) 초기 계산 data가 매우 크다 할지라도, 계산이 끝난 데이타는 양이 작아질 수 있으므로, 이 시나리오는 그런데로 available 할 수 있다.
    4. 하지만, 외부 Package 로 마이닝 로직을 거대 Input 데이타에 데고 수행해야 하는 경우, SparkR 의 DataFrame 은 병렬성을 지원하지만, 해당 패키지가 해당 자료구조를 Input 으로 받지 못하여 Package 사용에 제약이 따른다. 이경우 현재까지는 아래와 같은 우회 해결책 외에는 해결 방법이 없어 보인다.
      1. 우선은 Spark ML  등에서 제공하는 다른 유사 알고리즘. 혹은 Mahout 등이 제공하는 외부 모듈을 사용하여 해당 연산 Job 을 분리 수행 시키는 방법이 있을 것이다. (널리 알려진 알고리즘들은 대부분 이 방법으로 수행이 가능할 것이다.)
      2. 하지만, R 에서만 존재하는 알고리즘을 꼭 써야 하는 경우는.... 어쩔 수 없이, 패키지를 그대로 사용하지 못하고, 해당 패키지의 Primitive 한 소스 코드를 열어서 자료구조를 SparkR 스타일로 치환해주는 작업이 필요하다. (패키지의 소스 난이도에 따라 available 한 방법이 아닐 수도 있다.)

아래는 우선 각 Compute Node 에 R 설치하는 과정이다.
우선 CentOS6 장비들과 CentOS7 장비들의 설치 과정이 다소 차이가 있었다.

  1. centos 6 에서 Install
    1. wget http://mirror.us.leaseweb.net/epel/6/x86_64/epel-release-6-8.noarch.rpm
    2. wget https://www.fedoraproject.org/static/0608B895.txt
    3. sudo mv 0608B895.txt /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 <-폴더생성됨
    4. sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
    5. rpm -qa gpg*
    6. sudo rpm -ivh epel-release-6-8.noarch.rpm
    7. sudo yum install -y npm 
    8. sudo yum install -y R
  2. centos 7 에서 Install
    1. epel-release & npm 최신 버전 설치
      1. wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
      2. sudo rpm -ivh epel-release-latest-7.noarch.rpm
      3. sudo yum install -y npm
    2. 이후 R설치 시도
      1. 이 경우 몇가지 Dependency 에러가 나는 경우가 있음. 각각을 rpm 찾아서 수동 설치
      2. wget ftp://ftp.muug.mb.ca/mirror/centos/7.1.1503/os/x86_64/Packages/blas-devel-3.4.2-4.el7.x86_64.rpm
        1. sudo yum install -y blas (버전이 devel 과 일치해야 함. 일치안할때는 rpm찾아서 깔아주면 됨.)
        2. sudo yum install -y gcc-gfortran
        3. sudo rpm -ivh blas-devel-3.4.2-4.el7.x86_64.rpm
      3. wget ftp://mirror.switch.ch/pool/4/mirror/centos/7.1.1503/os/x86_64/Packages/lapack-devel-3.4.2-4.el7.x86_64.rpm
        1. sudo yum install -y lapack (버전이 devel 과 일치해야 함. 일치안할때는 rpm찾아서 깔아주면 됨.)
        2. sudo rpm -ivh lapack-devel-3.4.2-4.el7.x86_64.rpm
      4. http://rpm.pbone.net/index.php3/stat/4/idpl/26647268/dir/centos_7/com/texinfo-tex-5.1-4.el7.x86_64.rpm.html 요기에서 texinfo-tex 모듈 다운로드 하여 인스톨
        1. sudo yum install -y tex
        2. sudo yum install -y texinfo
        3. http://rpm.pbone.net/index.php3/stat/4/idpl/29077368/dir/centos_7/com/texlive-epsf-svn21461.2.7.4-32.el7.noarch.rpm.html 요기에서 tex(epsf) 모듈 다운로드 하여 인스톨
          1. sudo rpm -ivh texlive-epsf-svn21461.2.7.4-32.el7.noarch.rpm
        4. sudo rpm -ivh texinfo-tex-5.1-4.el7.x86_64.rpm
    3. Dependency 모듈 모두 설치 후 R설치 재 시도
      1. sudo yum install -y R

앞서 질문과 자답에서 언급한 것 처럼 SparkR 병렬 구동에 앞서 위와 같이 R 을 모든 Compute Node 에 설치 해주어야 한다.

그리고 나면, 아래처럼 Spark Submit 으로 R 코드를 수행 할 수 있다.

  1. SparkR 실행 On Yarn
  2. SparkR 실행 On Mesos
  3. SparkR 실행 On StandAlone
  4. 병렬 수행 후 결과 Output
    1. Legacy R 스타일 Code 수행
      1. 내부 Cat 한 로그 위주로 출력.
    2. Spark R 스타일 Code 수행
      1. 병렬 수행을 위한 Shuffle 로그도 함께 출력.
  5. R 콘솔
  6. SparkR 콘솔

    번호 제목 글쓴이 날짜 조회 수
    240 딥러닝 수학/알고리즘 '한국어' 강의 총관리자 2016.04.10 110
    239 kudu 테이블 metadata강제 삭제시 발생하는 오류 메세지 총관리자 2022.01.12 109
    238 https용 인증서 발급 명령문 예시및 오류 메세지 총관리자 2018.01.24 109
    237 centos 6에서 mariadb 5.1 to 10.0 으로 upgrade 총관리자 2016.11.01 109
    236 impala external 테이블 생성시 컬럼과 라인 구분자를 지정하여 테이블 생성하는 예시 총관리자 2020.02.20 108
    235 hue.axes_accessattempt테이블 데이터 샘플 총관리자 2020.02.10 108
    234 elasticsearch 1.3.0에서 rdf및 hadoop plugin설치 총관리자 2016.04.06 108
    233 collection생성혹은 collection조회시 Plugin init failure for [schema.xml] fieldType "pdate": Error loading class 'solr.IntField' 오류 조치사항 총관리자 2022.04.07 107
    232 .gitignore파일에 지정되지 않은 파일이 ignore되는 경우 확인방법 총관리자 2016.11.22 107
    231 [Impala TLS/SSL이슈]RangerAdminRESTClient.java:151] Failed to get response, Error is: TrustManager is not specified gooper 2023.02.02 106
    230 컴퓨터 무한 재부팅 원인및 조치방법 file 총관리자 2017.12.05 106
    229 spark 2.0.0를 windows에서 실행시 로컬 파일을 읽을때 발생하는 오류 해결 방법 총관리자 2017.01.12 106
    » [SparkR]SparkR 설치 사용기 1 - Installation Guide On Yarn Cluster & Mesos Cluster & Stand Alone Cluster file 총관리자 2016.11.04 106
    227 [AD(LADP)] CDP1.7에서 AD및 Kerberos를 연동해도 각 노드에 os account, os group은 생성되어야 하지만 SSSD서비스를 이용하면 직접 생성될 필요가 없다. gooper 2022.06.10 105
    226 TopBraid Composer에서 SPIN 사용법 file 총관리자 2016.02.25 104
    225 Hue Load Balancer를 L4로 L/B하는 경우는 L4쪽 도멘인으로 발행된 인증서를 TLS/SSL항목에 설정해주어야 한다. 총관리자 2021.10.08 103
    224 https://github.com/Merck/Halyard프로젝트 컴파일및 배포/테스트 총관리자 2017.01.24 103
    223 RDF storage조합에대한 test결과(4store, Jena+HBase, Hive+HBase, CumulusRDF, Couchbase) 페이지 링크 총관리자 2016.05.26 102
    222 fuseki의 endpoint를 이용한 insert, delete하는 sparql예시 총관리자 2018.02.14 101
    221 Class.forName을 이용한 메서드 호출 샘플소스 총관리자 2016.12.21 100

    A personal place to organize information learned during the development of such Hadoop, Hive, Hbase, Semantic IoT, etc.
    We are open to the required minutes. Please send inquiries to gooper@gooper.com.

    위로