Programming/JAVA(16)
-
[JAVA] BloomFilter를 이용해서 데이터 찾기.
map-reduce, 혹은 spark를 사용함에 있어서 가장 비용을 많이 차지하는 부분은 map-reduce의 reduce, spark에서는 join 부분일 것이다.join을 할때는 되도록 데이터 셋을 최대한 줄인 후에 join을 하는 게 가장 바람직하다. 만약에 실제 내가 사용할 데이터는 2억건인데 input으로 들어온 데이터가 400억 건이면 400억 건에 대해 일단 2억건으로 줄인 후 join을 진행하는게 맞다. 그럼 400억 건을 2억건으로 어떻게 줄일까?? 물론 2억건을 메모리로 다 올린 후에 for문으로 찾아도 된다. 그러나 지금 설명하려고 하는 내용은 bloomFilter를 활용해서 데이터를 줄이는 방법을 말하려고 한다. 일단 BloomFilter에 대해 간략히 설명하자면, 해시 테이블을 활..
2018.10.30 -
[JAVA] hadoop guava 버전 충돌
maven guava 버전을 20.0으로 올리고 map reduce 작업을 돌리는데 자꾸 이전 버전을 타는 문제가 발생했다. 문제는 정확히 아래와 같다.목표는 입력 url에서 top Domain을 뽑아내기 위함임.top Domain을 뽑기 위해서 guava의 아래의 함수를 사용함.InternetDomainName.from(host_url).topPrivateDomain().toString();하지만 위의 함수를 map reduce를 통해 돌릴 경우 InternetDomainName{name="domain"} 이런 식으로 객체가 리턴이 됨.아무래도 hadoop의 lib와 dependency lib가 서로 충돌이 일어나서 dependency lib를 못 타는 것 같았다.이를 해결 하기 위해 maven-sha..
2018.05.28 -
[JAVA] maven에 custom jar를 집어넣어 보자.
IntelliJ 환경에서 build를 하면 별로 고민을 안해도 되지만 리눅스 환경에서 maven build를 해야되는 경우 custom jar 파일을 pom.xml 파일에 추가시켜 줘야 maven build시 인식이 된다.대략적으로 설명을 하자면, 개인 로컬 repository를 만들고 해당 repository를 pom.xml에 등록한다.그 후 dependency를 추가해 준다.이렇게 하면 custom jar 파일을 pom.xml에서 인식할 수 있고 쉽게 maven build를 실행할 수 있다.개인 로컬 repository는 아래처럼 pom.xml에 추가하자. localrepository file://${basedir}/repo url 항목을 보면 jar 라이브러리 파일 경로..
2018.03.06 -
[INTELLIJ] Jar 파일 만들기
IntelliJ에서 maven 빌드를 하려고 하는데, 관련 메뉴를 도무지 찾지 못했다.예전 eclipse 같은 경우는 maven install 이라고 따로 팝업 메뉴가 존재했었는데, 그런 것도 없고 그냥 build를 하면 jar 파일 생성은 안되고.. 찾아본 결과 Build artifacts를 하면 된다는 글을 발견.. 실행하려는 찰나.. 어라??? 메뉴가 enable 설정이 되어 있지 않다!!또 열씸히 구글링...아하.. artifacts를 빌드하려면 artifacts를 만들어 주어야 한다..artifacts를 만들기 전에.. 도대체 artifacts가 무엇인지부터 찾아봤다.일반적으로 소프트웨어에서의 artifacts는 개발 프로세스에 의해 생성된 무언가를 나타낸다고 한다. 즉 실행파일이나 중간 산출물..
2017.11.13 -
[JAVA] Runnable 인터페이스와 Thread Class
자바에서 쓰레드를 만드는 방법은 크게 두 가지로 볼 수 있다.1. Runnable 인터페이스를 구현하는 방법 과2. Thread 클래스를 상속 받는 방법이다.Thread 클래스 자체에서 Runnable 인터페이스를 구현하고 있기 때문에 두 가지 방식 중 어떤 것을 써도 무방하다.하지만 대부분 Runnable 인터페이스를 사용한다. 왜??JAVA에서는 C++과는 다르게 다중 상속이 안되기 때문이다. Thread Class를 상속 받을 경우 해당 클래스는 이제 더 이상 상속을 받을 수 있는 조건이 안되지만, Runnable 인터페이스를 상속 받을 경우엔 다른 인터페이스도 상속이 가능하다.아래는 Runnable 인터페이스를 상속 받는 코드와 Thread 클래스를 상속 받는 코드이다.
2013.06.05 -
[JAVA] String을 InputStream으로 바꾸는 방법.
간혹 InputStream을 파라미터로 받는 함수가 있다. 파라미터로 보내기 위해 String buffer를 file에 쓴 후 FileStream으로 읽기엔 너무나 비효율적이고...아래는 String을 InputStream으로 변환하는 코드이다.
2013.05.23