Articles

소개하는 아파치에 불꽃과 함께 예고 사용하는 경우

처음 들었을 불꽃의 늦은 2013 년에이 되었을 때에 관심있는 스칼라에서는 언어는 불꽃이 기록됩니다. 얼마 후,나는 타이타닉에서 생존을 예측하려고 재미있는 데이터 과학 프로젝트를 수행했습니다. 이것은 스파크 개념과 프로그래밍에 더 소개받을 수있는 좋은 방법으로 밝혀졌다. 내가보기 엔 시작하는 장소를 찾고 어떤 주목받는 스파크 개발자를 위해 그것을 추천합니다.

오늘날 Spark 는 Amazon,eBay 및 Yahoo!와 같은 주요 플레이어에 의해 채택되고 있습니다. 많은 조직에서 수천 개의 노드가있는 클러스터에서 Spark 를 실행합니다. Spark FAQ 에 따르면 가장 큰 알려진 클러스터에는 8000 개가 넘는 노드가 있습니다. 실제로 스파크는 메모를하고 배울 가치가있는 기술입니다.

이 기사에서는 사용 사례 및 예제를 포함하여 Spark 에 대한 소개를 제공합니다. 그것은 아파치 스파크 웹 사이트뿐만 아니라 책 학습 스파크-번개 빠른 빅 데이터 분석에서 정보가 포함되어 있습니다.

Apache Spark 란 무엇입니까? 소개

Spark 는”lightning fast cluster computing”으로 광고 된 Apache 프로젝트입니다. 그것은 번성하는 오픈 소스 커뮤니티를 가지고 있으며 현재 가장 활발한 아파치 프로젝트입니다.

Spark 는보다 빠르고 일반적인 데이터 처리 플랫폼을 제공합니다. Spark 를 사용하면 Hadoop 보다 메모리에서 최대 100 배 빠르거나 디스크에서 10 배 빠른 프로그램을 실행할 수 있습니다. 지난해 촉발했 Hadoop 을 완료하여 100TB Daytona GraySort 대회 3 배 빠른 중 하나에서 십계의 수도가되었다 가장 빠르 오픈 소스 소 엔진을 위한 분류 페타바이트.

스파크 또한 가능한 코드를 작성하여 더 많은 빨리 당신은 80 개 이상의 높은 수준의 사업자에서 당신의 처분에 있습니다. 이를 입증하기 위해”안녕하세요 세계!”BigData 의:단어 수 예제. Written in Java for MapReduce 그것은 주변에 50 개 라인의 코드,반면에서 스파크(와 스칼라)할 수 있으로 단순히 한다:

sparkContext.textFile("hdfs://...") .flatMap(line => line.split(" ")) .map(word => (word, 1)).reduceByKey(_ + _) .saveAsTextFile("hdfs://...")

또 다른 중요한 측면을 사용하는 방법을 배우는 아파치 스파크는 대화형 쉘을(복제)는 그것을 제공합니다. REPL 을 사용하면 먼저 전체 작업을 코딩하고 실행할 필요없이 각 코드 줄의 결과를 테스트 할 수 있습니다. 따라서 작업 코드의 경로가 훨씬 짧아지고 임시 데이터 분석이 가능합니다.

추가 주요 기능의 불꽃을 포함한다:

  • 현재 Api 를 제공합니다 스칼라에서,Java,Python,과에 대한 지원이 다른 언어(R)에서는 방법
  • 로 Hadoop 생태계 및 데이터 원본(HDFS,S3,Hive,스,카산드라,등등.)
  • 실행할 수 있습에서 클러스터에 의해 관리되 Hadoop 원사 또는 아파치 메소,그리고 실행할 수도 있습니다형

스파크는 핵심가에 의해 보완 설정의 강력한,더 높은 수준 라이브러리할 수 있는 원활에서 사용된 같은 응용 프로그램입니다. 이러한 라이브러리에는 현재 SparkSQL,Spark Streaming,MLlib(기계 학습용)및 GraphX 가 포함되며 각 라이브러리는이 기사에서 더 자세히 설명합니다. 추가 Spark 라이브러리 및 확장 프로그램도 현재 개발 중입니다.

스파크 라이브러리와 확장을

스파크는 핵심

스파크의 핵심은 기본 엔진에 대한 대규모 병렬 및 데이터 처리합니다. 그것은 다음에 대한 책임이 있습니다:

  • 메모리 관리 및 장애 복구
  • 스케줄링,배포 및 모니터링 작업 클러스터에
  • 와 상호 작용 스토리지 시스템

스파크의 개념을 소개하는 RDD(탄산 Dataset),불변하는 내결함성,분산의 수집할 수 있는 객체에 운영합니다. RDD 는 모든 유형의 객체를 포함 할 수 있으며 외부 데이터 세트를로드하거나 드라이버 프로그램에서 컬렉션을 배포하여 작성됩니다.

RDDs 는 두 가지 유형의 작업을 지원합니다:

  • 변환은 rdd 에서 수행되고 결과를 포함하는 새로운 RDD 를 산출하는 작업(예:map,filter,join,union 등)입니다.
  • 작업은 rdd 에서 계산을 실행 한 후 값을 반환하는 작업(예:reduce,count,first 등)입니다.

Spark 의 변환은”게으른”것으로,결과를 바로 계산하지 않는다는 것을 의미합니다. 대신,그들은 수행 할 작업과 작업을 수행 할 데이터 세트(예:파일)를”기억”합니다. 변환은 액션이 호출되고 결과가 드라이버 프로그램으로 반환 될 때만 실제로 계산됩니다. 이 디자인은 스파크를보다 효율적으로 실행할 수있게합니다. 는 경우,예를 들어 큰 파일 변형에서 다양한 방법으로 전달되는 첫번째 액션,스파크 단지 과정과 결과를 반환한 첫 번째 라인보다는 작업에 대한 전체 파일입니다.

기본적으로 변환 된 각 RDD 는 작업을 실행할 때마다 다시 계산 될 수 있습니다. 그러나,당신은 또한 지속 RDD 에서 메모리를 사용하여 계속되거나 캐시 방법,어떤 경우에는 불꽃을 유지 요소에 주변의 클러스터를 위해 훨씬 빠르게 액세스하는 다음 시간 당신이 조회 할 수 있습니다.

SparkSQL

SparkSQL 은 SQL 또는 Hive 쿼리 언어를 통해 데이터 쿼리를 지원하는 Spark 구성 요소입니다. 그것은(맵리 듀스 대신에)스파크의 상단에 실행하는 아파치 하이브 포트로 유래 지금은 스파크 스택과 통합됩니다. 제공하는 것 외에도에 대한 지원은 다양한 데이터 소스에,그것이 가능한 방직 SQL 쿼리를 가진 코드 변환있는 결과에 매우 강력한 도구입니다. 아래의 예를 들어 하이브 호환 쿼리:

// sc is an existing SparkContext.val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)sqlContext.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING)")sqlContext.sql("LOAD DATA LOCAL INPATH 'examples/src/main/resources/kv1.txt' INTO TABLE src")// Queries are expressed in HiveQLsqlContext.sql("FROM src SELECT key, value").collect().foreach(println)

스파크 스트리밍

스파크 스트리밍을 지원하는 실시간 처리를 스트리밍 데이터와 같은 생산 웹 서버의 로그 파일(예를 들어,아파치 Flume 및 HDFS/S3),소셜 미디어 트위터와 같은 다양한 메시징 큐 다음과 같 카프카. 후드 아래에서 스파크 스트리밍은 입력 데이터 스트림을 수신하고 데이터를 일괄 처리로 나눕니다. 다음으로,그들은 스파크 엔진에 의해 처리되고 아래에 묘사 된대로 일괄 적으로 결과의 최종 스트림을 생성합니다.

스파크 스트리밍

스파크 스트리밍 API 밀접하게 일치하는 점화,핵심을 쉽게 만들기 위한 프로그래머의 작품 세계에서의 배치 및 스트리밍 데이터입니다.

MLlib

MLlib 은 기계 학습은 라이브러리 제공하는 다양한 알고리즘을 설계하는 가늠자 밖으로 클러스터에 대한 분류 회귀분석,클러스터링,협업 필터링,그리고(체크아웃 Toptal 의 문서에서 기계학습에 대한 자세한 정보는 항목). 일부의 이러한 알고리즘 또한 스트리밍 데이터 등의 선형 회귀분석을 사용하여 적어도 일반 사각형 또는 k-means clustering(와 방법에 대한 자세). Apache Mahout(Hadoop 용 기계 학습 라이브러리)은 이미 MapReduce 에서 벗어나 Spark MLlib 에 힘을 합쳤습니다.

GraphX

graphx

GraphX 은 라이브러리에 대한 그래프를 조작하고 수행하는 그래프의 병렬 작업입니다. ETL,탐색 분석 및 반복 그래프 계산을위한 균일 한 도구를 제공합니다. 그래프 조작을위한 기본 제공 작업 외에도 PageRank 와 같은 일반적인 그래프 알고리즘 라이브러리를 제공합니다.

Apache Spark 사용 방법:이벤트 감지 사용 사례

이제 우리는”Apache Spark 란 무엇입니까?”라는 질문에 대답했습니다.”어떤 종류의 문제 나 도전을 가장 효과적으로 사용할 수 있는지 생각해 봅시다.

최근에 트위터 스트림을 분석하여 지진을 감지하는 실험에 관한 기사를 보았습니다. 흥미롭게도,이 기술은 일본 기상청보다 일본의 지진을 더 빨리 알릴 가능성이 있음을 보여주었습니다. 비록 그들이 사용하는 다른 기술에서 자신의 문서,나는 그것은 좋은 예를 우리가 어떻게를 넣을 수 있 불꽃을 사용하여 간소화된 코드 및 접착제 코드입니다.먼저”지진”또는”흔들림”과 같은 관련성이있는 것처럼 보이는 트윗을 필터링해야합니다. 우리가 쉽게 사용할 수 있습니다.스파크 스트리밍 목적을 위해 다음과 같다:

TwitterUtils.createStream(...) .filter(_.getText.contains("earthquake") || _.getText.contains("shaking"))

그리고 우리는 것이 실행해야 어떤 의미에 대한 분석을 트윗을 결정하는 경우 그들은 나타나를 참조하여 현재 지진 발생합니다. “지진!”과 같은 트윗”또는”지금 그것은 흔들리는”예를 들어,고려 될 것 이 긍정적 인과 일치하는 반면,트윗처럼”에 참석하는 지진 컨퍼런스”또는”지진이었다 무서운”하지 않을 것입니다. 이 논문의 저자는이 목적을 위해 SVM(support vector machine)을 사용했습니다. 우리는 여기서도 똑같이 할 것이지만 스트리밍 버전을 시험해 볼 수도 있습니다. 결과 예제 코드에서 MLlib 은 다음과 같습니다:

// We would prepare some earthquake tweet data and load it in LIBSVM format.val data = MLUtils.loadLibSVMFile(sc, "sample_earthquate_tweets.txt")// Split data into training (60%) and test (40%).val splits = data.randomSplit(Array(0.6, 0.4), seed = 11L)val training = splits(0).cache()val test = splits(1)// Run training algorithm to build the modelval numIterations = 100val model = SVMWithSGD.train(training, numIterations)// Clear the default threshold.model.clearThreshold()// Compute raw scores on the test set. val scoreAndLabels = test.map { point => val score = model.predict(point.features) (score, point.label)}// Get evaluation metrics.val metrics = new BinaryClassificationMetrics(scoreAndLabels)val auROC = metrics.areaUnderROC()println("Area under ROC = " + auROC)

면 우리는 행복으로 예측의 속도 모델,우리는 이동할 수 있 다음 단계로 반응할 때마다 우리는 발견하게 되었습니다. 하나를 감지하려면 정의 된 시간 창(기사에서 설명한대로)에서 긍정적 인 트윗의 특정 숫자(즉,밀도)가 필요합니다. 트위터 위치 서비스가 활성화 된 트윗의 경우 지진의 위치도 추출 할 것입니다. 이 지식으로 무장해,우리가 사용할 수 있는 SparkSQL 및 쿼리 기존 하이브 테이블(저장하는 사용자에 관심을 받는 지진공지)을 검색하는 자신의 이메일 주소 및 그들에게 개인화한 경고,이메일,다음과 같다:

// sc is an existing SparkContext.val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)// sendEmail is a custom functionsqlContext.sql("FROM earthquake_warning_users SELECT firstName, lastName, city, email") .collect().foreach(sendEmail)

기타 아파치 스파크 사용 사례

잠재적 사용에 대한 불꽃을 넘어서 지진의 검출 물론입니다.

여기에 빠른(하지만 확실히 어디에도 가까운 철저한!)의 샘플링을 다른 사용해야 하는 경우 다루고 속도,다양한 볼륨의 빅데이터는 스파크는 이렇게 잘 적합니다.

게임에서 산업,처리 및 패턴을 발견하에서 잠재적인 firehose 의 실시간 게임 이벤트와에 반응할 수 있을 즉시 기능을 수 있는 수익성,사업 다음과 같은 목적을 위해 보존 플레이어,타겟 광고,자동 조정의 복잡성의 수준을니다.

에서는 전자상거래 산업에 실시간 거래 정보를 전달할 수 있습을 스트리밍 클러스터링 알고리즘을 사용하여 다음과 같 k-의미합 또는 협업 필터링을 다음과 같 ALS. 결과를 수 있었음에도 결합되는 다른 비정형 데이터 소스와 같은 고객의 의견 또는 제품 리뷰 및 사용을 지속적으로 개선하고 적응한 권장 사항을 시간으로 새로운 트렌드.

에서 금융 또는 보안 업계,스파크 스택에 적용할 수 있는 사기 또는 침입 탐지 시스템 또는 위험 기반의 인증이 있습니다. 그것을 얻을 수 있는 최고의 결과를 수확하여 거대한 금액의 보관 로그를 결합,외부 데이터와 같은 소스에 대한 정보를 데이터 유출 및 훼손 계정에(예를 들어,https://haveibeenpwned.com/)그리고 정보에 연결/요청의 IP 와 같은 위치 정보 또는 시간입니다.

결론

를 점화하는 데 도움이 단순화하고 도전적이고 계산이 많은 작업의 높은 볼륨을 처리하는 실시간 또는 보관된 데이터 구조 및 비구조적,완벽하게 통합하는 관련된 복잡한 기능과 같은 기계 학습 알고리즘 및 그래프. 스파크는 대중에게 큰 데이터 처리를 제공합니다. 그것을 확인하십시오!