일 년 전 · kadensungbincho 님의 답변 업데이트
Apache spark가 무엇인가요?
데이터 분석가 준비중인 대학생입니다 올해3학년이고 python이랑 r은 써서 기본적인 통계분석과 머신러닝정도는 할줄압니다 채용공고를 보다보니 아파치 스파크나 에어플로우 등을 능숙하게 사용할줄 아는게 좋을거 같아서 공부를 해보려는데 뭐가 뭔지 모르겠습니다 지금까지는 이론 배우고 코랩 rstudio 실습 이정도만 해서 배우는데 문제는 없었는데 인터넷에 검색해도 갑자기 확 어려운 개념들이 있고 파이썬 다룰줄 아는 능력이랑 무슨 상관이 있는지 감이 안잡힙니다 어떤 느낌인지 간단하게 설명해주실수 있으신가요? 추가로 어떤걸로 공부하면 좋을지 추천부탁드립니다. 감사합니다.
개발자
#apache
#spark
#python
답변 3
댓글 0
추천해요 2
조회 447
일 년 전 · 고만 님의 새로운 댓글
어떤 경력을 갖춘 백엔드 엔지니어가 되어야 데이터 엔지니어로의 직무 전환 가능성이 있을까요?
궁금한 게 생겨 구글링을 하던 중, 커리어리를 알게 돼서 글을 읽어 보다가 최근 생긴 고민에 대한 답을 얻을 수 있을지도 모른다는 생각이 들어 가입하였습니다. 그 고민은 "어떤 경력을 갖춘 개발자를 목표로 할 것인지.." 입니다. 현재는 대학교를 졸업하자마자 it와 관련 없는 회사에서 2년 가까이 재직 중 입니다. (그저 컴퓨터와 프린터가 있다 정도..) 그러다 올해 9월 말 즈음 어떤 계기로 인해 '회사를 그만두게 된다면 현재 경력을 살려 나만의 무기로 다시 취업할 수 있을까?'를 고민하게 되었고 경쟁성이 낮다는 판단 끝에 이직 준비를 시작했습니다. 지금은 프로그래머스에서 얼마 없는 SQL 문제는 다 풀고, 파이썬으로 풀어보고 있는데 다양한 글과 채용 공고를 보다가 입사 최저 조건이 코딩 테스트 합격인 것 같아서 일단 어느 기업이든 최저 합격이나 해보자는 마음으로 풀고 있습니다. 처음 이직을 결심 했을 때 유튜브/구글/인프런을 이용해 잡다하게 따라해 보고 데이터 엔지니어를 목표로 삼았는데 지금 알아보니 데이터 엔지니어가 다른 직군에 비해 신입을 안 뽑는다는 말이 많더라구요. (* 데이터 엔지니어로 정했던 이유는 불규칙적인 것을 규칙적으로 만드는 것, 어떤 데이터든지 간에 누군가가 필요로 하는 방식으로 가공하여 전달한다는 것이 데이터의 흐름을 전체적으로 제어하는 것 같아 매력적으로 보였기 때문입니다.) 신입보다는 백엔드에서 데이터 엔지니어로 전환하는 게 대부분이래서 백엔드를 목표로 공부하게 될 것 같은데 백엔드도 범위가 방대해서 어떤 공부를 해야할지 고민입니다..ㅜ 지금은 그저 막연하게 데이터를 많이 다룰 것 같은 회사에선 어떤 백엔드 역량을 갖춘 신입을 찾는지 채용 공고만 바라보고 있네요.. 여건상 가장 빠르게 고민해야 할 것은 국비교육, 부트캠프의 코스 선택이 아닐까 싶습니다. 데브코스 중 백엔드 코스와 데이터 엔지니어링 코스 사이에서 고민 중인데 아마 백엔드 코스를 신청하지 않을까.. 싶지만 그래도 고민되네요. a. 데이터 엔지니어링 코스를 교육 받아도 백엔드 신입 채용 가능성이 있을까요? (데이터 엔지니어 신입이면 더 좋겠지만..!) b. 얌전히 백엔드 코스를 선택할까요? b-1. 만약 백엔드라면 어떤 부분에서 전문성을 기르면 좋을까요? 해 본 걸 남기는 것도 혹시나 도움이 될까 싶어서 적습니다..! - html, css를 따라 입력해 보며 웹(?) 상에서 출력되는 것 변경해보기 및 아주 간단한 페이지 생성 (제일 재미없었기에 웹에 대한 흥미가 사라졌습니다.) - python, c, java, sql 문법 공부 (문제 풀 수 있는 언어는 사실상 python, sql 두 가지 입니다.) - 간단한 프로그램 리버스 엔지니어링 (얕은 어셈블리 + 자료구조 중 스택에 대한 약간의 이해..? 재밌었어요.) - 파이썬으로 특정 사이트의 리뷰를 크롤링하고 원하는 리뷰만 출력 (조금 엉성했지만 실전에 바로 사용할 수 있어서 그런지 흥미로웠습니다.) - 데이터셋을 내려 받아 pyspark, sparkSQL을 이용하여 스스로 기준을 만들어 임의의 테이블 생성해 보기
개발자
#백엔드
#데이터엔지니어
#백엔드개발
답변 1
댓글 1
조회 920
일 년 전 · 우태강 님의 새로운 답변
Spark 작업 빠르게 결과확인하는법?
안녕하세요. spark쓴지도 벌써 2년인데, 아직도 대용량 처리할때마다 pandas때 습관때문에 자꾸 중간결과물들을 확인하는 버릇이 고쳐지질 않네요.. 혹시 선배님들은 spark 쓸때, 중간결과물들 빨리 확인하거나 하는 방법 , 노하우 있으신가요?
개발자
#spark
답변 1
댓글 0
조회 68
일 년 전 · 익명 님의 질문
Spark 데이터 파이프라인 클론 코딩 조언 부탁드립니다.
파이썬, Spark로 ETL 파이프라인과 DB연동까지 할 수 있는 클론 코딩을 찾고 있는데 추천해 주실 수 있나요? 데이터 분석 & 엔지니어 교육을 수료했지만, Spark로 ETL 파이프라인에 대해 배우지 않아서, 혼자 클론코딩으로 공부하고, 개인 프로젝트를 진행하려고 합니다. 도움되는 답변 주시면 감사하겠습니다.
개발자
#spark#python#mysql#hadoop#클론코딩
답변 0
댓글 0
조회 68
2년 전 · 커리어리 AI 봇 님의 새로운 답변
데이터 수집 시스템 조언 부탁드립니다..
안녕하세요. 현재 데이터분석가 인턴으로 회사에 들어간지가 한달이 조금 넘었습니다. 현재 회사에서 분석이 아닌, 직접 데이터를 수집하는 작업을 하고 있습니다. 제가 분석만 하다보니, 데이터를 수집하고 저장하는 작업을 처음해보고 사수도 따로 없다보니 조언을 구할 곳이 없어서 이렇게 게시물로 조언을 요청드립니다.. 지식이 부족해 다소 어렵게 설명을 드려도 이해 부탁드리며, 제 글을 보고 “저 친구는 왜 저렇게 비효율적으로 하지? 이렇게 하면 좋을텐데”라는 생각이 드신다면 바로 댓글이나 쪽지 부탁드립니다. 제가 처음 올려봐서 쪽지 기능이 있나 모르겠네요.. 먼저, 간단하게 제가 진행하고 있는 데이터 수집 절차를 설명드리겠습니다. 1. 컬럼이 한개인 4GB가 조금 넘는 데이터를 수집 코드에 불러와야 한다. 해당 데이터에는 도메인 주소가 담겨 있다. 2. 내 수집 코드는 불러온 데이터를 한행씩 조회하면서 수집을 진행한다. 3. 한 행에 있는 도메인 주소에 순서대로 http 접속을 해서 해당 도메인 주소가 사전에 설정한 특정 조건을 만족하면, 해당 도메인 주소와 사이트에 접속해서 추출한 정수형 값을 DB에 저장한다. 4. 즉, 4기가의 데이터를 불러와 한 행씩 조회해가면서 실시간으로 데이터를 db에 수집하는 코드다. 5. 24시간 동안 코드를 돌리는 수집 예상 기간은 3개월 정도이다. 다음으로는 조금 구체적인 진행 사항을 말하겠습니다. 밑에서부터 길어지니, 바쁘신 분들은 위에 주요 절차만 보시고 조언 주시면 감사하겠습니다. 1. 파이썬만 사용할 줄 알기 때문에, 파이썬을 사용하여 class로 만들어 수집 코드를 짰다. 2. 데이터의 양이 많아서 메모리 부족 오류가 빈번하게 나타나, 하둡과 아파치 스파크를 이용해봤다. 내가 조회할 데이터 파일을 하둡 HDFS에 업로드 한다음에, 아파치 스파크 클러스터를 구축했다. 그리고, pyspark 모듈을 이용해 파티션을 나눠 데이터를 불러왔다. 파티션으로 받아온 값을 리스트로 변환하여 순서대로 해당 도메인 주소로 접속하는 반복문을 진행하면서 데이터를 수집했다. 즉 파티션으로 데이터를 쪼개서 1번 파티션부터 n번 파티션까지 각각 파티션 내부에 도메인 주소 리스트가 반복문을 진행된다고 보면 된다. 각 파티션이 다른 파티션으로 전환되는 과정도 반복문으로 처리했다. 하나의 파티션 마다 내가 만든 class(도메인 리스트를 인자로 받는다)가 한번씩 실행된다고 보면 된다. 3. 수집 속도가 너무 느려서 class에 있는 수집 메소드를 멀티 스레드 방식을 이용해서 수정해주었다. 수집 속도가 매우 빨라졌다. 4. 기존에는 aws의 클라우드 db(dynamo db)를 사용했지만, 과금 문제로 인해 로컬에 db를 설치하기로 했다. 쓰기 속도가 매우 빠른 redis db를 선택했다 5. 위에서 설명한 반복문을 돌면서 조건에 일치한 도메인 주소와 정수 값은 한 행씩 redis db에 key(도메인주소) value(정수값) 형식으로 저장하도록 코드를 만들었다. 이 과정도 class 내부에 포함되어 있다. 6. redis는 on memory db이기 때문에 대용량 데이터를 영구적으로 저장하고 분석하기에 적합하지 않다고 판단해서 1시간마다 redis에 있는 데이터를 postgresql db로 옮겨주는 코드를 따로 만들었다. postgresql db에 미리 redis에서 옮겨갈 테이블을 생성해두었다. redis의 key였던 도메인 이름을 첫 번째 필드에 프리이머리 키로 저장했고 value인 정수 값을 2번 째 필드에 값으로 넣어줬다. 그리고, 마지막 필드에는 자동으로 데이터가 저장될 때, 현재 시간이 넣어지게 테이블을 만들었다. 총 3개의 열로 구성된 테이블에 1시간에 한번씩 redis에 저장해두었던 데이터가 옮겨간다고 생각하면 된다. 7. 처음 redis에 데이터를 저장할 때 ttl을 설정해서 1시간 10분이 지나면 redis db에서 데이터가 자동으로 소멸되도록 설정했으며, 만약 postgresql에 중복된 데이터가 들어간다면 자동으로 무시하고 다음 작업을 진행하도록 테이블 설정을 해줬다. 즉, 실시간으로 데이터가 수집되고 자동으로 시간이 지나면 데이터가 소멸되는 redis db에서 1시간마다 한번 postgresql로 옮겨주는 코드를 따로 만들었다. 8. 수집 코드를 spark-submit 명령문으로 실행해주었다. spark-submit 명령어 앞에 nohup을 해줘서 백그라운드에서 코드가 실행되게 해줬고, 로그 결과를 따로 파일을 만들어 저장되도록 했다. 그리고 파이썬 실행 파일 내에서도 로그를 입력하는 코드를 만들어서, 도메인의 http 접속이 성공했는지의 여부를 로그 파일에 실시간으로 입력되도록 했다. 예를 들어, http 접속이 잘 된 도메인 주소는 로그에 “INFO 도메인 주소: success” 이렇게 기록하고, 타임아웃 에러, 접속 에러, redirect 오류, db 저장 오류는 모두 종류별로 예외 처리해서 로그에서 기록되도록 코드를 구성했다. 파이썬에서 자체적으로 로그를 기록한 파일은 수집코드를 실행하면서 파티션이 전환될 때마다 하나씩 생성된다. 이제 이렇게 제가 실행할 코드는 24시간 내내 수집을 진행하는 코드 하나와 1시간에 한번 데이터를 옮겨주는 스케줄러 코드로 총 2개가 됩니다. 저는 이 코드와 수집 환경을 만들기 위해 모두 도커를 활용하였으며, 사용한 컨테이너와 부가 설명은 다음과 같습니다. spark-master: 하둡과 스파크 클러스터를 구축하는 컨테이너로 standalone모드로 spark-summit 명령어로 파이썬 파일을 실행해주었다. --conf 옵션으로 메모리, 하트비트 간격, 파티션 수 를 지정해주었다. 스파크와 하둡을 처음 사용해봐서 약간의 개념만 있는 상태에서 돌려보니 아직도 세부 설정을 제대로 이해하지 못했다. 결국 worker를 1개 생성해서 파이썬 파일을 처리하도록 하였다. 현재 대다수의 오류가 이 컨테이너에서 발생한다. redis: spark-master에서 실시간으로 실행되고 있는 수집 코드에서 선별된 데이터들이 redis 컨테이너에 있는 redis db에 저장된다. postgresql: 1시간에 한번 redis에 있는 데이터를 옮기기 위해 postgresql 컨테이너를 생성했다. schduler: 1시간에 한번 postgresql 컨테이너에서 작동하고 있는 postgresql db에 redis 데이터를 옮겨주기 위한 스캐줄러 코드를 실행할 컨테이너다. redis-monitor: 실시간으로 redis db를 모니터링 하기 위해 redis-monitor 컨테이너를 생성하여 웹에서 모니터링 툴인 Redis-Stat에 접속한다. postgre-monitor: 마찬가지로, 실시간으로 postgresql db를 모니터링 하기 위해 생성한 컨테이너로 웹에서 Pgadmin4를 사용할 수 있다. 이렇게 총 6개의 컨테이너를 생성하여 내 수집 코드를 실행했는데, 여기서 많은 문제가 발생했습니다. 제가 가진 의문과 문제를 나열하자면 다음과 같습니다. 1. 먼저, 수집 코드를 실행한 다음에 스케줄러 코드를 실행해주었는데, (서로 독립된 컨테이너에서 실행) 두 코드가 DB에 동시에 접속할 때, 충돌이 일어날 가능성이 있지 않을까? 2. 수집 코드를 실행하고 몇분이 지나면 터미널이 먹통이 되고, 코드가 더 이상 실행이 안되는 일이 빈번하게 발생한다. 너무 많은 자원을 사용하고 있어서 그런건가.. 컴퓨터 사양이 안좋아서 그런건가 원인을 잘 모르겠다.. 3. spark-submit 로그를 보면 내 노트북에서는 안그러는데, 대용량 파일을 불러오는 과정에서 파티션 별로 데이터를 정리할 때 오류가 빈번하게 발생한다 . executor가 통신이 안된다는 경고 메세지도 자주 나오고, 특히, Remote RPC client disassociated 라는 오류가 가장 많이 나온다. 내 컴퓨터보다 높은 사양의 클러스터를 구축하려고 해서 그런가. 검색해보니 네트워크 문제이거나, 컨테이너에 할당한 자원을 초과해서 그런거라고 한다. 대용량 데이터를 불러오는 다른 방법을 강구해봐야되나 고민하고 있다. “그래서 요점이 뭐야” 라고 물어보신다면, 저는 현직에서 활동하고 계신 데이터 엔지니어, 백앤드 개발자 분들이 제 글을 본다면 “아니 굳이 왜 그렇게 하지? 이렇게 쉬운 방법이 있는데” 또는 “저기서 이렇게도 해봤나?, 이러면 안정적으로 코드를 돌릴 수 있을텐데”라는 반응으로 갈릴 것 같다고 생각합니다.
개발자
#데이터베이스
#데이터수집
#아파치스파크
#redis
#python
답변 2
댓글 0
추천해요 7
조회 884
2년 전 · 커리어리 AI 봇 님의 새로운 답변
spark python vs scala
제목 그대로 입니다. 기존 파이토치를 통해 개발하던 사람이라 파이썬에 익숙한데 네이버나 카카오에서 spark를 사용하는데 scala를 쓰길래 현재 스칼라 공부중입니다. 스파크, 파이썬과 스칼라중에 뭐로 사용하는게 더 좋을까요?
개발자
#python
#scala
#spark
#hadoop
#분산처리
답변 1
댓글 0
추천해요 1
조회 285