본문 바로가기

IT/Spark

(16)
kafka windows build https://github.com/edenhill/librdkafka 에서 받고 빌드. 하지만 당연히 안된다. 왜냐면 1. 윈도우즈를 쓸수 밖에 없는 환경의 개발자분들에게 -> 우리 오픈 소스들은 windows에 대해 불친절하기 때문이다.2. 리눅스 기반 서비스 -> ㅋㅋㅋ 윈도우 ㅂㅅ3. 둘다 해보았지만 윈도우를 쓸 수 밖에 없는 상황 -> 역시 서비스는 리눅스. 난 3번 케이스이지만,, 어쩔수 없다. 어쨋든, README를 보자 윈도우즈 쪽에 겁나 불친절한 우리 README.win32.. 서버사이드에서 윈도우를 쓰는건. 정말이지 재앙인듯 하다.https://github.com/edenhill/librdkafka/blob/master/README.win32 읽어보면.. 다들 아실듯 ㅠㅠ 어쨋거나, OP..
Spark Cluster #1 용어 정리마스터모델링 관점에서 보았을 때, 클러스터 운영 및 제어에 사용되는 논리적 서버를 말한다. 슬레이브마스터가 아닌 워커 노드워커 노드작업이 수행되는 서버클러스터여러 개의 서버가 네트워크를 통해 연결되어 마치 하나의 서버인 것처럼 동작드라이버 프로그램스파크 컨텍스트를 생성 관리하는 매니저. 메인함수를 시작하는 프로그램을 가리킨다.Executor워커 노드에서 실행되는 프로세스(스래드가 아니라 프로세스가 실행된다.)스파크 컨텍스트스파크의 시작점(데이터베이스의 커넥션과 비슷) 또는 스파크 클러스터의 연결을 의미컨텍스트를 공유하는 것은 불가능하다.어플리케이션 패키지 파일작성된 드라이버 프로그램을 jar 로 패키징한 파일구성도작업 수행 절차드라이버 프로그램 작성jar 로 패키징, "어플리케이션 패키지 파일"..
RDD Data Load, Save 지원포맷text파일, JSON, 하둡 sequence파일, csvHDFS, s3, switf, mysql, hbase, 카산드라, hive text파일 저장test("saveAndLoadTextFile") { val rdd = sc.parallelize(1 to 1000, 3) val codec = classOf[org.apache.hadoop.io.compress.GzipCodec] // save rdd.saveAsTextFile("/sub1") // save(gzip) rdd.saveAsTextFile("/sub2", codec) // load val rdd2 = sc.textFile("/sub1") println(rdd2.take(10).toList) }sequence파일 저장test("saveAn..
RDD Action RDD action액션 = 결과값이 정수나, 리스트, 맵 등 RDD가 아닌 다른 타입결과값이 RDD 인건 트랜스포메이션이라 한다.둘 다 Lazy evaluation 방식이다. -> 연산을 계속 누적했다가 실제로 계산이 필요한 시점이 되어서야 실행 어떤 RDD의 map, flatMap, reduceByKey 등 트랜스포메이션 메서드를 100번 호출한다하더라도, count() 같은 액션 메서드를 호출하는 시점이 돼서야 비로서 그동안 쌓여있던 100개의 트랜스포메이션 연산을 순차적으로 실행하게 된다.-> 액션 메서드를 여러번 호출하면 트랜스포메이션 연산도 여러번 호출될 수 있다.! 출력 연산 first첫번째 원소를 하나 리턴한다.take입력 인자의 숫자만큼 원소를 리턴해준다.takeSample샘플 추츨. RD..
RDD filter And Sort Filter, SortByKey, KeysAndValues자세한 설명은 생략.. Ex)test("Filter") { val rdd = sc.parallelize(1 to 5) val result = rdd.filter(_ > 2) println(result.collect.mkString(", ")) } test("SortByKey") { val rdd = sc.parallelize(List("q", "z", "a")) val result = rdd.map((_, 1)).sortByKey() println(result.collect.mkString(", ")) } test("KeysAndValues") { val rdd = sc.parallelize(List(("k1", "v1"), ("k2", "v2")..
RDD Operate Partition Pipe데이터를 처리할 때 외부 프로세스 활용에 쓰인다. 운영체제에 종속이므로 아래 예제는 윈도우에서 하면 오류가 발생한다. test("Pipe") { val rdd = sc.parallelize(List("1,2,3", "4,5,6", "7,8,9")) val result = rdd.pipe("cut -f 1,3 -d ,") println(result.collect.mkString(", ")) }Coalesce, Repartition파티션 개수 조정.Coalesce은 줄이는 것만 처리, Repartition는 늘리는 것도 가능Coalesce은 셔플(X). Repartition는 셔플(O) RepartitionAndSortWithinPartitionsRepartition을 하는데 Key에 연산을 먹여서 ..
RDD Transformation aggregation ReduceByKeykey, value 쌍으로 이루어진 컬렉션에서, 같은 key를 가진 값을 병합하고, 각 key 에 매칭되는 value들을 연산한다.중요한 것은 value 들을 계속 누적해 나가면서 계산한다는 것이고, 그래서 이 연산은 결합법칙, 교환법칙이 성립하는 수식을 넣어야 문제가 없다.reduceByKey(func: (V, V) => V): RDD[(K, V)] Ex)test("doReduceByKey"){ val rdd = sc.parallelize(List("a", "b", "b","b")).map((_, 1)) val result = rdd.reduceByKey( (x,y) => { println(s"x=$x y=$y") ;x+y } ) println(result.collect.mkStri..
RDD Transformation #2 GroupByRDD 원소들을 일정 기준에 따라 분리, K 타입을 키로 가지는 T 집합체를 리턴해 준다.groupBy[K](f: T => K): RDD[(K, Iterable[T])]Ex)test("GroupBy"){ val rdd = sc.parallelize(1 to 10) val result = rdd.groupBy { case i: Int if (i % 2 == 0) => "even" case _ => "odd" } result.collect.foreach { v => println(s"${v._1}, [${v._2.mkString(",")}]") } }result)even, [2,4,6,8,10] odd, [1,3,5,7,9]패턴 매칭 예는 아래 사이트 에서https://twitter.github..