본문 바로가기

빅데이터405

[oozie] 우지의 RUNNING 중인 코디네이터 정보 수정 우지는 RUNNING 중인 코디네이터의 정보를 수정하는 방법으로 다음의 옵션이 존재한다. -update: 코디네이터의 프로퍼티, 선언(코디네이터, 워크플로우 정보)을 변경 : name, frequency, start time, end time and timezone 변경 불가 : ex) oozie job -oozie http://주소 -config ./sample.properties -update oozie-C -change: endtime/concurrency/pausetime/status 를 변경 : oozie job --oozie http://주소 -change oozie-C -value endtime=2017-01-20T01:00Z xml 파일의 정보를 변경하기 위해서는 update를 이용하고,개.. 2017. 1. 11.
[hive][error] SemanticException Column "칼럼명" Found in more than One Tables/Subqueries SemanticException Column "칼럼명" Found in more than One Tables/Subqueries 하이브에서 다음과 같은 오류가 발생하는 원인은 조인 테이블이나 서브쿼리의 테이블에 동일한 이름의 칼럼이 있기 때문이다. 이럴때는 테이블의 얼라이어스를 이용하여 어느 테이블의 칼럼인지 명확하게 제시해 주어야 한다. SELECT a.column1, b.column1 FROM aTable a LEFT OUTER JOIN bTable b ON a.column1 = b.column1; 2017. 1. 6.
[hive][hql] hive 2 의 hqlsql 사용해보기 Hive 2.x 버전에서 hpl이 사용가능하다. hql은 Hybrid Procedural SQL 로서 오라클의 프로시저와 동일하다. SQL을 이용하여 IF, FOR 문 등의 절차형 처리를 가능하게 해준다. 여기(http://www.hplsql.org/home)에서 확인이 가능한데, 주의 할 점은 다른 DB의 프로시저에 구현되어 있는 구문들이 모두 구현되어 있지는 않다. 여기(http://www.hplsql.org/doc)에서 각 명령어가 구현되어 있는지 확인해서 처리하면 된다. hive 2.x 에서는 hqlsql이 사용가능하고, 간단하게 다음과 같이 테스트가 가능하다. 다음과 같이 hpl 파일을 저장한다. -- 10까지의 문자 출력 FOR i IN 1..10 LOOP DBMS_OUTPUT.PUT_LINE.. 2017. 1. 3.
[hive] ORC 파일 포맷 ORC(Optimized Row Columnar) 파일 포맷 ORC 파일 포맷은 하이브의 처리 속도를 높이기 위하여 개발 되었다. 하이브가 처음에 사용한 TextFile, SequenceFile 포맷의 처리속도를 높이기 위하여 RCFile 포맷이 개발 되었다. RCFile 포맷은 각 컬럼을 하나의 파일 묶음으로 만들었기 때문에 각 노드에 분산 처리된 데이터를 모으는 비용이 많이 들어가게 된다. 이를 극복하기 위하여 제안된 것이 ORC 파일 포맷이다. ORC 포맷은 칼럼 단위로 데이터를 기록하고, 인덱스를 기록하여 컬럼에 바로 접근할 수 있기 때문에 속도가 빨라진다. ORC 포맷은 호튼웍스의 부사장 오웬오말리가 제안한 것으로 하나의 파일에 칼럼을 json 처럼 중첩구조로 구성할 수 있고, 리스트, 맵과 같.. 2016. 12. 28.
[hive][error] msck repair table 처리시 오류 수정 하이브에서 EXTERNAL 설정으로 생성한 테이블에 디렉토리에 파일을 추가하고 테이블의 파티션 추가를 위해서 "repair table" 명령을 사용하여 처리할 수 있다. 그런데 Hive 1.3 버전 이상에서는 파티션에 허용되지 않는 문자가 있는 디렉토리에 한해서 예외를 반환할 수도 있다. 이럴 때는 다음의 설정을 추가하고 호출하면 된다. set hive.msck.path.validation=ignore;MSCK REPAIR TABLE table_name; 스택오버플로우 - http://stackoverflow.com/questions/40043986/hdinsight-hive-msck-repair-table-table-name-throwing-error하이브문서(Recover Partition 참조) -.. 2016. 12. 20.
[hadoop][tez] 아파치 테즈(Apache tez) 프레임워크 아파치 하둡2.0의 YARN 위에서 동작하는 비동기 사이클 그래프 프레임워크이다. pig, hive와 연동하여 사용하면 기존의 mapreduce에 비하여 성능이 향상되는 효과를 얻을 수 있다. hadoop을 크게 저장을 위한 hdfs와 분산 처리를 위한 mapreduce로 나눌 수 있는데,mapreduce 부분이 처리과정이 분할되면 다음 처리를 위한 데이터를 hdfs에 저장하게 되는데 이 부분을 제거하고 데이터를 메모리에 저장하게 함으로써 처리 성능을 높여 준다. 기존에 stage 사이의 정보가 hdfs에 저장되는 것을 메모리를 활용하여 처리함으로써 성능을 높여 주는 것이다. * stage 가 나누어 지지 않는 작업의 경우 크게 향상 되지 않을 수도 있다. ** MR에 비하여 작업이 오히려 늦어질수도 있.. 2016. 12. 12.
[hive] Hive 2의 특징 올해 초 하이브 2가 발표 되었는데 그 내용을 정리해 본다. * 주요 내용은 LLAP의 적용, 기존 MR 엔진이 deprecated 되고 Tez 엔진이 적용, Spakr 지원 강화가 될 것 같다. New Functionality- HBase metastore (HIVE-9452) – alpha- 현재 메타스토어 구현은 테이블과 파티션이 늘어나면 느려진다. - 실행 계획을 짜는 시간이 더 줄어들게 되면서 더 빨라진다. - LLAP(Live Long and Process) (HIVE-7926) – beta- 새로운 하이브리드 실행모델- caching of columnar data, JIT-friendly operator pipelines, - and reduced overhead for multiple qu.. 2016. 12. 8.
[hadoop][EMR] 하둡 리소스매니저(resource manager)의 기본 포트 하둡은 현재 리소스 사용현황을 확인할 수 있는 웹 페이지를 제공하고, 이 웹페이지의 포트는 yarn-site.xml 파일을 수정하여 변경할 수 있다. yarn-default.xml 의 기본값은 http는 8088, https는 8090 이다. 하둡이 실행된 서버에서 웹앱으로 접속하기 위해서는아래와 같이 alias를 등록해 두고 사용하면 편리하다. alias rm='lynx http://IP:8088' 2016. 12. 7.
[hive][error] java.io.IOException: Not a file 하이브에서 다음과 같이 지정한 경로에 파일이 존재하지 않으면 다음과 같은 오류가 발생한다. Launching Job 1 out of 1Number of reduce tasks is set to 0 since there's no reduce operatorjava.io.IOException: Not a file: hdfs://경로at org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:286) 이럴때는 지정한 경로 하위의 디렉토리까지 읽을 수 있게 지정하면 된다. 다음의 프로퍼티를 설정하면 된다. SET mapred.input.dir.recursive=TRUE; 2016. 12. 1.
[hadoop][hive] 맵리듀스 처리시 오류가 발생해도 무시하고 진행하게 하는 프로퍼티 하둡은 형식이 없는 데이터를 처리하다보니 처리중 오류가 발생할 경우가 있다. 예를 들어 텍스트 파싱을 진행하는 매퍼 작업의 경우 10개중 1개가 실패할 경우 성공으로 인식하여 처리하게 할 수 있다. 이런 경우 다음의 설정값을 이용하여 처리하면 된다. 매퍼작업과 리듀스 작업을 나눠서 설정이 가능하다. [신버전]mapreduce.map.failures.maxpercent=10;mapreduce.reduce.failures.maxpercent=10; [구버전 Deprecated]mapred.max.map.failures.percent=10;mapred.max.reduce.failures.percent=10; 하둡의 버전이 달라지면서 기존의 설정과 이름이 바뀌었기 때문에 하둡 버전에 맞게 사용해야 한다. 2016. 11. 24.
[hive][error] 하이브의 mysql 커넥터 오류 수정 우지를 이용하여 하이브 액션 처리시 다음의 오류가 발생한다. Caused by: MetaException(message:For direct MetaStore DB connections, we don't support retries at the client level.)at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.reconnect(HiveMetaStoreClient.java:263)at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.invoke(RetryingMetaStoreClient.java:88)at com.sun.proxy.$Proxy40.alter_partitions(Unknown Sou.. 2016. 11. 24.
[hadoop] 하둡 처리중 NoClassDefFoundError 오류가 발생하는 경우 하둡과 스내피 압축을 이용하여 맵리듀스 처리중 NoClassDefFoundError 오류가 발생하는 경우가 있다. 지라에서 버그라고 하는데 스내피 압축을 풀지못해서 발생하는 경우도 있다. 이럴때는 입력 파일의 스내피 압축이 정상적인지 확인해 보아야 한다. https://issues.apache.org/jira/browse/HADOOP-12033 2016. 10. 27.
[hadoop] distcp 사용하기 하둡은 대규모 데이터의 이동을 위해서 맵리듀스를 이용한 DistCp를 제공한다. * 여러군데의 파일을 각각의 폴더 위치로 이동시키는 것은 불가* 목적지(destination) 폴더에 파일이 존재하면 파일이 전달되지 않을 수도 있다. 파일 이동시 확인하도록 하자. # distcp 명령hadoop distcp hdfs://source hdfs://destination # update or overwrite# 파일 이름이 동일할 경우 update는 파일사이즈를 비교해서 옮기고, overwrite는 그냥 덮어쓴다. hadoop distcp -update hdfs://source hdfs://destinationhadoop distcp -overwrite hdfs://source hdfs://destination.. 2016. 10. 26.
[hive] 하이브 테이블의 null 값 표현 하이브의 NULL 값에 대한 기본 표현은 \N 이다. 따라서 하이브로 쓴 파일을 읽어보면 \N으로 표현되어 있어 파일을 열었을 때 헷갈릴 수가 있다. 이는 하이브 테이블 설정의 serialization.null.format 를 이용하여 원하는 형태로 수정할 수 있다. CREATE EXTERNAL TABLE people_v1 ( id INT, username STRING, email_address STRING, phone_number STRING, first_name STRING, last_name STRING, middle_name STRING, sex STRING, birthdate DATE, join_date STRING, previous_logins INT, last_ip STRING)ROW FOR.. 2016. 10. 24.
[hadoop] 하둡 3.0의 신규기능과 이레이져 코딩 하둡 홈페이지에 기술된 특징은 다음과 같다. - Minimum required Java version increased from Java 7 to Java 8- Support for erasure encoding in HDFS- YARN Timeline Service v.2- Shell script rewrite- MapReduce task-level native optimization- Support for more than 2 NameNodes.- Default ports of multiple services have been changed.- Support for Microsoft Azure Data Lake filesystem connector- Intra-datanode balancer- Rew.. 2016. 10. 12.
[oozie] python을 이용하여 우지 WebService API 호출하기 우지는 REST API로 잡목록 확인, 잡수행을 위한 웹서비스 API를 제공한다. 웹서비스 https://oozie.apache.org/docs/4.0.0/WebServicesAPI.html HTTP를 이용하여 우지 콘솔 명령을 수행할 수 있으므로이를 이용하여 잡 모니터링, 수행이 가능하다. - 잡 목록 확인http://주소/oozie/v1/jobs?jobtype=coord&len=10000&filter=status=RUNNING - 잡 정보 확인http://주소/oozie/v1/job/[워크플로우|코디에티어ID]?show=info&len=10000 기본적인 API는 위와 같다. * 우지에서 제공하는 DOC에서 정보 확인이 가능하고, 조건등을 자세하게 확인하기 어렵다면 우지에서 기본적으로 제공하는 웹콘솔.. 2016. 10. 10.
[hive][error] MetaException(message:Metastore contains multiple versions) 처리 AWS의 EMR에서 하이브를 이용하다 보면 한번씩 이런 오류가 발생할 때가 있다. 원인은 하이브의 메타스토어 중 VERSION 테이블에 여러개의 정보가 들어가 있어서이다. 해당 테이블에는 버전정보가 하나, 다시말해 1row 만 있어야 하는데 하이브 소스에서 해당 정보가 없으면 insert 하는 로직이 있어서 두개의 정보가 들어가서 오류가 발생한다. 이럴경우 VERSION 테이블에 1번 row 의 데이터외에 나머지 정보는 모두 지워버리면 된다. 하이브의 DB 정보는 hive-site.xml 파일을 확인하면 DB 접속 정보를 알 수 있다. 이 정보를 이용하여 DB에 접속하여 VERSION 테이블의 정보를 지우면 된다. http://www.popit.kr/hive-metastore-contains-multip.. 2016. 10. 7.
[hive][EMR] EMR의 하이브 작업이 쓴 파일 확인하기 EMR 하이브 처리결과가 파일로 저장될 때 파일명은 EMR에서 임의의 값으로 설정해 준다. hdfs://location/175508f3-1524-46ee-88c2-24722c5d5749-000XXX 이로 인하여 같은 파티션에 파일이 저장되면 어떤 잡이 해당 파일을 썻는지 알 수가 없다. 이럴때는 하이브 잡로그를 확인하여 결과를 확인해야 한다. 하이브 테이블 로케이션을 s3로 잡은 경우 파일은 최종적으로 'com.amazon.ws.emr.hadoop.fs.s3n.Jets3tNativeFileSystemStore' 클래스를 이용하여 파일이 쓰여진다. 또한 'org.apache.hadoop.hive.ql.exec.FileSinkOperator' 클래스도 파일 쓰기에 관여하기 때문에 이 클래스의 정보를 grep.. 2016. 9. 30.
[hive] 하이브의 가상 컬럼(virtual column)을 이용하여 파일 내용 삭제 하이브는 0.8.0 버전부터 가상칼럼을 제공한다. - INPUT__FILE__NAME: 파일명- BLOCK__OFFSET__INSIDE__FILE: 파일에서의 offset 이는 다음과 같이 사용하면 된다. SELECT INPUT__FILE__NAME, BLOCK__OFFSET__INSIDE__FILE, column1, column2 FROM table; 가상칼럼을 이용하여 하이브 테이블엥 로드된 파일의 이름을 알 수 있다. AWS는 S3에서의 하이브 delete 명령은 아직 지원하고 있지 않기 때문에,잘 못 입력된 내용을 지우고 싶다면 가상컬럼을 이용하여 파일을 확인하고, 오프셋을 이용하여 위치를 확인한 후 개별적으로 지워야 한다. 2016. 9. 30.
[하이브] 매니지드 테이블과 익스터널 테이블 변경하기 하이브의 테이블은 매니지드(MANAGED) 테이블과 익스터널(EXTERNAL) 테이블 타입이 존재한다. 매니지드 테이블은 테이블을 drop 하면 관리하는 파일도 삭제가 되고, 익스터널 테이블은 파일은 보관된다. 중요한 파일을 저장하는 테이블은 익스터널로 설정하여 실수로 파일이 삭제 되는 것을 막는 것이 좋다. 매니지드 테이블을 익스터널로 수정하는 방법은 다음과 같다. ALTER TABLE 테이블명 SET TBLPROPERTIES('EXTERNAL'='TRUE');ALTER TABLE 테이블명 SET TBLPROPERTIES('EXTERNAL'='FALSE'); 2016. 9. 23.
[hive] skewed 테이블 하이브의 성능을 높이기 위해서 스큐드 테이블을 이용할 수 있다. 스큐드(skewed)란 사전적으로 비스듬하다는 뜻이다. 하이브에서 스큐드 테이블을 선언하면 해당 컬럼으로 많이 들어오는 데이터는 따로 파일을 만들어서 보관하게 된다. 칼럼의 특정 값으로 데이터가 많을때 선언하게 되면 따로 파일을 만들어 주게 되어 성능을 올릴 수 있게 된다. 하이브 매뉴얼에 다음과 같은 내용이 존재한다. 스큐드 테이블을 이용하면 파일을 따로 생성하여 주고, 거기에 리스트 버켓팅까지 추가하면 따로 디렉토리로 만들어 준다고 한다. Skewed Table vs. List Bucketing TableSkewed Table is a table which has skewed information.List Bucketing Table i.. 2016. 9. 12.
[hadoop][hive] 리듀서 개수 조절하는 순서 하이브 잡을 실행하면 나오는 다음의 설정은하이브를 실행할 때 리듀서 개수를 조절하는 순서이다. In order to change the average load for a reducer (in bytes): set hive.exec.reducers.bytes.per.reducer=In order to limit the maximum number of reducers: set hive.exec.reducers.max=In order to set a constant number of reducers: set mapreduce.job.reduces= hive.exec.reducers.bytes.per.reducerDefault Value: 1,000,000,000 prior to Hive 0.14.0; 256 .. 2016. 9. 6.
[hive][개념] 하이브 서버2(hiverserver2), 비라인(beeline) HiveServer2 (HS2)는 클라이언트가 Hive에 대해 쿼리를 실행할 수있게 해주는 서비스입니다. - HiveServer2는 HiveServer1의 후속 버전입니다. - HS2는 다중 클라이언트 동시성 및 인증을 지원합니다.- JDBC 및 ODBC와 같은 공개 API 클라이언트를보다 잘 지원하도록 설계되었습니다. - HS2는 Thrift 기반 하이브 서비스 (TCP 또는 HTTP)와 웹 UI 용 Jetty 웹 서버를 포함하는 복합 서비스로 실행되는 단일 프로세스입니다. HiveServer2 from Schubert Zhang beeline 은 하이브 서버2를 이용하여 원격에서 하이브 쿼리를 실행하기 위한 도구이다. # beeline 커맨드로 실행, hive 실행 폴더에 존재% bin/beeline.. 2016. 8. 26.
[hdfs] Non DFS used 용량 hdfs dfsadmin -report 명령을 이용하여 hdfs의 사용량을 확인할 수 있다. 이때 출력되는 정보를 통하여 디스크이 사용량 확인이 가능하다. 이중에서 Non DFS used 항목의 정보가 궁금하여 다음과 같이 확인해 본다. Configured Capacity = Total Disk Space - Reserved Space.사용 가능 용량 = 디스크의 전체 용량 - 예약 용량 디스크의 전체 용량: hdfs-site.xml에서 지정한 디스크의 총용량예약용량: hfds-site.xml에서 dfs.datanode.du.reserved 로 저징한 용량 Non DFS used = Configured Capacity - DFS Remaining - DFS Used 100G 디스크에서 예약용량을 30G로.. 2016. 8. 25.
[hadoop] HDFS의 유용한 명령어 [파일 정보 확인] ls- 지정한 디렉토르의 lsr- ls 는 현재 디렉토리만 출력하는 반면 lsr 명령어는 현재 디렉토리의 하위 디렉토리 정보까지 출력한다. count- 파일 사이즈, 디렉토리 용량, 폴더 수 등을 확인합니다. [파일 용량 확인]du- 지정한 디렉토리나 파일의 사용량을 확인하는 명령어로, 바이트 단위로 결과를 출력합니다. dus- du 명령어는 디렉토리와 파일별로 용량을 출력하지만, dus는 전체 합계 용량만 출력합니다. [파일 내용보기]cat- 지정한 파일의 내용을 화면에 출력합니다. text- cat 명령어는 텍스트 파일만 출력할 수 있습니다. text 명령어는 압축된 파일도 확인이 가능합니다. - 확장자에 따라 압축방법을 선택하여 보여주기 때문에 확장자가 다르면 올바르게 출력이 되.. 2016. 7. 27.
[oozie] 우지에서 쉴에서 실행한 값을 다음 액션의 파라미터로 전달하기 우지 workflow.xml 에서 현재 액션의 스탠다드 아웃풋(출력)을 다음 액션의 파라미터로 이용이 가능하다. 쉘 액션에 를 입력하고다음 액션의 파라미터에서 ${wf:actionData('shellAction')['dateVariable']}와 같이 이용하면 된다. 쉘 액션의 이름과 출력 파라미터를 잘 조정하면 된다. 쉘 액션은 다음과 같이 출력하면 된다. echo "dateVariable=${dateValue}" http://stackoverflow.com/questions/30873891/passing-parameters-from-one-action-to-another-in-oozie 2016. 7. 26.
[하이브] 파티션 복구 하기(repair partitions) 하이브는 기본적으로 폴더 구조이기 때문에 다른쪽에서 처리한 데이터나, 기존에 백업해둔 파일을 복사해서 사용할 수도 있다. hadoop fs -put 명령을 이용하여 기존 파티션 위치에 동일하게 복사하면,데이터 조회가 가능하다. 이때 기존에 등록되어 있던 파티션인 경우는 상관없지만,추가되는 경우 파티션을 새로 등록해주어야 한다. ALTER TABLE ADD PARTITION 명령으로 개별적으로 추가해 줄 수도 있지만, 추가해야할 파티션이 많은 경우 다음의 명령을 이용하여 한꺼번에 처리하면 된다. MSCK REPAIR TABLE table_name;ALTER TABLE table_name RECOVER PARTITIONS; 위의 두 명령중 하나를 이용하면 테이블의 로케이션을 검색하여 파티션을 추가해준다. A.. 2016. 7. 11.
[에러] 하둡 처리중 could only be replicated to 0 nodes instead of minReplication (=1) 하둡 처리중 다음과 같은 에러가 발생하는 경우가 있다. Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /tmp/hive/blablabla.... could only be replicated to 0 nodes instead of minReplication (=1). There are 3 datanode(s) running and no node(s) are excluded in this operation. 이런 경우 다른 분들의 포스트를 확인해 보면 다들 네임노드를 포맷하라고 되어 있다. 에러의 내용상 데이터노드에 해당 데이터를 .. 2016. 6. 29.
[에러] hive의 INSERT .. SELECT 작업중 No input paths specified in job 에러 하이브에서 작업중 아래의 오류로 인하여 작업이 중단 되는 경우가 있다. cause:java.io.IOException: No input paths specified in job 이럴때는 두가지 경우인것 같다. 1. MR 작업할 위치에 원천 로그 파일이 없을때2. SELECT 문의 WHERE 조건으로 인하여 조회되는 건수가 0건 일때 즉, 입력할(INSERT) 데이터가 없을 때 발생한다. 이럴경우 데이터가 없어도 처리하게 하면, 에러를 내지 않고 처리한다. set hive.merge.mapfiles=false; https://svn.apache.org/repos/asf/hive/tags/release-0.5.0/conf/hive-default.xmlhttps://kidokim509.wordpress.com.. 2016. 6. 29.
스파크에서 문자열 utf-8 형식으로 처리하기 pyspark에서 spakr 2.x 버전을 이용할 경우 utf-8 버전의 파일을 읽어서 처리할 경우 유니코드 오류가 발생한다. 이럴때 다음과 같이 처리하면 된다. ScalaContext를 이용하여 파일을 읽을 때 use_unicode 옵션을 이용하고, map 함수에서 라인단위로 읽을 때 인코딩을 처리해주면 된다. 2016. 6. 20.