보물창고/Big Data2017.03.22 23:00






아임클라우드는 빅데이터 기반 기술과 인공지능 기술을 개발하는 빅데이터 및 인공지능 전문 기업입니다.

아임클라우드의 Hadoop 기반 빅데이터 시스템은 국내 최고의 전문가 그룹으로 구성되며 고객 여러분의 빅데이터 고민을 해결해 드립니다. 인공지능의 영역은 무궁무진합니다. 강력한 DeepLearning 기술을 통해 가장 필요한 일을 함께 하는 파트너가 되어드립니다.





Imcloud Apache Cloudera CDH kudu 

관련 자료 정리 (hadoop echo)




Kudu는 Hadoop과 Hbase(phoenix)사이의 틈새를 공략한 솔루션 입니다.
 - 빅데이터의 분산 저장과 처리를 하면서 CRUD를 할 수 있는 환경에 대한 요구가 많았습니다. 기존에는 Hbase(phoenix)와 Impala가 일부 이런 요구들을 매꿔 왔으나 기능적으로 여전히 부족한 면이 있어 Kudu같은 솔루션이 나오게 되었습니다.
 - Kudu는 한마디로 말하면 Nosql DB의 엔진으로 이야기 할 수 있습니다.

데이터 저장 & 이용
 - Kudu는 Raft라는 기술을 이용하여 디스크에 직접 데이터를 읽고 쓰는 서버를  구동시키며 윗 레이어에  Impala를 얹어 사용하는 방법이 현 시점에서 가장 일반적인 사용방법이 입니다. java와 C++ API를 이용하여 Kudu데이터를 직접 이용할 수 있는 방법도 제공합니다.

성능
 - 아래에 링크된 논문의 내용을 보면 대략 Impala + parquet 의 성능과 비슷합니다. 성능이 비슷하지만 Kudu를 무시하지 못할 이점은 CRUD를 할 수 있다는 것이죠.

key 설정
 - Kudu에 안내되어 있는 내용을 보면 Hbase의 Split 설정과 MongoDB의 Shard 키와 비슷한 Key를 설정하게 되어있습니다
 - 키의 역할은 데이터를 구분하는데 사용되며 이 역시 Hbase와 MongoDB처럼 데이터를 구분하여 저장하는 기준이 되기 때문에 이를 설정하는 것에 따른 튜닝이 필요할 것으로 보입니다


현재 현업에서 사용하고 있고 적용하려고 준비하는 곳들이 있습니다. 성능적인 면은 기대를 하고 있으며 분산처리를 하면서 CRUD를 할 수 있는 Hadoop 에코가 출시한것에 대해 기대가 높은것으로 보입니다.






설치
Cloudera dependency install






Kudu 개념적인 설명


기타 설명


Kudu에대한 자주 묻는 질문(Kudu의 구성과 사용 가능 범위에 대한 내용이 있음)

Frequently Asked Questions

https://kudu.apache.org/faq.html


Kubu 스키마 디자인할대 고려해야할 사항

구글 번역

https://translate.google.co.kr/translate?sl=en&tl=ko&js=y&prev=_t&hl=ko&ie=UTF-8&u=https%3A%2F%2Fkudu.apache.org%2Foverview.html&edit-text=&act=url


논문

Hbase+ Phoenix, Kudu+impala, imapla+Parquet의 성능 비교

Kudu: Storage for Fast Analytics on Fast Data

https://kudu.apache.org/kudu.pdf

구글 번역

https://translate.google.co.kr/translate?sl=en&tl=ko&js=y&prev=_t&hl=ko&ie=UTF-8&u=https%3A%2F%2Fkudu.apache.org%2Foverview.html&edit-text=&act=url


 




데이터 저장 구조


데이터 복제와 안정성을위해 사용된 알고리즘

Raft consensus algorithm

Paxos 의 대안으로 고안된 합의 알고리즘

https://raft.github.io/

위키 Raft  구글 번역

https://translate.google.co.kr/translate?sl=en&tl=ko&js=y&prev=_t&hl=ko&ie=UTF-8&u=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FRaft_%28computer_science%29&edit-text=&act=url



Paxos

합의를 해결하기위한 프로토콜 모음

위키 Paxos 구글 번역

https://translate.google.co.kr/translate?sl=en&tl=ko&js=y&prev=_t&hl=ko&ie=UTF-8&u=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FRaft_%28computer_science%29&edit-text=&act=url






기타


Using Apache Kudu with Apache Impala (incubating)

테이블 생성 관련한 내용이 포함된 링크 입니다

https://kudu.apache.org/docs/kudu_impala_integration.html



2016 02 24에 업데이트됨. 과거 버전

kudu에 대한 전체적인 설명이 있는 슬라이드 쉐어

https://www.slideshare.net/AsimJalis/apache-kudu 




Impala 데이터 타입 기준으로 Kudu 데이터 타입 제약 사항


DECIMAL, TIMESTAMP, CHAR, VARCHAR, ARRAY, MAP 및 STRUCT 데이터 유형은 Kudu 테이블과 함께 사용할 수 없습니다.

https://www.cloudera.com/documentation/enterprise/latest/topics/impala_array.html#array


BOOLEAN, FLOAT 및 DOUBLE 데이터 유형은 Kudu 테이블의 기본 키 열에 사용할 수 없습니다.

https://www.cloudera.com/documentation/enterprise/latest/topics/impala_boolean.html#boolean







신고





Posted by 파란물
보물창고/Big Data2014.07.23 21:00







CDH 5.1.0 Documentation

Running Spark Application을 발번역한 내요입니다


전체적인 흐름을 잡는데 이용해주세요


http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH5/latest/CDH5-Installation-Guide/cdh5ig_running_spark_apps.html










*Spark 응용프로그램 실행 (Running Spark Applications)
Spark 어플리케이션은 맵리듀스와 job과 유사합니다
각 어플리케이션은 사용자가 제공한 코드를 실행해 결과를 연산하는 self-contained(독립형) computation입니다
맵리듀스 작업과 마찬가지로 Spark 어플리케이션은 여러 노드의 자원을 사용할 수 있습니다

각 어플리케이션은 실행을 조정하는 드라이 버프로세스를 가지고 있습니다
이 프로세스는 foreground(client mode) or background(cluster mode)에서 실행할 수 있습니다.
Client모드는 좀 더 간단하지만 Cluster모드를 사용하면 어플리케이션을 쉽게 종료하지 못합니다
Spark 어플리케이션을 실행한 후 로그아웃 할 수 있습니다

Spark는 계산을 실행하는 executors를 실행합니다
많은 executors는 작업 크기에 따라 클러스터에 분산됩니다

Spark는 두가지 모드에서 실행할 수 있습니다
Standalone mode : 
독림보드에서 , Spark는 worker의 노력을 조정하는 master데몬을 사용하여 executors프로그램을 실행합니다
독립모드는 기본으로 secure clusters모드를 사용할 수 없습니다
YARN mode:
YARN모드에서, YARN은 ResourceManager는 Spark master기능을 수행합니다 worker의 기능은 YARN NodeManager의 데본에 의해 executors를 실행합니다
YANR모드는 조금더 복잡한 설정을 하지만 보안을 지원하고  YARN의 cluster-wide(전체 클러스터) 더 나은  통합 지원관리 정책을 제공합니다

여러 Spark어플리케이션은 한번에 실행할 수 있습니다
Spark on YARN에서 실행하는 경우 YARN client mode나 cluster mode를 선택하는 기준은 application-by-application에 기초하여 결정할 수 있습니
Client mode에서 Spark를 실행하면 드라이버 프로세스는 로컬에서 실행됩니다
cluster mode에서 실행하면 ApplicationMaster에서 원격으로 실행 됩니다

다음절에서는 샘플 응용프로그램을 사용하여 SparkPi, Spark와 함께 PI패키지로 값을 계산하는 세가지 모드를 설명합니다

* 설정 (Configuration)
Spark를 구성하는 가장 쉬운 방법은 $SPARK_HOME/conf/spark-defaults.conf를 설정하는 것입니다

이 파일은 "key value"형태로 라인에 포함되어 있습니다
line시작 부분에 해시기호 (#)을 넣어 주석을 작상 할수 있습니다
참고 : 끝이나 줄의 중간에 주석을 추가 할 수 없습니다.

다음은 Spark의 defaults.conf 파일의 예입니다 
spark.master     spark://mysparkmaster.cloudera.com:7077
spark.eventLog.enabled    true
spark.eventLog.dir        hdfs:///user/spark/eventlog
# Set spark executor memory
spark.executor.memory     2g
spark.logConf             true

Spark의 default.conf에 보든 응용프로그램에서 사용할 설정 키(값)를 넣는 것이 좋습니다
설정키에 대한 자세한 내용은 스크립트를 참조사세요
스크립트 (Spark configuration) : http://spark.apache.org/docs/1.0.0/configuration.html

* Spark-Submit 스크립트 (The Spark-Submit Script)
Spark-submit을 이용하여 Spark 어플리케이션을 시작할 수 있습니다
spark-core 패키지를 설치한 경로에 있습니다

참고 : Spark는 --key=value;이런 옵션을 처리할 수 없습니다 --key value이렇게 사용하세요 (즉 기호대신 공백을 사용합니다)

spark-submit을 실행하려면 컴파일된 Spark JAR 어플리케이션이 필요합니다
다음 섹션에서 Spark와 함께 제공되는 샘플 JAR, SparkPi를 이용합니다
이것은 Pi의 근사치를 계산합니다

* 독립모드에서 SparkPi를 실행 (Running SparkPi in Standalone Mode)
제공된 --master과 --deploy-mode의 클라이언트 arguments는 독립모드로 SparkPi를 실행합니다
spark-submit \
--class org.apache.spark.examples.SparkPi \
--deploy-mode client \
--master spark//$SPARK_MASTER_IP:$SPARK_MASTER_PORT \
$SPARK_HOME/examples/*/scala-*/spark-examples-*.jar 10

JAR이름의 다음에 오는 arguments가 어플리케이션에 공급됩니다
이 경우 argument는 Pi에대한 근사치가 되도록 잘 제어합니다

* YARN client mode에서 SparkPi를 실행 (Running SparkPi in YARN Client Mode)
다음과 같이 SparkPi를 실행하는 명령은 다음과 같습니다
spark-submit  \
--class org.apache.spark.examples.SparkPi \
--deploy-mode client \    
--master yarn \    
$SPARK_HOME/examples/*/scala-*/spark-examples-*.jar 10

* YARN cluster mode에서 SparkPi 실행 (Running SparkPi in YARN Cluster Mode)
다음과 같이 SparkPi를 실행하는 명령은 다음과 같습니다
spark-submit  \    
--class org.apache.spark.examples.SparkPi \    
--deploy-mode cluster \    
--master yarn \    
$SPARK_HOME/examples/*/scala-*/spark-examples-*.jar 10

이 명령은 job이 완료될때까지 상태를 표시합니다 표시를 중지하려면 control-C를 누릅니다
client모드에서와 같이 cluster모드도 spark-submit 프로세스를 종료해도 어플리케이션은 종료되지 않습니다
실행중인 어플리케이션의 상태를 모니터링 하기 위해 
"yarn application -list" 를 실행합니다

* YARN 최적화 모드 (Optimizing YARN Mode)
일반적으로 다음 로그처럼 spark-submit할때마다 Spark assembly JAR 파일을 HDFS에 복사합니다
14/06/11 14:21:49 INFO yarn.Client: Uploading
file:/home/cmccabe/spark/b2.4/examples/target/scala-2.10/spark-examples-1.0.0-SNAPSHOT-hadoop2.4.0.jar to 
hdfs://a2402.halxg.cloudera.com:6000/user/cmccabe/.sparkStaging/application_1402278226964_0012/spark-examples-1.0.0-SNAPSHOT-hadoop2.4.0.jar
14/06/11 14:21:50 INFO yarn.Client: Uploading
file:/home/cmccabe/spark/b2.4/assembly/target/scala-2.10/spark-assembly-1.0.0-SNAPSHOT-hadoop2.4.0.jar to
hdfs://a2402.halxg.cloudera.com:6000/user/cmccabe/.sparkStaging/application_1402278226964_0012/spark-assembly-1.0.0-SNAPSHOT-hadoop2.4.0.jar

수동으로 HDFS에 Spark assembly JAR파일을 업로드하여 매번 복사되는 일을 방지할 수 있습니다
그런다음 HDFS경로에 SPARK_JAR환경 변수를 설정합니다
hdfs dfs -mkdir -p /user/spark/share/lib 
hdfs dfs -put $SPARK_HOME/assembly/lib/spark-assembly_*.jar  \     
/user/spark/share/lib/spark-assembly.jar 
SPARK_JAR=hdfs://<nn>:<port>/user/spark/share/lib/spark-assembly.jar

참고 : 클라우데라 매니저를 사용하는 경우 Spark assembly jar파일은 자동적으로 HDFS에 업로드 됩니다  (/user/spark/share/lib/spark-assembly.jar)

* Building Spark Applications (Building Spark Applications)
가 장좋은 방법은 Spark 어플리케이션을 컴파일에 포함합는 것입니
Spark와 Hadoop을 위한 경우를 제외하 고모든 dependencies를 포함하는 단일 assembly JAR을 Building합니다

aeembly JAR할때 Spark와 Hadoop은 제외한다 이미 cluster 및 런타임 class path에 있기 때문이다
메이븐에서는 명시된 Spark와 Hadoop의 종속을 표시할 수 있습니다

항상 호환성 문제를 방지하기 위해 실행하는 Spark버전과 같은 버전으로 building합니다
예를 들어 Spark 0.9에서 컴파일된 어플리케이션은 1.0에서 실행 안될 수 있습니다

Spark 0.9또는 그 이전에 컴파일된 일부 어플리케이션은 Spark 1.0에서 소스코드를 변경해야 합니다 Spark 1.0에서 컴파일한 어플리케이션은 이래의 모든보전에서 다 시컴파일 해야 합니다


신고





Posted by 파란물

티스토리 툴바