하이브 테이블의 파티션을 제거(drop)하는 문법은 다음과 같습니다. ALTER TABLE table_name DROP PARTITION(partition_name='partitions_value'); yyyymmdd 파티션을 가지는 table을 이용해서 삭제 방법을 알아보겠습니다. # table은 yyyymmdd 파티션을 가지고 있음 hive> show partitions table; OK yyyymmdd=20190220 yyyymmdd=20190221 yyyymmdd=20190222 yyyymmdd=20190223 yyyymmdd=20190224 yyyymmdd=20190225 yyyymmdd=20190226 yyyymmdd=20190227 yyyymmdd=20190228 yyyymmdd=201902..
아파치 커먼즈의 CLI 라이브러리는 프로그램을 실행 할 때 전달하는 옵션값을 파싱하는 라이브러리 입니다. CLI 공식 문서에서 제공하는 Ant 옵션 파싱 예제를 통해 사용방법을 알아보겠습니다. Ant는 다음과 같은 옵션을 가지고 있습니다. ant [options] [target [target2 [target3] ...]] Options: -help print this message -projecthelp print project help information -version print the version information and exit -quiet be extra quiet -verbose be extra verbose -debug print debugging information -emacs p..
아파치 커먼즈는 자바로 구현된 라이브러리가 모여있는 프로젝트 입니다. 아파치 커먼즈 홈페이지에서 다운로드 방법과 사용방법을 확인할 수 있습니다. 자주 사용되는 CLI, Collections, DBCP, StringUtils(lang) 등의 라이브러리가 여기에 포함됩니다. 커먼즈 라이브러리는 다음의 세가지 종류가 있습니다. Commons Proper 현재 공개되어 운영 중인 라이브러리 Commons Sandbox 개발중인 라이브러리 Commons Dormant 현재 활동이 없어 거의 개발 되지 않는 라이브러리 Commons Proper 종류 컴포넌트 설명 최신버전 최신배포일자 BCEL 바이트 코드 엔지니어링 라이브러리 - 바이트 코드 분석, 생성, 자바 클래스 변환 6.3 2019-01-28 CLI CLI..
AWS의 EMR에서 spark-sql을 이용하여 s3를 로케이션으로 가지는 테이블에 데이터를 쓰면 chgrp 오류가 발생합니다. scala> sql("""insert into table s3_table select * from sample1""").show() -chgrp: '' does not match expected pattern for group Usage: hadoop fs [generic options] -chgrp [-R] GROUP PATH... -chgrp: '' does not match expected pattern for group Usage: hadoop fs [generic options] -chgrp [-R] GROUP PATH... 이 오류가 발생해도 데이터를 생성되는 데 아..
현재 사용하고 있는 스파크 2.0.2버전에서 SQL을 이용하여 하이브의 ADD JAR 명령을 실행하면 다음과 같은 오류가 발생합니다. scala> sql("""ADD JAR 'hdfs:///user/a.jar'""")scala> sql("""ADD FILE 'hdfs:///user/b.txt'""") 19/03/22 06:40:35 INFO SparkSqlParser: Parsing command: ADD JAR 'hdfs:///user/a.jar' java.net.MalformedURLException: unknown protocol: hdfs at java.net.URL.(URL.java:600) at java.net.URL.(URL.java:490) at java.net.URL.(URL.java:4..
Java를 이용하여 알고리즘 문제(백준, 토마토, 7576)를 풀어 보다가 스캐너(Scanner)를 이용할 때와 버퍼리더(BufferedReader)를 이용할 때의 속도 차이를 비교해 보았습니다. 동일한 로직을 데이터를 입력 받는 부분만 스캐너와 버퍼리더를 이용하여 시간을 비교해본 결과가 다음과 같습니다. 스캐너시간: 1620 ms 메모리: 335660 KB 버퍼리더시간: 552 ms 메모리: 143148 KB 스캐너를 이용하는 경우 시간은 3배, 메모리는 2배 정도 더 사용하는 것을 볼 수 있습니다. 스캐너- JDK7 소스 [바로가기] 버퍼리더- JDK7 소스 [바로가기] 소스를 확인해 보면 스캐너의 캐쉬는 1024, 버퍼리더는 8192이고, 스캐너는 데이터를 입력받을 때 정규식을 이용하여 입력 값을 ..
코디네이터에서 워크플로우로 넘겨주는 프로퍼티 중에서 일자(DateTime)를 동적으로 변화 시켜주는 함수의 사용법에 대해서 알아보겠습니다. 일자를 동적으로 변환시켜주는 함수는 다음과 같습니다. coord:dateOffset(String baseDate, int instance, String timeUnit)주어진 timeUnit 과 instance 만큼의 시간을 변경baseDate: 2019-01-01, timeUnit: DAY, instance: 1 이면 2019-01-02 반환 coord:dateTzOffset(String baseDate, String timezone)주어진 timezone 값의 시간으로 변경 coord:formatTime(String ts, String format)주어진 form..
배쉬쉘의 프롬프트 스트링(PS)은 4가지가 존재합니다. PS1: 기본 프롬프트 스트링. 기본값은 `\s-\v\$ ' PS2: 긴 문자 입력을 위해 나타나는 문자열. 기본 값은 `>` PS3: select 옵션을 처리할 때 나타나는 문자열 PS4: 실행을 디버깅할 때 출력되는 문자열 기본값은 `+` PS1을 설정하는 방법은 다음과 같습니다. 실행할 때 기본 설정으로 입력하고 싶으면 .bashrc 파일을 수정하면 됩니다. # 유저명@호스트명 경로> export PS1="\u@\h \w> " # 유저명@호스트명 [시간]>export PS1="\u@\h [\$(date +%k:%M:%S)]> " PS1, PS2, PS3, PS4: 설명: 바로가기PS1 설정: 바로가기
함수형 프로그래밍 패러다임은 문제와 그것을 푸는 데 사용되는 도구에 관한 사고의 틀이라고 할 수 있습니다. 많은 현대 언어들은 폴리패러다임(멀티패러다임)이기 때문에 객체지향이면서 함수형일 수 있습니다. 함수형 사고는 도구의 발전에도 영향을 많이 주었습니다. 메이븐 같은 문맥위주의 도구가 현재는 그래들 같은 구성위주의 도구로 바뀌어 가고 있습니다. 모든 것을 구현하지 않고 필요한 것만 가져가다 쓸수 있는 형태로 바뀌어 가고 있습니다. 결론 함수형 사고로 갈아타는 것은 새로운 문법을 배우는 것 이상의 큰 전환이지만, 아주 이롭고 중대한 효과를 볼 수 있을 것입니다.
함수형 프로그래밍에 필요한 사고방식을 위해 이제까지 많은 추상적인 예제들을 사용했습니다. 이제 이를 실제로 적용하기 위한 방법을 알아보겠습니다. 자바8자바8부터 등장한 스트림은 함수형 프로그래밍을 위한 기능을 제공합니다. 스트림을 이용하여 작업을 처리하면 collect()나 forEach() 같은 출력을 발생시키는 함수를 사용하기 전까지 map, reduce, filter 같은 함수들을 조합할 수 있습니다. 그리고 함수형 인터페이스와 옵셔널 클래스를 이용하여 함수형 프로그래밍을 구성할 수 있습니다. 함수형 인프라스트럭쳐 함수형 아키텍처는 불변성이 그 중심에 있습니다. 불변 클래스는 데이터의 변화로 인한 개발자의 걱정을 없애줍니다. 불변 클래스는 생성 시에만 변화가 있기 때문에 테스트가 간다하고, 스레드에..
사용하는 언어의 패러다임이 객체지향이러면 문제의 해법을 객체 지향적으로 찾게 됩니다. 하지만 현대의 스칼라같은 언어들은 멀티 패러다임을 지향합니다. 자바도 람다함수를 도입하면서 함수형 언어의 패러다임을 도입하였습니다. 따라서 문제에 적합한 패러다임을 사용하는 방법을 배우는 것이 더 좋은 개발자로 진화하는 길 중의 하나입니다. 함수형 언어의 디자인 패턴 함수형 프로그래밍에서 디자인 패턴은 다음의 세가지로 나타납니다. 첫째, 디자인 패턴은 언어나 런타임에 흡수 될 수 있습니다. 클로져의 ?. 문법이나, 스칼라의 커링과 같은 문법적 설탕이 이 역활을 지원합니다. 둘째, 패턴들은 그 의미를 보존하면서 다른 의미로 구현될 수 있습니다. 플라이웨이트 패턴은 메모이제이션 같은 기능을 이용하여 구현할 수 있습니다. 셋..
함수형 언어에서의 코드 재사용은 객체지향 언어와는 접근 방법이 다릅니다. 객체지향 언어는 많은 자료구조와 거기에 딸린 연산을 포함하는 클래스를 이용합니다. 함수형 언어는 적은 수의 자료구조(list, set, map)와 공통된 연산(filter, map, reduce)을 제공하고 사용자가 특정한 경우에 맞는 함수를 제공하여 작업을 커스터마이즈함으로써 재사용을 장려합니다. 함수형 언어가 소프트웨어에서 반복되는 문제들의 해결방법을 어떻게 진화시켜 왔는지 알아보겠습니다. 적은 수의 자료구조, 많은 연산자 100개의 함수를 하나의 자료구조에 적용하는 것이 10개의 함수를 10개의 자료구조에 적용 하는 것보다 낫다. -앨런 펄리스 객체지향 언어에서는 특정한 메소드가 구현되 자료구조를 개발자가 만들기를 권장합니다...
함수형 사고로 패러다임을 바꾸면 더 적은 노력으로 더 많은 일을 할 수 있게 됩니다. 함수형 프로그래밍의 많은 구조들이 그렇습니다. 절차형 언어에서 볼 수 있는 문제들을 구현할 때 짜증 나던 것들을 제거해 줍니다. 메모이제이션 메모이 제이션은 연속해서 사용되는 연산값을 함수 레벨에서 캐시하는 것을 말합니다. 메모이제이션은 캐싱을 이용하여 처리합니다. 캐싱을 이용하기 위해서는 주어진 매개변수의 값만을 이용하고, 외부 데이터에 영향을 받지 않는 순수 함수를 이용해야 합니다. 다음은 스칼라에서 피보나치 함수를 캐싱을 이용하여 구현한 예제입니다. 처리 결과를 보면 다음처럼 2번째 처리부터 처리시간이 단축되는 것을 볼 수 있습니다. Time taken: 9275948 ms 832040 Time taken: 280..
컴퓨터의 성능이 향상되고 런타임의 처리 성능이 향상됨에 따라 개발자는 가비지 콜렉션 같은 저수준의 세부사항 조작을 더 이상 신경쓰지 않고, 고수준의 처리 로직만 고민하면 되게 되었습니다. 함수형 언어에서 이를 지원하는 네가지 방식을 살펴 보겠습니다. 반복처리에서 고계함수로(명령형에서 서술형으로)for문을 이용한 반복 처리 대신 map과 같은 함수를 이용하여 반복 처리의 제어를 런타임에 넘길 수 있습니다. 고계함수로 반복 처리할 연산이 무엇인지 알려주면 런타임이 효율적으로 이를 처리하여 줍니다. 병렬처리를 원한다면 par, parallelstream을 이용하면 스레드 관리를 신경쓰지 않아도 처리해줍니다. 멀티스레드 관리는 코드를 짜기도 어렵고 디버그 하기도 어려워서 오류가 많이 발생합니다. 하지만 함수형 ..
RDD, DataFrame, Dataset의 직렬화 개선 스파크는 성능개선을 위해서 프로젝트 텅스텐을 진행하면서 RDD를 DataFrame, Dataset 으로 개선하였다. RDD -> DataFrame(v1.4) -> Dataset(v1.6) -> DataFrame, Dataset 통합(v2.0) 이 개선을 진행하면서 속도를 높이기 위해서 데이터를 더 빨리 가져오기 위해서 자바직렬화를 이용하던것을 kyro로 바꾸고 또, Encoder/Decoder를 직접 개선하였다. 메모리에 있는 데이터를 셔플이 발생하면 다른 곳으로 옮기게 되고, 이 시점에 데이터를 직렬화/역직렬화 하는 비용을 Encoder/Decoder를 이용하여 개선할 수 있었다. (데이타 브릭스 자료) off-heap 모델 또한 스파크의 메모리..
스칼라쉘에서 스파크로 작업을 작업을 하고 처리시간을 확인하고 싶을때는 SparkSession의 time() 함수를 이용합니다. spark.time(실행 함수) spark.time(sql("select * from tbl")) AWS EMR이의 스파크에는 해당 함수가 없어서 SparkSession에서 함수를 가져와서 이용하면 됩니다. 다른 작업에서도 처리 시간을 알고 싶을 때 이용하면 됩니다. scala> time(sql("use db"))Time taken: 12 ms res7: org.apache.spark.sql.DataFrame = [] 위와 같이 처리하면 Time taken으로 처리 시간을 확인할 수 있습니다. SparkSession 스칼라 소스코드: 바로가기
함수형 문법을 익히는 것은 쉽지만, 함수형 사고라는 새로운 패러다임을 익히는 것은 어렵습니다. 새로운 패러다임을 익히는 것은 친숙한 문제에 대한 다른 해답을 떠올릴 능력을 익히는 것입니다. 명령형 처리와 함수형 처리 명령형 처리는 전통적인 프로그래밍 방식입니다. 문제를 명령형 루프내에서 처리합니다. 다음은 자바로 작성한 코드입니다. 리스트로 문자열을 받아서 한자리 문자열은 제거하고, 나머지 문자열은 첫번째 글자를 대문자화한후 스트링으로 만들어 출력합니다. 함수형 처리는 언어에서 제공하는 함수를 이용하여 서술형으로 문제를 처리합니다. 개발자는 문제를 처리하는 방식보다는 세부적인 로직에 집중할 수 있습니다. 다음은 동일한 코드를 스칼라를 이용하여 함수형으로 처리한 예제입니다. filter, map, redu..
한빛미디어, 오라일리에서 발간한 함수형사고(Functional Thinking)의 내용 중 필요한 부분만 정리하였습니다. 함수형으로 사고해야 하는 이유는 무엇인가?현재 모든 언어에서 기본적으로 사용하는 객체지향 개념이 처음부터 사용된 것은 아니다. 1967년 시뮬라 67에서 나온 개념이지만 1983년 C++이 보편화 되면서 널리 사용되었다. 언어의 트렌드가 변화하고 있다. 각 언어들이 함수형 프로그래밍을 지원하고 있다. 자바, C#, 자바스크립트에 람다 함수가 사용되고 있고, 클로져, 스칼라 등 함수형 언어가 등장하고 있다. 하드웨어의 발달로 저수준의 제어 보다는 고수준의 제어에 좀더 집중하는 것이 가능해 졌다. 간결함 함수형 언어는 기존 언어의 명령형 프로그래밍 보다 간결하게 함수형 프로그래밍을 할 수..
보일러플레이트는 프로그래밍에서 상용구 코드를 말합니다. 어떤일을 하기위해서 꼭 작성해야 하는 코드로 자바에서는 클래스의 getter, setter 메소드를 말합니다. 자바에서 getter, setter는 꼭 필요하지만 코드의 길이를 길어지게 하고 개발자에게 의미없는 노동을 강요하게 됩니다. 이부분이 자바의 단점 중 하나입니다. 그래서 스칼라에서는 케이스 클래스를 통해 컴파일러에서 자동으로 작업을 처리할 수 있게 도와줍니다. 자바에서도 롬복을 이용하여 이부분을 자동으로 생성하게 할 수 있습니다. 롬복 참고문서 바로가기롬복 깃허브 바로가기
LLAP는 하이브 2.0에서 신규로 추가된 기능입니다. LLAP는 MR이나 TEZ 같은 실행엔진이 아닙니다. HDFS같은 저장 장치도 아닙니다. 각 노드에서 실행되는 작업 데몬으로 자주 사용되는 데이터를 캐슁하여 작업 속도를 높이는 기술입니다. LLAP는 작업 노드에서 실행되어 계속 유지되면서 작업 데이터의 캐슁, 미리 가져오기(Pre-fetching) 등을 처리합니다. 사용자가 쿼리를 실행하면 그때 마다 데이터를 읽지 않고, LLAP에 저장된 데이터가 있으면 이를 이용하여 처리 속도를 높이는 기술입니다. 하이브 매뉴얼 LLAP -> 바로가기하이브 설정 매뉴얼 LLAP -> 바로가기 LLAP 구조 -> 바로가기 LLAP: long-lived execution in Hive from DataWorks Su..
2018년 5월 발표된 하이브3의 특징에 대해서 알아보겠습니다. 워크로드 관리 추가 하이브 쿼리를 이용해 작업 부하 관리가 가능해 졌습니다. Role, Plan 을 이용하여 쿼리의 수행에 제약을 걸 수 있습니다. 시스템 데이터베이스, 테이블 추가 테이블의 칼럼, 데이터베이스 정보를 확인할 수 있는 테이블이 추가 되었습니다. 오라클의 시스템 DB와 같습니다. 또한, 커넥터를 제공하여 사용자가 JDBC등을 이용하여 직접 조회할 수도 있습니다. 구체화 뷰 추가 Materialized View 가 추가 되었습니다. 집계 데이터 조회시 구체화 뷰를 이용해 좀더 빠른 처리가 가능합니다. 일반적인 뷰는 실제 데이터를 가지지 않고, 논리적 구조만을 가지고 있습니다. 구체화뷰는 실제 데이터를 가지고 있으며, 테이블에 데..
맥용 이클립스에서 git을 이용할 때 No password provided 오류가 발생하면서 깃의 암호가 저장되지 않아서 매번 암호를 입력해야 할 때는 환경설정의 'General' - 'Security' - 'Secure Storage' 에서 'Change Password'를 클릭합니다. 그러면 팝업창이 하나 뜨는데 이때 'No'를 클릭합니다. 이렇게 되면 암호를 초기화 하게 됩니다 . 이후 다시 GitHub에 접속할 때 암호를 물어보는데 이때 암호를 저장하면 됩니다. 이렇게 해도 다음에 로그인할 때 안될 경우가 있습니다. 이때는 Secure Storage -> Contents에서 Git을 삭제하고 다시 아이디를 저장하면 된다.
하이브에서 FROM INSERT 문을 이용하여 한번에 여러곳에 데이터를 입력할때 다음과 같이 사용합니다. [FROM INSERT 문을 이용한 입력 예시] FROM ( SELECT * FROM tbl ) INSERT tableA INSERT tableB [TEZ 엔진 실행 결과] ---------------------------------------------------------------------------------------------- VERTICES MODE STATUS TOTAL COMPLETED RUNNING PENDING FAILED KILLED --------------------------------------------------------------------------------..
빅데이터는 효율적인 데이터 저장을 위해 여러가지 저장 형식이 있습니다. 처음에는 TXT 형식으로 데이터를 저장하였지만, 데이터 저장공간과 처리 속도면에서 문제가 발생하면서 효율적인 처리 방식을 고민하게 되었습니다. 이때 클라우데라의 더그 커팅이 trevini, 호튼웍스의 오웬 오말리가 ORC 파일 포맷을 만들었습니다. ORC는 압축률이 높고, 스키마를 가지고 있으며, 처리속도가 빠르지만 하이브에서만 사용할 수 있었습니다(현재는 아님). 회사가 다르다 보니 통합된 형태로 발전하지 못하고 각각 발전하다 트위터에서 Parquet을 발표 했습니다. Parquet도 ORC와 유사하게 칼럼기반의 구조를 가지고 있습니다. 이제 ORC와 Parquet에 대해서 알아보겠습니다. ORC칼럼 기반 저장 포맷 하이브의 RC ..
- Total
- Today
- Yesterday
- SQL
- airflow
- hbase
- Linux
- nodejs
- 다이나믹
- yarn
- Python
- emr
- SPARK
- 백준
- 정올
- HDFS
- HIVE
- 하이브
- oozie
- 파이썬
- 하둡
- java
- S3
- 오류
- mysql
- bash
- AWS
- 알고리즘
- Hadoop
- build
- error
- ubuntu
- Tez
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |