SPARK (2)spark 추가 하기

SPARK (2) - Spark 환경 설정 및 scala trait

 

  1. Spark gradle dependncy 추가
    compile group: 'org.scala-lang', name: 'scala-library', version: '2.11.1'
    compile group: 'org.apache.spark', name: 'spark-core_2.11', version: '2.1.0'
    compile group: 'org.apache.spark', name: 'spark-sql_2.11', version: '2.1.0'
    compile group: 'org.apache.spark', name: 'spark-mllib_2.11', version: '2.1.0'

 

build.gradle 파일 오른쪽 마우스 클릭 gradle refresh

 

main함수 안에 다음고 같이 적어주고

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext._
import org.apache.spark.SparkContext

object MainScala {
  def main(arg: Array[String]) {
	val conf = new SparkConf().setAppName("HelloWorld").setMaster("local[1]")
          .set("spark.executor.memory", "4g")
          .set("spark.driver.memory", "4g")
	val sc = new SparkContext(conf)

	println("=========================")
	println("Hello Spark")
	println("=========================")
	sc.stop()
  }
}

ScalaApplication 을 실행 해주면 실행 완료



 


RDD 프로그래밍 하기

graph LR
A[RDD 연산]-->B[transformation]
A[RDD 연산]-->C[action]

python으로 예를 들면

lines = sc.textFile("README.md")

 

Transformation : 존재하는 RDD에서 새로운 RDD를 만들어낸다.(예제는 python)

예를 들면 표현식과 일치하는 어떤 데이터든 걸러내는것이 있을 때

pythonLines = lines.filter(lamda line: "Python" in line)

 

Action : RDD를 기초로 결과 값을 계산하며, 그 값을 드라이버 프로그램에 되돌려주거나 외부 스토리지(예. HDFS)에 저장 하기도한다.

예를 들면 기존에서 이미 써본적이 있는 액션으로는 첫번째 요소를 되돌려주는 first가 있다.

pythonLines.first()

 

 다음시간에는 spark shell을 이용한 기초 RDD 조작방법에 대해 포스팅 하겠습니다.

 

 


SCALA Trait

 

spark 를 scala 언어로 사용하는데 있어서 scala에 대한 정리도 추가로 하겠습니다.

잘못된 정보가 있으면 댓글로 알려주세요.

scala trait 믹스인

믹스인 ?? 개념이 헷갈린다 .

우선 실습을 하자면

mathFunction trait 은 sumTest 함수는 int 형으로 반환해야한다는 것을 정의하고 있다.

또한 sum 은 mathFunction을 상속 받고 있다.

//mathFunction.scala

trait mathFunction {
  def sumTest(value:Int):Int
  def averageTest(values:Array[Int]):Int
}

class mathLecture extends mathFunction{
  
   override def sumTest(value:Int):Int = {
      3+value
   }
   
   override def averageTest(values:Array[Int]):Int={
     var sum = 0;
     for(i<-(0 to values.length-1)){
       sum += values(i)
     }
     sum/values.length
   }
   
}

 

아래의 코드는 mathFunction 의 trait 타입을 가지는 mathClass 값을 설정 하였다.

mathClass의 리터럴을 sum() 클래스를 지정해주면 , mathClass 는 mathFunction 타입으로 sumTest 함수를 정의만 하고있지만, sum class 에 정의된 sumTest 함수를 사용할수 있다.

//MainScala.scala
object MainScala {
  def main(arg: Array[String]) {
    val mathClass:mathFunction = new mathLecture()

    println("value +3 :  "+mathClass.sumTest(4))
    println("average : "+mathClass.averageTest(Array(1,2,3,4,5)))
  }
}

실행 결과

value +3 :  7
average : 3

 

 

참고 사이트

https://docs.scala-lang.org/ko/tutorials/tour/traits.html.html

 

sequential collection 에 사용하기 유용한 함수

  • zipWithindex
val days = Array("Sunday","Month","Tuesday","Wednesday","Thursday","Saturday")

days.zipWidthIndex.foreach{
    case(day,count) => println(s"$count is $day")
}

결과 값

0 is Sunday
1 is Monday
2 is Tuesday
3 is Wednesday
4 is Thursday
5 is Friday
6 is Saturday
  • zip 두 리스트의 원소들의 쌍으로 이루어진 단일 리스트를 반환

    List(1, 2, 3).zip(List("a", "b", "c"))
    

결과 값

List[(Int, String)] = List((1,a), (2,b), (3,c))

 

 

Typora 문법

Typora Edior 사용기

최근 2년간 블로그를 써야지 써야지 생각만 하고 대충 원노트에 텍스트로 정리하고 안올리고 있었는데, typora를 알게된 이후에 뭔가 계속 typora에디터를 사용해서 계속 정리 하고싶은 마음이 든다 ㅎㅎㅎ

1. Title 만들기

 

"#" 을 붙일수록 크기가 작은 타이틀을 만들수 있다.

Title #title

Title ##title


 

2. 리스트 만들기

 

순서가 없는 경우 "*" 을 쓰고 탭을 누르게 되면 소제목?을 만들수 있다.

  • 사과
  • 딸기
  • 바나나

리스트에서 Enter를 누르면 계속 리스트 기호가 생기는데 Enter를 한 번 더 누르면 빠져나올수 있다.

숫자. 만 붙여도 순서가 있는 목록을 만들 수 있다.

3. 줄긋기

"***" 만 쓰고 Enter를 입력 하면 아래와 같은 줄을 만들 수 있다.


위의 줄은 예제

기호( - )세 번 써도 도 가능 하다.

 

 


4. 상자만들기

다음은 ```를 쓰게 되면 언어에 맞춰서 텍스트를 사용할수 있는 박스를 만들수 있다.

 
 
 

 

팁 : Mac sierra에서 (`) 를 쓰려고한다면 글자를 영어키에서 ₩ 를 사용하면된다 .

 


5. 강조하기

 

문장에서 특정단어를 강조 하고 싶을 때

  • 기울여쓰기

    단어와 글 사이에 *를 써주면 됨.

    문자를 etalic

  • 강조하는 기능

    단어 앞과 끝에 **를 두번 써주면 된다.

    ​ 나는 Typora 를 강조하고있습니다.

     

     


 

6. 이미지 삽입하기

 

이미지

![이미지이름]+()를 쓰게 되면

 

이미지 삽입을 하게되면

다음과 그림과 같은 형식이 나오는데 폴더를 누르게 되면 자신의 컴퓨터에서 사진을 올리는 것이고

url도 가능 하다.

 

 


7. 그래프

 

yes
no
Node1
Node2
Node3
Yes or No?
Yes
No

 

(```) + mermaid 를 쓰게 되면

 

위의 그림처럼 나타낼수 있다.

 

 

 

 

 

 

 

 


'기타?' 카테고리의 다른 글

Fork git 관리 툴  (0) 2020.03.08
SPARK_ENV(1)

SPARK 공부하기 (1) 환경구축

 

Spark 설치 하기

 

 

1. Scala 프로젝트 gradle 이클립스에 설치하기

 

eclipse 사전 설치 해야 할 플러그인

 

File -> new -> Other ->Gradle

 


 

위의 화면 대로 next 를 누르다가 ProjectName을 적어주고 다음 다음 누르고 Finish를 누르면 된다.

그럼 아래와 같은 프로젝트가 생성이 된다.

 

 

 

build.gradle 파일을 선택하게 되면 다음과 같은 초기 코드가 나온다

 

 

기존의 코드가 무엇인지 궁금하여 찾아봤는데,

  • repositories -> jcenter
 

jcenter 란

jcenter는 공개 소스 라이브러리 게시자에게 무료로 제공되는 bintray에서 호스팅되는 공개 저장소입니다. Maven Central에서 jcenter를 사용하는 데에는 여러 가지 이유가 있습니다. 다음은 주요 기능 중 일부입니다.

  1. jcenter는 CI 및 개발자 빌드의 개선을 의미하는 CDN을 통해 라이브러리를 제공합니다.
  2. jcenter는 지구상에서 가장 큰 Java 저장소입니다. 즉, Maven Central에서 사용할 수있는 것은 jcenter에서도 사용할 수 있습니다.
  3. bintray에 자신의 라이브러리를 업로드하는 것은 매우 쉽습니다. Maven Central에서 서명하거나 복잡한 작업을 수행 할 필요가 없습니다.
  4. 친숙한 UI 라이브러리를 Maven Central에 업로드하려는 경우 bintray 사이트를 한 번의 클릭으로 쉽게 할 수 있습니다.

참고 : http://code.i-harness.com/ko/q/17f906f

  • apply plugin : ' PluginName '

    : ''PluginName" 을 Gradle 플래그인으로 적용

  • dependencies : 의존성 관리로 사용될 외부 라이브러리에 대한 의존성을 설정 하는 부분

    의존성을 jcenter에서 받아온다면 repository 에 jcenter를 추가 해주고, maven repository에서 의존성을 받아온다면 mavenCntral()를 추가 해주면된다.

 

 

저는 jcenter 보다 maven Repository를 많이 사용하기 때문에 maven repository를 추가 하였습니다.

 

 

이후에는 프로젝트 디렉토리를 오른쪽 마우스를 눌러서


를 누르면 업데이트한 build.gradle 을 Refresh 해준다.

그럼 거의 세팅은 끝났고 이제 코드를 작성 해야하는데, 프로젝트 root 폴더에서 src/main/scala 디렉토리를 만들어준다.

그리고 Main.scala 라는 파일을 생성 한다.

 

Main.scala

 

생성한 뒤 시작을 하게 되면

 

 

print문이 실행되는 것을 확인할 수 있다.

참고 사이트 :

http://techs.studyhorror.com/gradle-scala-eclipse-project-i-181

https://medium.com/@goinhacker/%EC%9A%B4%EC%98%81-%EC%9E%90%EB%8F%99%ED%99%94-1-%EB%B9%8C%EB%93%9C-%EC%9E%90%EB%8F%99%ED%99%94-by-gradle-7630c0993d09


React Native 는 Flex Box를 사용하여 화면의 위치나 비율을 조정하게 되는데 

아래의 예제는 container가 전체 flexbox 1로 설정 되어있고 그 안에 redView와 yellowView에도 flexbox 가 1로 지정 되어있다.

그러면 container의 1 에서 0.5:0.5 로 비율이 유동적으로 설정된다. 기본값은 세로로 되어있지만 가로로도 바꿀수있다.

추후에 flex box에 대해서만 따로 정리하여 올리겠습니다.



'Front-End > react-native' 카테고리의 다른 글

ReactNative(1)  (0) 2018.02.20

nodejs 홈페이지에서 다운을 받아 


react native 를 설치 하려고였지만,


npm install -g exp 엑스포를 설치 할 때, permission 에러가 난다. 


무슨 이유인지 몰라 node js 를 다시 설치 하였다.


참고한 블로그는 https://hanheesong.github.io/develope/node-js-install/ 다음과 같다


 


React를 시작하게된 이유


작년에 개인적으로 하이드리브 웹 어플리케이션을 만들어 보자고 하여, 대학교 선배의 추천으로 초보자가 하기에는 AngularJS 를 활용하여 만든 ionic을 추천 해주었다. 


프로그래밍 언어는 java 7 프로그래밍과 android 을 한 경험으로 웹도 금방 배울것이라 생각하여 개발 을 시작하였다.


Angular2를 시작하기 앞서 책도 사고 차근차근 시작하려고 하였지만, 버전이 급상승으로 Angular3 로 올라가게되었고 , 그후에도 계속 공부를 하게되면 예전꺼를 


공부하는 느낌이어서 Angaulr 의 기초 만 공부만 하고,  업데이트의 큰 폭이 없는 React로 공부하기로 마음 먹었다.


하지만 시작한지 2개월 째되서 감을 익혀나 갈 때 쯤 Redux 에 대한 공부를 시작하는 도중 취업을 하게 되어 , 회사 관련 업무를 공부를 하다보니 개인적인 프로젝트


를 하지 못했다.


회사 업무시간 이외에 퇴근하고 개인 프로젝트와 자기 개발을 위해서 다시 React 를 공부하는게 좋을 것 같아서 , 그날그날 배운것을 블로그에 정리하려고한다.


 

'Front-End > react-native' 카테고리의 다른 글

ReactNative(Clone Coding)-FlexBox  (0) 2018.02.26

특정 함수가 참조하는 변수들이 선언된 렉시컬 스코프(lexical scope)는 계속 유지되는데, 그 함수와 스코프를 묶어서 클로저라고 한다.




참고문헌

https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Closures


http://chanlee.github.io/2013/12/10/understand-javascript-closure/

복합 이벤트 처리 (Complex Event Processing)에 대한 연구를 하다 보니 오픈 소스는 Esper, Siddhi 기반 으로한 WSO2 등 많은 엔진이 있다.

하지만 데이터스트림을 처리하는데 있어서 오픈 프레임워크는 spark와 storm 대표적이다.

Spark 같은 경우는 Memory를 기반으로 분산 컴퓨팅을 지원한다고 하는데 , 추후에 시간이 있을 때 다시 정리를 하겠습니다.

STORM 같은 경우에는 오픈소스로 오래 되었고, 안정적이라고한다.

아파치 스톰 홈페이지 http://storm.apache.org/index.html

 

Why use Storm?

Apache Storm is a free and open source distributed realtime computation system. Storm makes it easy to reliably process unbounded streams of data, doing for realtime processing what Hadoop did for batch processing. Storm is simple, can be used with any programming language, and is a lot of fun to use!

Storm has many use cases: realtime analytics, online machine learning, continuous computation, distributed RPC, ETL, and more. Storm is fast: a benchmark clocked it at over a million tuples processed per second per node. It is scalable, fault-tolerant, guarantees your data will be processed, and is easy to set up and operate.

Storm integrates with the queueing and database technologies you already use. A Storm topology consumes streams of data and processes those streams in arbitrarily complex ways, repartitioning the streams between each stage of the computation however needed. Read more in the tutorial.

스톰을 쓰는 곳은 트위터, 야후, 엘프, 필립보드, 그룹폰 등등 많은 곳에서 쓰고 있다.

 

Storm 구성하는 기본 요소

Topology, stream, spout, bolt 로 구성

 

Topology

스톰의 분산 연산 구조로 stream, spout, bolt로 구성됨.

spout과 bolt 간의 연관관계를 정의해서 데이터의 관계를 정의해 놓은 것 .

: 하둡과 같은 배치 처리 시스템의 잡과 거의 비슷하지만, Batch Job은 연산의 처음과 끝지점이 명확하게 정의되어 있는 반면에

Storm의 Topology는 죽이거나 언디플로이 할 때까지 계속 동작.

Stream

튜플은 스톰의 기본 데이터 구조체이며, key-value pair의 목록이며, 스트림은 연속된 튜플들로 정의를 함.

스톰 튜플을 CEP의 이벤트로 생각하면 된다.

 

Spout

Spout에서는 데이터를 읽어들이는 데이터 소스(Storm Topology로들어가는 입구)이다. 또한 데이터를 나타내는 tuple을 생성하는데, Tuple은 데이터를 보관하는 단위를 나타낸다.

Adaptor로 동작하는데 데이터 소스와 연결을 맺고 데이터를 튜플로 변환하여 스트림으로 튜플을 내보내는 일을 한다.

Bolt

 

Bolt는 읽어드린 데이터를 처리하는 함수, CEP에서는 연산자, 실시간연산으로 생각하면됨, 입력값으로 데이터 스트림을 받고, 로직에 따라 다른 bolt로 넘겨주거나 종료.

 

위의 그림과 같이 토폴로지는 하나의 spout과 여러 개의 bolt로 이루어진다.

 

https://trenbe.onelink.me/uRnQ/b38091c7

'BackEnd > ETC' 카테고리의 다른 글

[gradle] CreateProcess error=206  (0) 2020.04.25
Git remote: Permission to  (0) 2020.03.08
http 상태 코드  (0) 2020.01.19
CQRS란 ?  (1) 2020.01.19

분산 마리아 디비 구성하기

http://mytalkhome.tistory.com/840

   

   

Spider On MariaDB

http://yakolla.tistory.com/69

   

spider : 기존 테이블 파티션 기능을 확장하여 원격으로 저장하고 읽을수있으며, SQL문과 디비 서버 의 환경 또는 구조를 변경하지않고도 샤딩이 가능함 .

  • 서로 다른 MySQL 인스턴스 테이블을 동일 인스턴스 테이블과 같이 다룰  있다.
  • xa 트랜잭션을 포함한 트랜잭션을 지원하기 때문에 갱신계 DB 클라스터링으로 이용   있다
  • 테이블 파티션을 지원하고 있기 때문에 파티션 룰을 이용하여 동일 테이블의 데이터를 복수의 서버에 분산 배치   있다
  • spider 스토리지 엔진 테이블을 만들면 MySQL 내부에서는 파일로의 심볼릭 링크 같이 하여 리모트 서버 테이블에 테이블 링크를 생성한다
  • 링크처의 테이블 스토리지 엔진에 제한이 없다

       

       

    Mariadb +Galera cluster

    Galera cluster 에 대한 설명

    http://bcho.tistory.com/1062

     

    종합적인 마리아 디비 설치 피피티

    http://www.slideshare.net/junghaelee10/mariadb-58514643



'BackEnd > SQL' 카테고리의 다른 글

public key retrieval is not allowed 해결  (1) 2020.02.15

쓰레드 (Thread)

 

쓰레드는 Thread Id, 프로그래밍 카운터, 레지스터 집합, 스택으로 구성됨

→프로그래밍 카운터란 : 중웅처리장치내부에 있는 레지스터중 하나, 다음에 실행될 명령어의 주소를 가지고있어 명령어 포인터라고도함 .

쓰레드는 같은 프로세스에 속한 다른 쓰레드와 코드, 데이터, 그리고 파일이나 신호와 같은 운영체제 자원들을 공유한다.

단일 쓰레드 : 하나의 쓰레드 즉, 레지스터와 스택으로 표현

다중 쓰레드 : 각각의 쓰레드와 고유의 레지스터 , 스택으로 표현

 

 

다중 쓰레드의 장점 4가지

  1. 응답성(Responsiveness) :
  2. 자원 공유(Resource sharing) : 자동적으로 그들이 속한 프로세스의 자원들과 메모리를 공유
  3. 경제성(Economy) : 프로세스 생성을 위해 메모리와 자원을 할당 하는 것은 비용이 많이 든다. 쓰레드는 자신이 속한 프로세스의 자원들을 공유하기 때문에, 쓰레드를 생성하고 문맥교환(Context Switching)하는 것이 더 경제적.
  4. 다중 처리기 구조의 활용 (Scalability) : 다중 쓰레드의 이점은 다중 처리기 구조에서 더욱 증가할수있다. 다중 처리기 구조에서는 각각의 쓰레드가 다른처리기에서 병렬로 수행될 수 있기 때문.

사용자 쓰레드 : 커널 위에서 지원되며 사용자 수준의 쓸데ㅡ 라이브러리에서 구현 , 커널 지원없이 쓰레드의 생성과 스케줄링 관리 지원

커널 쓰레두 : 쓰레드의 생성과 스케줄링 관리가 커널에 의해서 커널 공간에 행해진다.

'ProgramLanguage' 카테고리의 다른 글

인텔리제이 java compile 오류 해결하기  (2) 2019.06.07

+ Recent posts