하둡(Hadoop) 클러스터를 운영하다보면 자주하는 작업은 아니지만, 간혹 데이터노드(datanode)를 제거해야 할 때가 있습니다. 예를 들면 해당 클러스터에 적재하게 될 데이터 양보다 지나치게 많은 데이터노드를 구성하여 일부 데이터 노드를 제거해서 다른 용도의 장비로 사용해야할 수도 있습니다. 혹은 어떤 데이터노드가 너무 노후되어 다른 데이터 노드로 교체해야할 경우에도 데이터노드의 제거 작업이 필요합니다. 이렇게 데이터노드의 제거가 필요할 경우, 제거할 데이터노드가 가지고 있는 데이터를 유실하지 않고 안전하게 데이터노드를 제거하는 방법에 대해 알아보도록 하겠습니다. 더보기 1. 데이터노드 제거 전 확인할 사항 2. dfs.hosts.exclude 사용 설정이 되어 있지 않은 경우 3. dfs.host..
Hadoop 클러스터를 운영하다 보면 Block의 복제 수를 3에서 2로 줄일 필요가 있는 경우도 생기고, 또는 종종 Datanode Disk fault 등으로 인해 설정해놓은 replication factor(dfs.replication 값)보다 블럭 수가 적어지는 Under Replicated block이 발생하는 경우도 있습니다. Under Replicated block이 발생할 경우, 대부분은 자동으로 replication factor를 유지하기 위해 block 복제를 진행하지만, 정말 드물게 자동으로 block이 replication factor까지 복제되지 않는 경우 조치 방법에 대해 알아보려고 합니다. 더보기 1. 파일의 복제 block 수 조정하기 2. Under Replicated Blo..
Hive와 Impala를 함께 사용하다 보면 Hive에서 만든 데이터베이스와 테이블을 Impala에서 사용하는 경우가 자주 발생하게 됩니다. 이때 아주 사소하면서도 자주 볼 수 있는 에러가 있습니다. 더보기 1. 에러메시지 2. 원인 3. 조치 1) 모든 테이블의 메타데이터를 갱신 2) 이미 추가되어 있는 테이블에 대한 메타데이터 갱신 1. 에러 메시지 ERROR : AnalysisException : Could not resolve table reference : 'test_db.test_table' Cloud not execute command : SELECT * FROM test_db.test_table 2. 원인 Impala에서 Meta data를 갱신해주지 않아, Hive에서 생성한 데이터베이스..
지난글에서 Apache Tez는 무엇이고 기존의 Hive 엔진인 MapReduce와는 어떻게 다른지에 대해 얘기했었습니다. 이번에는 실제로 Apache Tez를 다운받아서 구성하고 Yarn을 통해 Tez를 실행시켜 Word Count 예제까지 실행시켜 보려고 합니다. Apache Tez를 이용하기 위해서는 먼저 소스파일을 다운받아서 빌드를 진행해야합니다. 소스파일 다운로드 아래 링크의 Git에서 최신 릴리즈를 다운받으면 됩니다. github.com/apache/tez/releases Releases · apache/tez Apache Tez. Contribute to apache/tez development by creating an account on GitHub. github.com Apache Te..
Hive3 버전으로 넘어가면서 기존의 MapReduce 기반의 쿼리 엔진은 공식적으로 권장하지 않게 되었습니다. Hive3에서 MapReduce를 이용하여 쿼리를 실행시키면 "mapreduce deprecated" 라는 단어를 확인할 수 있습니다. MapReduce 엔진은 이전부터 워낙에 쿼리 속도 문제에 대한 이슈가 많았기 때문에 이로 인한 조치인 것으로 보입니다. 그리고 이렇게 Hive에서 MapReduce를 대체하기 위해 현재는 Apache Tez를 기본 엔진으로 권장하고 있습니다. 이에 이번 포스팅에서는 Apache Tez는 무엇인지에 대해 먼저 알아보려고 합니다. Tez VS MapReduce 우선 Apache Tez는 MapReduce와 동일하게 YARN 기반으로 실행되는 데이터 처리를 위한 ..
지난 글에서는 Erasure Coding(EC)란 무엇이고 EC의 알고리즘과 정책은 어떤 것이 있는지에 대해 이야기해 보았습니다. 2020/11/26 - [IT 정보/Hadoop Eco System] - Hadoop 3에서 Erasure Coding이란 - 1 Hadoop 3에서 Erasure Coding이란 - 1 앞선 글에서는 하둡 3버전을 도입해야하는 3가지 이유에 대해서 이야기 해보았습니다. 2020/11/15 - [IT 정보/Hadoop Eco System] - Hadoop 3 버전을 도입해야하는 3가지 이유 Hadoop 3 버전을 도입해야하는 3가 joonyon.tistory.com 이어서 이번 글에서는 그렇다면 우리는 EC를 사용하는 것이 정말 기존의 3 copy 복제 정책보다 좋기만 한 것..
앞선 글에서는 하둡 3버전을 도입해야하는 3가지 이유에 대해서 이야기 해보았습니다. 2020/11/15 - [IT 정보/Hadoop Eco System] - Hadoop 3 버전을 도입해야하는 3가지 이유 Hadoop 3 버전을 도입해야하는 3가지 이유 하둡은 1.0을 시작으로 2.0버전을 넘어 현재는 3.3버전까지 릴리즈가 되어 있습니다. 이렇게 많은 버전업이 진행되는 기간 동안 더 이상 하둡은 새로운 것이 아닌 빅데이터의 기반으로 자리 잡았 joonyon.tistory.com 이어서 이번에는 Erasure Coding에 대해 알아보도록 하겠습니다. 이번 Erasure Coding에 대한 글은 한번에 담기에는 부담이 있어 두 개의 포스팅으로 나눠서 이야기하려 합니다. 이번 글에서는 Erasure Cod..
하둡은 1.0을 시작으로 2.0버전을 넘어 현재는 3.3버전까지 릴리즈가 되어 있습니다. 이렇게 많은 버전업이 진행되는 기간 동안 더 이상 하둡은 새로운 것이 아닌 빅데이터의 기반으로 자리 잡았습니다. 그리고 아직까지는 많은 곳에서 하둡 3 버전보다는 2버전을 많이 사용하고 계시리라 예상됩니다. 그래서 이제는 하둡 2버전에서 3버전으로 넘어가야하는 이유에 대해 이야기해보려 합니다. Erasure Coding 하둡이 3버전으로 업그레이드 되면서 가장 눈에 띄었던 특징 중에 하나는 Erasure coding(EC)이 도입되었다는 것입니다. 기존 2버전의 하둡은 Hot data든, Cold data든 모두 같은 복제 정책(기본 3copy)을 가지고 보관해야만 했습니다. 이런 3copy 데이터 보관은 Fault..
안녕하세요. 린아저씨 입니다. 제가 처음 접한 하둡은 아파치 바닐라 하둡 버전이었지만, 실제 프로덕트 환경에서는 주로 Cloudera 배포판 하둡을 구축하고 운영해 왔습니다. 현 직장으로 이직을 하면서 이미 구축해 놓은 Cloudera 클러스터를 운영하게되면서 설치를 꽤 오래 안하게 되었습니다. 그래서 오늘은 오랜만에 설치 과정을 리마인드 할겸 Cloudera Manger를 이용해서 하둡 설치과정을 상세하게 포스팅하려고 합니다. 기존에 CDH5 버전을 설치해보신 분이라면 더욱 쉽게 하실 수 있으실 것입니다. 단 CDH6로 오면서 CM 스키마 생성 스크립트 위치등 소소한 몇가지가 변경된 부분이 있어 이 부분만 주의해 주시면 됩니다. 1. 설치 전 준비사항 모든 작업은 root 계정으로 진행 모든 노드의 r..
안녕하세요. 린아저씨 입니다. 오늘은 HDFS Corrupt 파일 확인 및 제거 방법에 대해 포스팅해보려고 합니다. 하둡 클러스터를 관리하다 보면 잦은 현상은 아니지만 간혹 HDFS 블록이 손상되는 경우가 발생하곤 합니다. 이때 이 손상된 블록을 Corrupt 파일 블록이라고 합니다. HDFS는 기본적으로 3 Copy를 유지하기 때문에 Corrupt 블록이 발생하더라도 데이터에 영향을 주지는 않습니다. 남아있는 2 copy의 블럭으로도 데이터를 읽는데는 아무 문제가 없기 때문입니다. 하지만 Corrupt 파일 블럭이 존재하면 이로 인해 정상적이 3 copy 블럭이 아닌 정상적인 2 copy 블럭과 깨진 1 copy 블럭이 존재하기 때문에 Corrupt 파일 블럭을 제거해주어야 합니다. 1. HDFS Co..
Spark 를 사용하면서 Jupyter Notebook에 연동해서 사용하기도 하지만, Cli 환경에서 바로 Spark-shell에 붙어서 사용하는 경우 많다. 이때, 발생할 수 있는 Warning 중 두가지 사례에 대해 정리하려고 한다. 현재 화면은 Spark 1.6 버전이지만, Spark 2.X 버전에서도 동일하게 발생할 수 있다. 1) 경고 메세지 Failed to created SparkJLineReader 원인 spark-shell을 실행시키는 유저의 OS 홈 디렉터리 문제로 Permission denied의 경우 유저 홈 디렉터리에 접근권한이 없는 경우 발생. 아예 홈디렉터리 없는 경우에는 No such file or directory 라는 메시지 발생. 해결 spark-shell 유저의 OS ..
Hadoop User Experience의 약자인 Hue는 Hadoop 클러스터와 함께 사용되는 웹 기반 사용자 인터페이스입니다. Hue는 Hive Query Edit 및 Spark Job 등을 실행할 수 있고, HDFS 파일 Browsing 등이 가능합니다. 1. Identity provider 설치를 위해 WSO2 Identity Server 설치 1) https://wso2.com/identity-and-access-management/ 에서 wso2is-5.8.0.zip 다운로드 /opt/cloudera/security/saml 위치에 압축풀기 불러오는 중입니다... # cd /opt/cloudera/security/saml/wso2is-5.8.0/repository/conf # find ./ -..
1. Apache Zeppline 다운로드 및 압축 풀기 https://zeppelin.apache.org/download.html Download Note: From Zeppelin version 0.6.2, Spark interpreter in binary package is compatible with Spark 2.0 & Scala 2.11 and Spark 1.6(or previous) & Scala 2.10. You can use even different version of Spark at the same time if you set different SPARK_HOME in interp zeppelin.apache.org wget http://apache.mirror.cdnetworks.c..
*Cloudera Engineering Blog에 기재된 내용 입니다. 출처 : https://blog.cloudera.com/blog/2019/06/hdfs-erasure-coding-in-production/?fbclid=IwAR1agLV-T50SV2MtWyKTDzFIBPoonR-NTR5CWdl7szJ9BAvcaME1QGR80vg Apache Hadoop 3.0에서 제공되는 주요 기능인 HDFS Erasure coding(EC)는 CDH 6.1.x 이상의 버전에서도 사용할 수 있으며, Spakr 및 MapReduce와 같은 특정 응용 프로그램에서 사용할 수 있습니다. 이전 버전의 HDFS는 여러 데이터 복사본(기존 스토리지 array의 RAID1과 유사)을 복제함으로써 Fault tolerance를 ..
Third Party 애플리케이션을 이용하여 JDBC로 Impala에 쿼리를 던지다 보니 특정 Impala Daemon에 커넥션이 집중되는 문제가 발생하였습니다. 이를 해결하기 위하여 HAProxy를 이용하여 Impala에 대한 커넥션을 Load Balancing 해주었습니다. 이를 통해 얻게된 이점으로는 1. Impala를 이용하는 애플리케이션들이 특정 Impala Daemon에 접근하지 않고 공통적인 Proxy 서버를 통해서 접근하게 됩니다. 2. Coordinator Only로 지정된 Impala Daemon들에게만 Least connection 또는 Round robin 방식으로 커넥션을 분배할 수 있습니다. 3. 특정 Impala Daemon에게 과도하게 부하가 걸리는 것을 방지할 수 있습니다...
다음 내용은 charsyam 님께서 블로그에 올려주신 내용을 토대로하여 하였습니다. (https://charsyam.wordpress.com/2019/04/26/%EC%9E%85-%EA%B0%9C%EB%B0%9C-hive-metastore-%EC%97%90%EC%84%9C-location%EC%9D%80-%EC%96%B4%EB%96%BB%EA%B2%8C-%EA%B4%80%EB%A6%AC%EB%90%A0%EA%B9%8C/?fbclid=IwAR12jAsZA4CxAKD6dVulsj9WCxdclcr4sY38DcfZ0tU2xXNroSwklyuHZR4) CREATE TABLE `test1`( `id` bigint PARTITIONED BY ( `datestamp` date) ROW FORMAT SERDE 'org...
어느덧 Hadoop 3.1 까지 릴리즈가 되었고, Cloudera도 Hadoop3.0 버전이 들어가 CDH6.x 버전이 릴리즈 되었습니다. 이 시점에서 Hadoop 3 버전은 Hadoop 2 버전에 비해 무엇이 달라졌을지 한번 정리해 보려고 합니다. 1. Java Version Hadoop 2버전에서는 Java7 이상이라면 모두 지원을 하였습니다. 하지만 Hadoop 3 버전부터는 반드시 Java 8 이상의 버전을 사용하셔야 합니다. 참고로 Cloudera에서는 현재까지는 반드시 Oracle JDK8 이상을 사용하길 권고하고 있습니다. 2. Erasure Coding 도입 Hadoop 2까지 Hadoop은 HDFS에서 Fault tolerance를 위해 Replication factor 3의 3배수 블럭..
Transforming Data Using RDDs1.weblog 데이터를 RDD로 만든다logRDD = sc.textFile("/loudacre/weblogs/")2.logRDD 에서 JPG 파일에 대한 요청만 필터링한다. jpglogsRDD = logRDD.filter(lambda line: ".jpg" in line)3.take action을 이용해서 jpglogsRDD에서 데이터 다섯줄만 반환한다. jpgLines = jpglogsRDD.take(5)4.반복문으로 jpgLines를 출력한다. for line in jpgLines: print line 217.150.149.167 - 4712 [15/Sep/2013:23:56:06 +0100] "GET /ronin_s4.jpg HTTP/1.0" 20..
Read and Display Data from a Text File 1.frostroad.txt 파일을 RDD로 정의한다. myRDD = sc.textFile("/loudacre/frostroad.txt") 2.Spark는 아직 file을 읽는 않았다. spark는 RDD에서 action을 수행하기 전까지 file을 읽지 않을 것이다.count action을 사용해서 RDD에 몇개의 요소가 들어있는지 세어보아라. myRDD.count() 23 3.collect를 호출하여 RDD에 있는 모든 데이터를 Spark driver로 반환해라. 파이썬의 경우 list of strings 데이터 타입을 반환할 것이다. lines = myRDD.collect() 4.lines에 담겨있는 collection을 출력한다..
Working with DataFrames and SchemasdevDF = spark.read.json("/loudacre/devices.json").show(3) +--------+------+--------+-----+--------------------+ |dev_type|devnum| make|model| release_dt| +--------+------+--------+-----+--------------------+ | phone| 1|Sorrento| F00L|2008-10-21T00:00:...| | phone| 2| Titanic| 2100|2010-04-19T00:00:...| | phone| 3| MeeToo| 3.0|2011-02-18T00:00:...| +--------+---..
Exploring DataFrames Using the Apache Spark Shell devDF = spark.read.json("/loudacre/devices.json") Spark shell에서 다음과 같이 DataFrame으로 HDFS에 있는 JSON 파일을 읽어올 수 있습니다. devDF.printSchema() root |-- dev_type: string (nullable = true) |-- devnum: long (nullable = true) |-- make: string (nullable = true) |-- model: string (nullable = true) |-- release_dt: string (nullable = true) Spark는 Lazy하기 때문에 앞서 rea..
Pyspark Shell과 Jupyter notebook 연동하기 환경 변수 설정 Pyspark Shell과 Jupyter notebook을 연동하기 위해서는 당연하지만 우선 Spark와 Jupyter notebook이 설치 되어 있어야 한다. 이를 위해 spark는 cloudera 배포판을 이용하여 Spark2.2 버전을 설치하였고, Jupyter notebook은 Anaconda로 환경을 구성 하였다. Pyspark shell과 Jupyter notebook을 연동하기 위해서는 환경변수 설정을 해주면 간단하게 가능하다.그리고 나와 같이 Cloudera 배포판을 이용하여 spark를 설치한 경우에는 Hue의 default 포트가 8888로 Jupyter notebook default 포트와 겹치므로 J..
Cloudera 배포판 HUE Admin 계정 생성 및 비밀번호 변경 Cloudera 배포판에서 HUE Admin 계정 패스워드를 잊어버렸을 경우 HUE WEB UI에서 사용자 관리를 할 수 없다. 따라서 shell에 접속해서 새로운 HUE Admin 계정을 생성해 준 뒤에 패스워드를 잊어버린 계정에 대한 패스워드도 재설정 가능하다. 이를 위해 HUE 명령어를 사용해야 하는데 Cloudera 배포판 경우에는 /opt/cloudera/parcels/CDH/lib/hue/build/env/bin 위치에서 사용가능하다. 단, 명령어는 root 계정으로 실행해야한다. ■ Admin 계정 생성 ( Superuser 생성 ) Cloudera 배포판에서는 CM이 관리하고 있기 때문에 --cm-managed라는 옵션을..
Apaceh Spark2 Cloudera 배포판 설치 ⊙ Spark 2 요구 사항 CDH 버전 다음과 같이 각 Spark2 릴리즈에 따라 지원하는 CDH가 다르다. 또한 클라우데라의 권고사항에 따르면 Hive와의 호환성 문제로 인해 Hive 기능을 사용하는 경우에는 Spark2.0 Release2 이후 릴리즈를 사용하는 것이 좋다. 출처 : https://www.cloudera.com/documentation/spark2/latest/topics/spark2_requirements.html CM 버전 Cloudera Manager 버전의 경우 5.8.3 이상의 버전을 사용한다면 어떤 spark2 릴리즈를 설치하더라도 무관하다. Scala 2.11 Requirement Spark2에서는 오직 Scala 2..