안녕하세요. 좋은 강의 감사합니다. scala를 이용하여 spark streaming을 배포할 때, 주로 shadow jar 파일을 생성하고 해당 파일을 이용하여 배포하는 걸로 알고 있는데, pyspark 같은 경우는 현업에서 어떤 방법으로 배포를 하고 있을까요? 1. 강의에서 소개해준 것처럼 파일 단위로 배포를 하는지 다른 방법으로 배포를 하는지 궁금합니다. 2. 강의에서 도커를 이용하여 빠르게 개발 및 배포하는 방법을 소개해주셨는데, 현업 로컬 환경에서도 주로 도커를 이용하여 개발을 하고 계실까요? 감사합니다.
안녕하세요. 좋은 강의 재밌게 수강하고 있습니다. Spark Structured Streaming Fault Tolerance 강의에서 아래와 같이 gracefully 하게 스트리밍을 종료할 수 있다고 말씀 주신 부분에서 질문이 있습니다. .config("spark.streaming.stopGracefullyOnShutdown", "true") 현재 업무에서 Spark Streaming을 사용했을 때 아래 코드와 같이 파라미터에 명확하게 stopGracefully 이 존재하여서 이를 이용하여 스트리밍을 안전하게 종료했습니다. def stop(stopSparkContext: Boolean, stopGracefully: Boolean): Unit 하지만, Spark Strucutred Streaming으로 전환했을 때 이러한 파라미터가 존재하지 않아서, 아래 링크를 참고하여 직접 구현하였습니다. https://stackoverflow.com/questions/45717433/stop-structured-streaming-query-gracefully 강의에서 알려주신 것처럼 아래와 같이 사용하면 동일하게 Structured Streaming도 Gracefully하게 종료할 수 있다고 이해하면 될까요? .config("spark.streaming.stopGracefullyOnShutdown", "true") Gracefully 스트리밍을 종료 한다라는 의미가 현재 처리 중인 마이크로 배치까지는 모두 다 처리 및 체크포인트 작성까지 한 후 스트리밍 종료로 이해하면 될까요? 마지막으로, DR 같이 스트리밍 종료가 아닌 클러스터가 모두 비정상적으로 종료되었을 경우 Gracefully 옵션이 적용되지 않는 케이스를 경험 했는데, 이런한 케이스는 현업에서 주로 어떻게 대처하고 있을까요? (예를 들어 체크 포인트 등이 불일치하게 스트리밍이 종료) 감사합니다.
안녕하세요. 현재 빅데이터 파이프라인 마스터; 성공을 위한 도구와 기술 수업을 수강 중인 학생입니다. HDFS의 Data integrity 부분의 강의를 듣다 궁금한 점이 생겨서 질문 올립니다. checksum은 transmission 과정에서 발생하는 에러로 인해 data가 corrupt 되었는지를 destination에서 판단하기 위해 사용한다고 이해했습니다. 근데 "transmission 과정에서 data를 corrupt 시킬만한 에러가 발생했다면 checksum 값도 함께 corrupt될 수도 있는거 아닌가"라는 궁금증이 생겼습니다. 제가 궁금한 점은 아래와 같이 2가지 입니다: 1. transmission 과정 중 checksum 값도 corrupt될 가능성이 있는지 만약 그렇다면 그런 경우를 대비한 별도의 메커니즘이 존재하는지 답변에 미리 감사드립니다.
안녕하세요! zookeeper start 실행시 자꾸 connection refused 에러가 나서 문의드립니다.... ㅠㅠ 강의에 나온 대로 security group 설정했고 ping test까지 해봤는데도 잘되는데 에러가 발생하네요.... standalone 모드로는 돌아가는 것으로 보아 zookeeper 설치는 제대로 된 것 같은데 왜 통신이 안될까요
강사님.. 스스로 문제 해결해가며 여기까지 왔는데.. 여기는 해결이 안되 문의 드립니다..ㅠ 6:24초 영상 처럼 output_notice 디렉토리에 [실습2]에서 했던 input 파일을 맵 리듀스가 되어야 하는데 저 화면에서 30분동안 멈춰 있다 겨우 동작 됐는데 정상 동작 되지 않은거 같습니다 bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount input output_notice bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount input output_notice 24/04/23 14:31:51 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032 24/04/23 14:31:52 INFO input.FileInputFormat: Total input paths to process : 1 24/04/23 14:31:52 INFO mapreduce.JobSubmitter: number of splits:1 24/04/23 14:31:52 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1713835952413_0002 24/04/23 14:31:52 INFO impl.YarnClientImpl: Submitted application application_1713835952413_0002 24/04/23 14:31:52 INFO mapreduce.Job: The url to track the job: http://ubuntu-virtual-machine:8088/proxy/application_1713835952413_0002/ 24/04/23 14:31:52 INFO mapreduce.Job: Running job: job_1713835952413_0002 24/04/23 14:31:57 INFO mapreduce.Job: Job job_1713835952413_0002 running in uber mode : false 24/04/23 14:31:57 INFO mapreduce.Job: map 0% reduce 0% 24/04/23 14:32:01 INFO mapreduce.Job: map 100% reduce 0% bin/hadoop fs -ls output_notice Found 1 items drwxr-xr-x - ubuntu supergroup 0 2024-04-23 14:31 output_notice/_temporary etc/hadoop/yarn-site.xml <configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> </configuration> etc/hadoop/mapred-site.xml <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
Spark Architecture(스파크 아키텍처) 소개 강의 내용 중 뒷 단에 있는 node에도 JVM이 있는 걸로 보이는데 Application Master(in Worker Node) 안에 있는 JVM과 오른쪽 노드들 안에 있는 JVM간의 차이점과 역할이 궁금합니다!
AMI 생성 후에 instance를 각각 4개씩 launch를 했는데요 영상 속 이미지와 다르게 sudo vim etc/hosts를 해도 빈 파일이 열립니다. ip 리스트를 작성하고 저장하려고 하니 can't open 에러가 발생하고요. 등록한 ip 리스트를 이용해서 노드 간 통신을 하는 것으로 보여지는데요. 무시하고 진행해도 되는건가요?
wget 설치 후 wget 으로 2023_BIGDATA 디렉토리에 크롬.deb 파일 내려 받고 dpkg -i 명령어로 설치 하여 google-chrome --version 이 나왔습니다 chromedriver.Chrome ('chromedriver') 라는 파일은 어디에서 찾을 수 있을까요? driver = webdriver.Chrome ("/home/ubuntu/2023_BIGDATA/google-chrome-stable_current_amd64.deb" pip install wget sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb # google-chrome-stable_current_amd64.deb sudo dpkg -i google-chrome-stable_current_amd64.deb google-chrome --version Google Chrome 123.0.6312.105
안녕하세요 강사님.. 실습 1번은 현재 저로서는 해석이 불가능하여 해석은 나중에 하기로 하고 일단 쳐보기만 열심히 쳐봤는데 역시나 안되네요.. 코드 공유좀 부탁 드릴 수 있을까요.. 죄송합니다 from bs4 import BeautifulSoup from urllib.request import * from urllib.parse import * from os import makedirs import os.path, time, re proc_files = {} def enum_links(html, base): soup = BeautifulSoup(html, "html.parser") links = soup.select("link[rel='stylesheet']") # CSS links += soup.select("a[href]") # link result =[] for a in links : href = a.attrs['href'] url = urljoin(base, href) result.append(url) return result def download_file(url): o = urlparse(url) savepath = "./" + o.netloc + o.path if re.search(r"/$", savepath): savepath += "index.html" savedir = os.path.dirname(savepath) if os.path.exists(savepath): return savepath if not os.path.exists(savedir): print("mkdir=", savedir) makedirs(savedir) try: print("download=", url) urlretrieve(url, savepath) # url 다운 받고 파일 이름은 savepath로 저장 time.sleep(1) return savepath except: print("다운 실패", url) return None def analyze_html(url, root_url): savepath = download_file(url) if savepath is None: return if savepath is proc_files: return proc_files[savepath] = True print('analyze_html', url) html =open(savepath, "r", encoding="utf-8").read() links = enum_links(html, url) for link_url in links: if link_url.find(root_url) != 0: if not re.search(r".css$", link_url): continue if re.search(r".(html|htm)$", link_url): analyze_html(link_url, root_url) continue download_file(link_url) if __name__ == "__main__": url = "https://docs.python.org/3.5/library/" analyze_html(url, url)
일단 따라 쳐봤는데 아래의 결과 처럼 나오는게 맞을까요? html 변수에 </ul>이 있는데 혹시 앞에 <ul>은 없어도 동작 되나요? from bs4 import BeautifulSoup html = """ <html><body> <div id="project"> <h1 id="title">BIG DATA PROGRAMMING</h1> <p id='body'>DATA ANLYSIS AND SCRENCE</p> <p>DATA ACQUISTION PART1</p> </ul> <ul class="items"> <li>CRAWLING</li> <li>SCRAPPING</li> <li>HYBRID WAY</li> </div> </body></html> """ soup = BeautifulSoup(html, 'html.parser') h1 = soup.html.body.h1 p1 = soup.html.body.p p2 = p1.next_sibling.next_sibling print("h1 = " + h1.string) print("p = " + p1.string) print("p = " + p2.string) title = soup.find(id="title") body = soup.find(id="body") print("#title=" + title.string) print("#body=" + body.string) h1 = soup.select_one("div#project > h1").string print("h1 =", h1) li_list = soup.select("div#project > ul.items > li") for li in li_list: print("li =", li.string) 결과 python3 2_bs4_temp.py h1 = BIG DATA PROGRAMMING p = DATA ANLYSIS AND SCRENCE p = DATA ACQUISTION PART1 #title=BIG DATA PROGRAMMING #body=DATA ANLYSIS AND SCRENCE h1 = BIG DATA PROGRAMMING li = CRAWLING li = SCRAPPING li = HYBRID WAY
requests 패키지를 설치하려 하는데 안됩니다. 혹시 venv 환경에서 패키지 설치하는 방법은 좀 다른가요? (venv2023) ubuntu@ip-172-31-12-30:~/2023_BIGDATA$ sudo pip install requests Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (2.31.0) Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests) (3.3.2) Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests) (3.6) Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests) (2.2.1) Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests) (2024.2.2) WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
안녕하세요 Jupyter terminal 오픈하고, crawling 실습하기 위한 준비부터 문제가 발생했어요 ㅜ 폴더까지 생성을 했는데, virtualenv 활성화하기 위해 source이라는 명령어가 실행이 되지 않습니다. jupyter notebook workspace도 실행되지 않고...vim 명령어도 인식 하지 못합니다. 빠른 속도에 추가 설명이 없어서, 어디서 어떻게 실행을 하는지 제가 이해하지 못한것 같습니다. visual studio code에서도 실행을 해봤는데, 같은 부분에 계속 예러가 납니다. 도와주세요. 제가 어떻게 하면 되나요?
안녕하세요? 강의 자료로 주신 docker-compose 파일을 바탕으로 실습을 하고 있습니다. 프로그램을 실행할 때 마다 app-<timestamp>-<executor_id> 형식의 폴더가 docker-compose.yml가 위치한 곳과 같은 곳에 생기는데, 저는 spark-events 내부에만 저장하고 싶은데 어떤 설정을 해야 하는지 잘 모르겠습니다... spark-defaults.conf spark.eventLog.enabled true spark.eventLog.dir file:/tmp/spark-events spark.history.fs.logDirectory file:/tmp/spark-events 강의 자료에 나온 docker-compose.yml 중 spark의 volumes와 enviroment 부분 volumes: - .:/opt/bitnami/spark/work - ./spark_conf/log4j2.properties:/opt/bitnami/spark/conf/log4j2.properties - ./spark_conf/spark-defaults.conf:/opt/bitnami/spark/conf/spark-defaults.conf - ./spark-events:/tmp/spark-events environment: - SPARK_MODE=master - SPARK_RPC_AUTHENTICATION_ENABLED=no - SPARK_RPC_ENCRYPTION_ENABLED=no - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no - SPARK_SSL_ENABLED=no - SPARK_USER=spark spark 프로그램 실행시 app 폴더가 생기는 사진
4분 50초 경 " rack 전체가 뻗는것 보다 노드 하나 뻗는 확률이 더 올라간다? " 라고 해주셨는데 잘 이해가 가지 않아서 질문드립니다. 제가 이해한 바로는 결국 신뢰성과 가용성 둘중 하나는 포기를 해야하고 그 둘 사이의 타협적 결정을 잘 해야 한다. 가용성을 위해 단일 노드에 모든 복제본을 둘 경우 속도는 빠르지만 신뢰성 보장이 어렵고 장애 대응이 불가능 하다. 신뢰성을 위해 복제본을 모든 데이터 센터 혹은 많은 가상 노드에 복제해둘 경우 신뢰성은 극한으로 올라가지만 데이터를 가져오는데 시간이 너무 오래결려 가용성이 떨어진다. 그래서 그 둘 사이의 타협점을 구한 것이 Replica Placement다. 위처럼 이해하면 될까요??