<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>de_youn.log</title>
        <link>https://velog.io/</link>
        <description>데이터 요리사</description>
        <lastBuildDate>Tue, 25 Oct 2022 13:18:44 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>de_youn.log</title>
            <url>https://velog.velcdn.com/images/de_youn/profile/7f8259cb-403a-4386-97eb-668ad199028b/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. de_youn.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/de_youn" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[해외 주식 분석 프로젝트-3]]></title>
            <link>https://velog.io/@de_youn/%ED%95%B4%EC%99%B8-%EC%A3%BC%EC%8B%9D-%EB%B6%84%EC%84%9D-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-3</link>
            <guid>https://velog.io/@de_youn/%ED%95%B4%EC%99%B8-%EC%A3%BC%EC%8B%9D-%EB%B6%84%EC%84%9D-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-3</guid>
            <pubDate>Tue, 25 Oct 2022 13:18:44 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요.
데이터 수집 작업까지 완성은 했는데
일에 치고 치이다 이제야 글을 작성하게 됩니다😂😂</p>
<p>TL;DR
데이터 수집부 개발 내용 보러 GOGO~❗❗</p>
<hr>
<h2 id="목표🏆">목표🏆</h2>
<blockquote>
<p>👉 수집할 해외 주식 종목 선정
👉 크롤링 웹(세부 탭) 선정
👉 <del>InfluxDB 구축</del> 적재 서버 구축, 크롤링 및 적재 모듈 생성
👉 크롤링 테스트</p>
</blockquote>
<hr>
<h3 id="1-종목-및-크롤링-탭-선정🥇">1. 종목 및 크롤링 탭 선정🥇</h3>
<p>평소 관심 가던 종목, 이미 가입되어있는 종목을 선정했고, 선정한 종목은.... 어... 14가지 종목이 있고, 종목명은 알려드릴 수가 없네요ㅋㅋㅋ😥</p>
<p>다음은 크롤링 탭 선정 과정입니다.
일단 야후파이낸셜을 기반으로 크롤링해야했고, 해당 포털 서핑 결과,
서머리, 히스토리컬, 통계 데이터를 확인할 수 있었고
이 데이터를 크롤링하기로 선정하였습니다❗</p>
<p>차후엔 사용자가 미리 지정한 종목을 메타데이터 테이블 형태로 만들어 저장할 예정입니다😁</p>
<hr>
<h3 id="2-적재-서버-구축-크롤링-및-적재-모듈-생성-🥈">2. 적재 서버 구축, 크롤링 및 적재 모듈 생성 🥈</h3>
<p>우리는 이전 게시글에서 적재 서버를 InfluxDB로 구축하기로 선정하였다.
그러나 InfluxDB로 구축하기 전, 이미 어느정도 사용하여 익숙했던
MySQL을 적재 서버로 일단 사용키로 했다.</p>
<p>차후, 데이터를 시각화할 예정인데, 이 때, fluxQL보단 SQL 언어로
시각화를 진행하면 훨씬 빠르게 이 프로젝트 진행이 완료될 것이라고 판단했기 때문이다.</p>
<p>물론 프로젝트가 어느정도 안정화되면, InfluxDB 서버로 데이터를 마이그레이션할 예정이다.</p>
<p>다음, 크롤링을 위해 크롬 드라이버106 버전을 받아 사용하였고,
1번 항목에서 선정한 크롤링 탭에서 다음과 같은 데이터를 수집하였다.</p>
<p> 👉👉 티커명, 5년 베타계수, 주당 순자산, 유동비율, 배당락일, 종가일자, 종가, 주당 순이익, 이전 배당락일, 선행 주가수익률, 1년 최고가, 1년 최고가, 전날 시가, 전날 종가, 주당 현금 보유량, 총부채</p>
<p>이 데이터들을 종목별로 Pool 기능을 사용하여 병행으로 크롤링하도록 하였다😀😁</p>
<h3 id="3-크롤링-테스트🥉">3. 크롤링 테스트🥉</h3>
<p>하단은 크롤링한 결과의 예시이다. (종목 1개 크롤링 예시)
<img src="https://velog.velcdn.com/images/de_youn/post/9a048d43-1eca-4256-a933-1d6ac1040e81/image.png" alt="크롤링 결과"></p>
<p>하단은 크롤링 결과를 MySQL 서버로 적재한 후, 
MySQL Workbench를 통해 조회한 결과이다.
<img src="https://velog.velcdn.com/images/de_youn/post/365ca159-9479-4343-903f-aa0b1768df4b/image.png" alt="적재 결과"></p>
<h3 id="다음-주제">다음 주제</h3>
<p>다음은 크롤링하여 적재한 데이터를 시각화해줄 Vue 서버 구축에 대해 작성할 것이다. 현재 Vue는 axios 사용법만 알면 어느정도 프로젝트 진행이 가능할 정도의 지식이 습득되어져있다😄😃</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Prometheus with Docker Container]]></title>
            <link>https://velog.io/@de_youn/Prometheus-with-Docker-Container</link>
            <guid>https://velog.io/@de_youn/Prometheus-with-Docker-Container</guid>
            <pubDate>Mon, 24 Oct 2022 00:28:01 GMT</pubDate>
            <description><![CDATA[<h3 id="독자-대상📣">독자 대상📣</h3>
<blockquote>
<p>👉 Prometheus로 시스템 메트릭을 모니터링 하시려는 분
👉 node_exporter를 사용하여 매트릭을 추출하시려는 분
👉 Ubuntu 환경에서 구축하시는 분</p>
</blockquote>
<hr>
<h3 id="출간-이유❓">출간 이유❓</h3>
<blockquote>
<p>Docker(swarm) Container 기반 Prometheus 구축 시, 서비스 등록 불가 현상 확인</p>
</blockquote>
<hr>
<h3 id="문제-파악🔍">문제 파악🔍</h3>
<pre><code class="language-bash"># systemctl 커맨딩 오류
$ sytemctl daemon-reload
System has not been booted with systemd as init system (PID 1). Can&#39;t operate.</code></pre>
<pre><code>Q: Prometheus를 Docker Container 기반으로 구축하려는데
   Systemctl 커맨딩이 정상 작동하지 않아서
   Prometheus 서비스 등록이 불가합니다..😥</code></pre><hr>
<h3 id="문제-해결🎊">문제 해결🎊</h3>
<pre><code>A: Docker Container는 Unprivileged 모드가 default값입니다.
   이 모드는 시스템의 메인 리소스에 접근할 수 있는 권한이
   부족하여, 시스템 자원 접근이 불가합니다.

   따라서 우리는 Docker Container를 Privileged 모드로
   실행해야할 필요가 있습니다.

   하지만, 만약 이렇게 쉽게 해결된다면 
   이 글을 출간하지 않았을 것입니다😂

   간혹, privileged 옵션이나 /init 옵션을 적용해도
   위 문제가 해결되지 않는 경우가 있습니다❗❗

   하단의 내용을 참고하여 이 Disgusting한 문제를 해결하십시오❗❗

   (이 글은 Prometheus 설정 파일이 이미 볼륨 바인딩되었다는
   것을 전제로 작성되었습니다.)</code></pre><ol>
<li><p>node_exporter <a href="https://prometheus.io/download/#node_exporter">최신 버전 확인</a></p>
<pre><code class="language-bash"># node exporter의 최신버전 확인 후, 다운로드 링크 확보
# 현 시점, 1.4.0이 최신 버전
https://github.com/prometheus/node_exporter/releases/download/v1.4.0/node_exporter-1.4.0.linux-amd64.tar.gz</code></pre>
</li>
<li><p>node_exporter 구동 쉘 파일 작성</p>
<pre><code class="language-bash"># 로컬 작성 버전
$ vi prom_node_exporter.sh
#!/usr/bin/env bash
container_name=`docker ps -q | xargs -n 1 docker inspect --format &#39;{{ .Name }} {{range .NetworkSettings.Networks}} {{.IPAddress}}{{end}}&#39; | sed &#39;s#^/##&#39; | grep [프로젝트명] | cut -d &quot; &quot; -f1`
docker exec -i $container_name wget -P /opt https://github.com/prometheus/node_exporter/releases/download/v1.4.0/node_exporter-1.4.0.linux-amd64.tar.gz
docker exec -i $container_name tar xvzf /opt/node_exporter-1.4.0.linux-amd64.tar.gz -C /opt/
docker exec -i $container_name rm -rf /opt/node_exporter-1.4.0.linux-amd64.tar.gz
docker exec -i $container_name /opt/node_exporter-1.4.0.linux-amd64/node_exporter --web.listen-address=:3010 &amp;

# 컨테이너 내부 작성 버전
$ vi prom_mode_exporter.sh
#!/bin/bash
wget -P /opt https://github.com/prometheus/node_exporter/releases/download/v1.4.0/node_exporter-1.4.0.linux-amd64.tar.gz
tar xvzf /opt/node_exporter-1.4.0.linux-amd64.tar.gz -C /opt/
rm -rf /opt/node_exporter-1.4.0.linux-amd64.tar.gz
/opt/node_exporter-1.4.0.linux-amd64/node_exporter --web.listen-address=:3010 &amp;</code></pre>
<p>각 쉘 파일의 마지막 커맨드에서 3010은 prometheus에서 설정한 job task의 포트를 참고하여 수정하시면 됩니다.😁</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[Docker container current state 'New' stuck]]></title>
            <link>https://velog.io/@de_youn/Docker-container-current-state-New-stuck</link>
            <guid>https://velog.io/@de_youn/Docker-container-current-state-New-stuck</guid>
            <pubDate>Wed, 19 Oct 2022 07:55:27 GMT</pubDate>
            <description><![CDATA[<h3 id="독자-대상📣">독자 대상📣</h3>
<blockquote>
<p>👉 Docker를 사용하여 컨테이너 오케스트레이션하시려는 분
👉 Ubuntu 환경에서 구축하시는 분</p>
</blockquote>
<hr>
<h3 id="출간-이유❓">출간 이유❓</h3>
<blockquote>
<p>Docker stack 배포 시, current state &#39;New&#39; stuck 오류 발견</p>
</blockquote>
<hr>
<h3 id="문제-파악🔍">문제 파악🔍</h3>
<pre><code>Q: docker stack 배포 후, &#39;docker service ls&#39; 커맨딩 결과,
   replica가 0/1 이길래 &#39;docker service ps&#39;로 확인해보니
   current state 부분이 &quot;New x minute ago&quot;에서
   멈춰있어요..😥</code></pre><hr>
<h3 id="문제-해결🎊">문제 해결🎊</h3>
<pre><code>A: 우선 [preparing-error](https://velog.io/@de_youn/Docker-Service-Preparing-error)를 확인해주시고 진행해주세요!😀

   위 글로 해결이 되지 않는다면, 도커 컨테이너 간
   네트워크(IP) 설정 시, 문제가 발생했을 가능성이 높습니다.

   이 문제는 일반적으로 IP 주소가 부족하기 때문에 발생합니다❗❗
   사용 가능한 주소 수를 늘릴 수 있습니다❗❗

   하단의 내용을 참고하여 이 Disgusting한 문제를 해결하십시오❗❗</code></pre><ol>
<li><p>Docker 서브넷 마스크 조정</p>
<pre><code class="language-bash"># docker는 기본 24의 서브넷 마스크를 갖고 있습니다.
# 이 마스크 값을 16으로만 감소시켜도 네트워크 범위가 굉장히 커집니다.

# 하단의 커맨드는 현 상태에서 새로운 클러스터를 생성합니다.
# 따라서 현재 클러스터를 백업한 후, 작업을 진행하는 것을 권장합니다😁
$ docker swarm init --default-addr-pool-mask-length 16 --force-new-cluster</code></pre>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[Sqoop export error]]></title>
            <link>https://velog.io/@de_youn/Sqoop-export-error</link>
            <guid>https://velog.io/@de_youn/Sqoop-export-error</guid>
            <pubDate>Tue, 04 Oct 2022 07:43:51 GMT</pubDate>
            <description><![CDATA[<h3 id="독자-대상📣">독자 대상📣</h3>
<blockquote>
<p>👉 Sqoop을 사용하여 Hive to MySQL 마이그레이션하려는 분
👉 Ubuntu 환경에서 구축하시는 분</p>
</blockquote>
<hr>
<h3 id="출간-이유❓">출간 이유❓</h3>
<blockquote>
<p>Sqoop export 시, 오류 발생 확인</p>
</blockquote>
<hr>
<h3 id="문제-파악🔍">문제 파악🔍</h3>
<pre><code class="language-bash">...
2022-10-04 14:40:07,033 INFO mapreduce.Job: Job job_1662078057204_0026 failed with state FAILED due to: Task failed task_1662078057204_0026_m_000002 Job failed as tasks failed. failedMaps:1 failedReduces:0 killedMaps:0 killedReduces: 0 

2022-10-04 14:40:07,116 INFO mapreduce.Job: Counters: 12 
    Job Counters 
        Failed map tasks=1 
        Killed map tasks=3 
        Launched map tasks=4 
        Data-local map tasks=4 
        Total time spent by all maps in occupied slots (ms)=31217 
        Total time spent by all reduces in occupied slots (ms)=0 
        Total time spent by all map tasks (ms)=31217 
        Total vcore-milliseconds taken by all map tasks=31217 
        Total megabyte-milliseconds taken by all map tasks=31966208 
    Map-Reduce Framework 
         CPU time spent (ms)=0 
        Physical memory (bytes) snapshot=0 
        Virtual memory (bytes) snapshot=0 
2022-10-04 14:40:07,124 WARN mapreduce.Counters: Group FileSystemCounters is deprecated. Use org.apache.hadoop.mapreduce.FileSystemCounter instead 
2022-10-04 14:40:07,125 INFO mapreduce.ExportJobBase: Transferred 0 bytes in 21.0529 seconds (0 bytes/sec) 
2022-10-04 14:40:07,128 INFO mapreduce.ExportJobBase: Exported 0 records. 
2022-10-04 14:40:07,128 ERROR mapreduce.ExportJobBase: Export job failed! 
2022-10-04 14:40:07,128 ERROR tool.ExportTool: Error during export: 
Export job failed! at org.apache.sqoop.mapreduce.ExportJobBase.runExport(ExportJobBase.java:445) 
    at org.apache.sqoop.manager.SqlManager.exportTable(SqlManager.java:931) 
    at org.apache.sqoop.tool.ExportTool.exportTable(ExportTool.java:80) 
    at org.apache.sqoop.tool.ExportTool.run(ExportTool.java:99) 
    at org.apache.sqoop.Sqoop.run(Sqoop.java:147)     
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76) 
    at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:183) 
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:234) 
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:243) 
    at org.apache.sqoop.Sqoop.main(Sqoop.java:252)
...</code></pre>
<pre><code>Q: sqoop export로 hive에서 mysql로 
   데이터 마이그레이션을 하려는데 오류가 발생해요..😥</code></pre><hr>
<h3 id="문제-해결🎊">문제 해결🎊</h3>
<pre><code>A: 우선 yarn log를 확인하셔야합니다😀

   커맨드로 확인할 수도 있는데, 유저/권한이 불일치하여
   볼 수 없는 경우가 종종 있습니다.
   ex) Docker로 Hadoop eco system 구축 등

   가장 쉽게 로그를 확인하는 방법은 WEB HDFS에 접속하는 것입니다❗

   하단의 내용을 참고하여 이 Disgusting한 문제를 해결하십시오❗❗</code></pre><ol>
<li>NameNode의 주소로 WEB HDFS 접속<pre><code class="language-bash"># 컨테이너 로그 1로 끝나는 디렉터리로 접근
경로: /logs/userlogs/application_xxxxxxxx_xx/container_xxxx_xxxx_xx_xxxxx1/</code></pre>
</li>
<li>디렉터리 내, 로그 파일 확인<pre><code class="language-bash">로그 파일명: syslog</code></pre>
</li>
<li>필자의 오류 -&gt; MySQL 접근 권한<pre><code class="language-bash">...
2022-10-04 05:40:04,716 INFO [AsyncDispatcher event handler org.apache.hadoop.mapreduce.v2.app.job.impl.TaskAttemptImpl: Diagnostics report from attempt 1662078057204 0026 m 000000 0: Error: java.io.I0Exception: java.sql.SQLException: null, message from server: &quot;Host &#39;mycluster&#39; is not allowed to connect to this MySOL server&quot;
...
# MySQL에 접속하여 &#39;mycluster&#39; 라는 컨테이너의 접근권한을 생성 및 부여해야한다.
# Hive가 HDFS 기반이기 때문에 HDFS의 Avtive NameNode인 mycluster의 권한이 필요한가 봅니다😊</code></pre>
</li>
<li>MySQL에 접속하여 접근권한 부여하기<pre><code class="language-sql"># 하단의 sql 커맨딩 시, 권한 생성 및 부여 완료
# sqoop export 또한 해결되었음
&gt; create user root@[mycluster ip address] identified by &#39;[password]&#39;;
&gt; grant all privileges on [database].* to root@[mycluster ip addr];
&gt; flush privileges;</code></pre>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[MySQL Too many connections Error]]></title>
            <link>https://velog.io/@de_youn/MySQL-Too-many-connections-Error</link>
            <guid>https://velog.io/@de_youn/MySQL-Too-many-connections-Error</guid>
            <pubDate>Thu, 29 Sep 2022 01:01:02 GMT</pubDate>
            <description><![CDATA[<h3 id="독자-대상📣">독자 대상📣</h3>
<blockquote>
<p>👉 Apache Hive의 Metastore로 MySQL을 사용하시는 분
👉 MySQL 서비스 재시작해도 오류가 해결되지 않는 분
👉 Ubuntu 환경에서 구축하시는 분</p>
</blockquote>
<hr>
<h3 id="출간-이유❓">출간 이유❓</h3>
<blockquote>
<p>MySQL의 Too many connections 오류가 해결되지 않는 현상 발견</p>
</blockquote>
<hr>
<h3 id="문제-파악🔍">문제 파악🔍</h3>
<pre><code class="language-bash">...
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection,  message from server: &quot;Too many connections&quot;
...</code></pre>
<pre><code>Q: 아... my.cnf파일을 아무리 수정해도 위에 오류가 자꾸 나오네요..😥
   아니... 실수로 코딩할 때, 커넥션 안 닫은 제가 잘못한건 맞는데,
   그렇다고 이렇게까지 해결 안 될 문제인가요😫</code></pre><hr>
<h3 id="문제-해결🎊">문제 해결🎊</h3>
<pre><code>A: ㅋㅋㅋ 진정하시고~
   아래의 순서를 따라서 문제 해결 가즈아~~✈✈

   하단의 내용을 참고하여 이 Disgusting한 문제를 해결하십시오❗❗</code></pre><ol>
<li><p>service mysql restart</p>
<pre><code class="language-bash">$ service mysql restart
* Stopping MySQL database server mysqld     [fail]
* Starting MySQL database server mysqld     [ OK ]

# 상단처럼 &quot;[fail]&quot;이 뜨면 수정한 my.cnf 파일이 제대로 반영되지 않은 것❗❗
# MySQL 버전을 확인하고, 해당 버전에서 사용할 수 없는
# key-val 세트를 사용했는지 다시 한 번 확인하고 다음 단계로 고고❗</code></pre>
</li>
<li><p>MySQL 프로세스 강제 종료</p>
<pre><code class="language-bash">$ ps aux | grep mysql | grep -v grep
# 상단의 커맨드 실행 결과, &quot;/usr/sbin/mysqld --basedir~&quot; 이라고 뜨는
# 프로세스 번호 찾아서 강제 종료❗❗

$ kill -9 [mysqld pid]</code></pre>
</li>
<li><p>service mysql start</p>
<pre><code class="language-bash">$ service mysql start
* Starting MySQL database server mysqld     [ OK ]
# 일단 MySQL 서비스를 강제 종료한 후, 재시작이 됨</code></pre>
</li>
<li><p>Apache Hive 접속</p>
<pre><code class="language-bash"># hive
SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/opt/hive/lib/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/opt/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] 
Hive Session ID = ac4dd78d-818c-4033-8fef-51c1594d63dc 

Logging initialized using configuration in jar:file:/opt/hive/lib/hive-common-3.1.2.jar!/hive-log4j2.properties Async: true 
Hive Session ID = 5a25d539-0a84-4658-bb5d-ec719c9f7187 
hive&gt;

# 오 지저스 크라이스트 수퍼스타 해결완료🎉🎆🎇🎊</code></pre>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[Matplotlib, Seaborn 한글 Font error]]></title>
            <link>https://velog.io/@de_youn/Matplotlib-Seaborn-%ED%95%9C%EA%B8%80-Font-error</link>
            <guid>https://velog.io/@de_youn/Matplotlib-Seaborn-%ED%95%9C%EA%B8%80-Font-error</guid>
            <pubDate>Mon, 26 Sep 2022 01:59:29 GMT</pubDate>
            <description><![CDATA[<h3 id="독자-대상📣">독자 대상📣</h3>
<blockquote>
<p>👉 Ubuntn 환경에서 python으로 B/E 개발중이신 분
👉 Jinja2 template으로 웹 만드시는 분</p>
</blockquote>
<hr>
<h3 id="출간-이유❓">출간 이유❓</h3>
<blockquote>
<p>matplotlib, seaborn 사용 중, 한글 깨짐 현상 발견</p>
</blockquote>
<hr>
<h3 id="문제-파악🔍">문제 파악🔍</h3>
<pre><code class="language-bash">UserWarning: Glyph 46020 (\N{HANGUL SYLLABLE }) missing from current font.</code></pre>
<pre><code>Q: Ubuntu 위에 구축한 B/E 서버에서 matplotlib 사용 시,
   한글이 깨집니다...
   구글링했는데 plt.rcParams[&#39;font.family&#39;]로 설정해도
   한글이 계속 깨져있어요..😥😥😥😥</code></pre><hr>
<h3 id="문제-해결🎊">문제 해결🎊</h3>
<pre><code>A: 우선 matplot만 사용중인게 확실한지 다시 한 번 확인해보세요❗

   만약 seaborn을 베이스로 사용중이시라면 matplot이 아닌
   seaborn에서 폰트 설정을 해야합니다.

   Ubuntu 환경에서 폰트 설치 방법은 서비스입니다~😁😀
   하단의 내용을 참고하여 이 Disgusting한 문제를 해결하십시오❗❗</code></pre><ol>
<li><p>(서비스) 나눔 폰트 설치 및 캐쉬 삭제</p>
<pre><code class="language-bash">$ sudo apt-get update
$ sudo apt-get install fonts-nanum*

# 하단은 캐쉬 삭제 커맨드이며, 필수 커맨딩 사항은 아님!
$ sudo fc-cache -fv</code></pre>
</li>
<li><p>(서비스) 나눔 폰트 복사</p>
<pre><code class="language-python"># B/E에서 사용중인 python버전 확인하여 python 터미널 진입.
&gt;&gt;&gt; import matplotlib
&gt;&gt;&gt; matplotlib.__file__
&#39;/usr/anaconda3/lib/python3.7/site-packages/matplotlib/__init__.py&#39;</code></pre>
</li>
<li><p>(서비스) 나눔 폰트 복사</p>
<pre><code class="language-bash"># 시스템에 위치한 나눔 폰트를 matplotlib 로 복사
$ sudo cp /usr/share/fonts/truetype/nanum/Nanum* /usr/anaconda3/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf/</code></pre>
</li>
<li><p>폰트 적용 #1</p>
<pre><code class="language-python">~
# seaborn 사용중일 경우.
sns.set(rc = {&#39;font.family&#39;:&#39;NanumGothicCoding&#39;})
sns.joinplot(x=x, y=y, data=data, kind=&quot;reg&quot;)
plt.savefig()
~</code></pre>
</li>
<li><p>폰트 적용 #2</p>
<pre><code class="language-python">~
# matplotlib만 사용중일 경우.
plt.rcParams[&#39;font.family&#39;] = &#39;NanumGothicCoding&#39;
plt.savefig()
~</code></pre>
</li>
</ol>
<p>위 단계로 해결 불가 시, 하단의 단계를 추가로 시행해주세요.</p>
<ol>
<li>폰트 디렉터리 검색<pre><code class="language-python">&gt;&gt;&gt; import matplotlib
&gt;&gt;&gt; matplotlib.matplotlib_fname()
/usr/anaconda3/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc</code></pre>
</li>
<li>폰트 설정 파일 수정<pre><code class="language-bash"># matplotlibrc 파일에서 &quot;font.family 부분을 찾아 수정해주세요&quot;
$ vi /usr/anaconda3/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc
~
#font.family : NanumGothic
~</code></pre>
</li>
<li>matplotlib 캐쉬 파일 삭제<pre><code class="language-python"># 출력결과의 캐쉬 디렉터리로 이동하여
# &quot;tex.cache&quot;, &quot;fontlist-v310.json&quot; 파일 삭제
&gt;&gt;&gt; import matplotlib
&gt;&gt;&gt; matplotlib.get_cachedir()
[캐쉬 디렉터리경로]</code></pre>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[vscode server: Downloading with wget (stuck)]]></title>
            <link>https://velog.io/@de_youn/vscode-server-Downloading-with-wget-stuck</link>
            <guid>https://velog.io/@de_youn/vscode-server-Downloading-with-wget-stuck</guid>
            <pubDate>Fri, 16 Sep 2022 02:25:45 GMT</pubDate>
            <description><![CDATA[<h3 id="독자-대상📣">독자 대상📣</h3>
<blockquote>
<p>👉 VSCode Server의 Remote SSH를 사용하시는 분
👉 네트워크 상태가 불안정하신 분</p>
</blockquote>
<hr>
<h3 id="출간-이유❓">출간 이유❓</h3>
<blockquote>
<p>패스워드 입력 후, Downloading with wget에서 무한로딩 에러 발견</p>
</blockquote>
<hr>
<h3 id="문제-파악🔍">문제 파악🔍</h3>
<pre><code class="language-bash">&gt; ...
&gt; Downloading with wget...</code></pre>
<pre><code>Q: 잘 되던 VSCode Server의 Remote SSH가 갑자기 안됩니다...😥</code></pre><hr>
<h3 id="문제-해결🎊">문제 해결🎊</h3>
<pre><code>A: VSCode server의 Remote SSH를 위해 원격지 서버에 관련 파일을
   Wget을 통해 다운로드 하게 됩니다.😀

   이때, 네트워크 상태가 불안정하거나,
   무언가 문제가 발생하여 wget이 중간에 멈춰버리게 됩니다.

   하단의 내용을 참고하여 이 문제를 해결하십시오❗❗</code></pre><ol>
<li><p>수동으로 vscoder-server.tar.gz 다운로드</p>
<pre><code class="language-bash"># VSCode Remote SSH 로그인 후, VSCode 터미널 창을 살펴보면 
# /home/{계정명}/.vscode-server/bin/f0aj91hvo1vn1l~
# 위 같이 bin 하위에 커밋명의 디렉터리를 확인할 수 있다.
# 해당 커밋명을 사용하여 하단 처럼 수동 다운로드
$ wget -O vscode-server.tar.gz https://update.code.visualstudio.com/commit:커밋명/server-linux-x64/stable

# 만약 다운로드가 멈추면 하단처럼 c 옵션을 통해 이어받기
$ wget -c -O vscode-server.tar.gz https://update.code.visualstudio.com/commit:{커밋명}/server-linux-x64/stable</code></pre>
</li>
<li><p>VSCode 재실행</p>
</li>
<li><p>VS 프로세스 강제 종료</p>
<pre><code class="language-bash"># 원격지 서버에서 VS 관련 프로세스를 찾아 종료
$ ps -ax | grep &#39;vs&#39;
$ kill -9 {vs관련프로세스번호}</code></pre>
</li>
<li><p>다운로드 받은 vscode-server.tar.gz 복사</p>
<pre><code class="language-bash">$ cp vscode-server.tar.gz ~/.vscode-server/{커밋명}/</code></pre>
</li>
<li><p>vscode-serer.tar.gz 압축해제</p>
<pre><code class="language-bash">$ tar -xvzf ~/.vscode-server/{커밋명}/vscode-server.tar.gz --strip-components 1</code></pre>
</li>
<li><p>VSCode 종료 후, 재실행</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[PySpark cannot run with different minor versions.]]></title>
            <link>https://velog.io/@de_youn/PySpark-cannot-run-with-different-minor-versions</link>
            <guid>https://velog.io/@de_youn/PySpark-cannot-run-with-different-minor-versions</guid>
            <pubDate>Wed, 03 Aug 2022 07:22:07 GMT</pubDate>
            <description><![CDATA[<h3 id="독자-대상📣">독자 대상📣</h3>
<blockquote>
<p>👉 Docker에서 PySpark를 사용하시는 분
👉 PySpark를 사용하여 HDFS에 데이터를 저장하시려는 분</p>
</blockquote>
<hr>
<h3 id="출간-이유❓">출간 이유❓</h3>
<blockquote>
<p>PySpark로 HDFS에 데이터 저장 시, 에러 발생 확인</p>
</blockquote>
<hr>
<h3 id="문제-파악🔍">문제 파악🔍</h3>
<pre><code class="language-bash">RuntimeError: Python in worker has different version 3.6 than that in driver 3.7, PySpark cannot run with different minor versions. Please check environment variables PYSPARK_PYTHON and PYSPARK_DRIVER_PYTHON are correctly set.</code></pre>
<pre><code>Q: Apache Spark로 master 1기, worker 3기 클러스터를 구축해서
   Hive(HDFS) 데이터를 처리하고 적재하던 중,
   상기 오류가 발생합니다.😥</code></pre><hr>
<h3 id="문제-해결🎊">문제 해결🎊</h3>
<pre><code>A: Spark master, worker 컨테이너(SC)에서 사용하는 파이썬 버전과
   PySpark를 사용하는 컨테이너(PSC)에서 사용하는 파이썬 버전이
   상이하여 발생하는 에러입니다.😀

   파이썬 버전만 맞춰주면 되는데,
   상기 에러를 보아, SC에서 사용하는 파이썬 버전은 3.7,
   PSC에서 사용하는 파이썬 버전은 3.6 버전으로 추정됩니다.

   SC의 모든 컨테이너에서 파이썬 버전을 변경하는 것은 번거로우니,
   PSC에서 파이썬 버전을 재설정하는 것을 권장합니다.

   하단의 내용을 참고하여 이 Disgusting한 문제를 해결하십시오❗❗</code></pre><ol>
<li>파이썬 3.7 설치<pre><code class="language-bash">$ apt install python3.7</code></pre>
</li>
<li>PySpark를 사용하는 모듈에 하기 코드 추가<pre><code class="language-python">~
import os
os.environ[&quot;PYSPARK_PYTHON&quot;] = &quot;/usr/bin/python3.7&quot;
os.environ[&quot;PYSPARK_DRIVER_PYTHON&quot;] = &quot;/usr/bin/python3.7&quot;
~</code></pre>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[No module named 'pystan']]></title>
            <link>https://velog.io/@de_youn/No-module-named-pystan</link>
            <guid>https://velog.io/@de_youn/No-module-named-pystan</guid>
            <pubDate>Tue, 02 Aug 2022 01:35:16 GMT</pubDate>
            <description><![CDATA[<h3 id="독자-대상📣">독자 대상📣</h3>
<blockquote>
<p>👉 fbprophet으로 그래프를 그리려는 분</p>
</blockquote>
<hr>
<h3 id="출간-이유❓">출간 이유❓</h3>
<blockquote>
<p>pip를 통해 fbprophet 설치 시, pystan 모듈 미설치 오류 확인</p>
</blockquote>
<hr>
<h3 id="문제-파악🔍">문제 파악🔍</h3>
<pre><code>Q: 분명 pystan 모듈을 설치했는데 
   No module named &#39;pystan&#39; 오류가 자꾸 떠요😓😓</code></pre><hr>
<h3 id="문제-해결🎊">문제 해결🎊</h3>
<pre><code>A: 저자 기준, python3.6에서는 아무 문제 없었지만, 
   python 3.7 로 업그레이드 시, 해당 문제를 발견했습니다.

   이를 보면 pystan 버전은 업그레이드 되었지만,
   fbprophet에서 사용하는 pystan 버전은 업그레이드 되지 않아서
   발생하는 오류로 추정됩니다.😄

   따라서 하단의 명령어처럼 pystan 버전을 명시하여 설치하시면
   문제없이 fbprophet이 설치되는 것을 확인하실 수 있습니다.😁😁</code></pre><pre><code class="language-bash">$ pip install pystan~=2.14</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Errno 28] No space left on device]]></title>
            <link>https://velog.io/@de_youn/Errno-28-No-space-left-on-device</link>
            <guid>https://velog.io/@de_youn/Errno-28-No-space-left-on-device</guid>
            <pubDate>Tue, 02 Aug 2022 00:53:56 GMT</pubDate>
            <description><![CDATA[<h3 id="독자-대상📣">독자 대상📣</h3>
<blockquote>
<p>👉 Docker Container로 무언가 구축중이신 분
👉 Docker Container 용량이 부족하신 분</p>
</blockquote>
<hr>
<h3 id="출간-이유❓">출간 이유❓</h3>
<blockquote>
<p>Docker 컨테이너 내에서 pip 설치 시, 용량 부족 에러 발생 확인</p>
</blockquote>
<hr>
<h3 id="문제-파악🔍">문제 파악🔍</h3>
<pre><code class="language-bash">Collecting pyspark
  Downloading pyspark-3.3.0.tar.gz (281.3 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 281.3/281.3 MB 5.8 MB/s eta 0:00:00
ERROR: Could not install packages due to an OSError: [Errno 28] No space left on device</code></pre>
<pre><code>Q: pip로 무언가 설치하려고 하면, 자꾸 디바이스에 남은 공간이 없다고 해요😥</code></pre><hr>
<h3 id="문제-해결🎊">문제 해결🎊</h3>
<pre><code>A: 로컬과 매핑된 도커 파일 시스템의 용량 부족 현상입니다😌
   파일시스템(FS)의 종류를 확인하시고,
   하단의 FS 종류별 솔루션을 참고해주세요❗❗</code></pre><ul>
<li>FS - EXT4<ol>
<li>docker container에서 매핑된 파일시스템명 확인<pre><code class="language-bash">$ df -h
Filesystem                                                                                       Size  Used Avail Use% Mounted on
/dev/mapper/docker-8:1-2360722-dc51708a7597fd588376b1355834b09fb3ea4e3ed34ef6c94c5d8664c780bbdd  9.8G  9.3G   25M 100% /</code></pre>
</li>
<li>dm table 수기 작성을 위한 작업<pre><code class="language-bash">$ sudo dmsetup table docker-8:1-2360722-dc51708a7597fd588376b1355834b09fb3ea4e3ed34ef6c94c5d8664c780bbdd
0 20971520 thin 253:0 162
# 상기의 20971520이 현재 docker container 용량</code></pre>
</li>
<li>원하는 용량 기입을 위한 작업<pre><code class="language-bash">$ echo 0 41943040 thin 253:0 162 | sudo dmsetup load docker-8:1-2360722-dc51708a7597fd588376b1355834b09fb3ea4e3ed34ef6c94c5d8664c780bbdd
# 상기의 41943040에 원하는 용량 기입</code></pre>
</li>
<li>dm 등록 작업 및 dm table 확인<pre><code class="language-bash">$ sudo dmsetup resume docker-8:1-2360722-dc51708a7597fd588376b1355834b09fb3ea4e3ed34ef6c94c5d8664c780bbdd
$ sudo dmsetup table docker-8:1-2360722-dc51708a7597fd588376b1355834b09fb3ea4e3ed34ef6c94c5d8664c780bbdd
0 41943040 thin 253:0 162
# 상단의 41943040처럼 변경된 테이블 내용 확인</code></pre>
</li>
<li>dm table 내용을 적용하기 위한 작업<pre><code class="language-bash">$ sudo resize2fs /dev/mapper/docker-8:1-2360722-dc51708a7597fd588376b1355834b09fb3ea4e3ed34ef6c94c5d8664c780bbdd</code></pre>
</li>
</ol>
</li>
<li>FS - XFS<ol>
<li>(FS - EXT4 의 4단계까지 동일)</li>
<li>dm table 내용을 적용하기 위한 작업<pre><code class="language-bash">$ sudo xfs_growfs /dev/mapper/docker-8:1-2360722-dc51708a7597fd588376b1355834b09fb3ea4e3ed34ef6c94c5d8664c780bbdd</code></pre>
</li>
</ol>
</li>
</ul>
<pre><code>A: 상기 절차대로 시행하면 컨테이너 용량 부족 현상이 해결됩니다😁😁😀</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[Hive Server run Error]]></title>
            <link>https://velog.io/@de_youn/Hive-Server-run-Error</link>
            <guid>https://velog.io/@de_youn/Hive-Server-run-Error</guid>
            <pubDate>Tue, 26 Jul 2022 05:13:05 GMT</pubDate>
            <description><![CDATA[<h3 id="독자-대상📣">독자 대상📣</h3>
<blockquote>
<p>👉 Hadoop eco system 구축중이신 분
👉 데이터 적재 및 처리를 위해 Hive를 사용하시는 분</p>
</blockquote>
<hr>
<h3 id="출간-이유❓">출간 이유❓</h3>
<blockquote>
<p>tez engine 기반의 Hive 구동 시, 에러 발생 확인</p>
</blockquote>
<hr>
<h3 id="문제-파악🔍">문제 파악🔍</h3>
<pre><code class="language-bash">Exception in thread &quot;main&quot; java.lang.RuntimeException:java.io.IOException: Previous writer likely failed to write hdfs://mycluster/user/root/.hiveJars/hive-exec-3.1.2-50b0545693ae9392559584116a172ee32922e57ae9ea0eb7dc120290c217c2d5.jar. Failing because I am unlikely to write too.
~
Caused by: java.io.IOException: Previous writer likely failed to write hdfs://mycluster/user/root/.hiveJars/hive-exec-3.1.2-50b0545693ae9392559584116a172ee32922e57ae9ea0eb7dc120290c217c2d5.jar. Failing because I am unlikely to write too.
~</code></pre>
<pre><code>Q: Hive 구동 시, 상기 오류가 발생해요💦💦</code></pre><hr>
<h3 id="문제-해결🎊">문제 해결🎊</h3>
<pre><code>A: 먼저 hive-site.xml에서 hive.exec.scratchdir의 값을 확인하세요.
   해당 값의 최상단(루트) 디렉터리를 확인한 후, 
   Hadoop NN(active)의 터미널로 이동합니다💨

   해당 터미널에서 
   hdfs dfs -chmod -R 777 /[상기에서 확인한 디렉터리명]
   을 입력하여 권한을 변경해줍니다.

   다시 hive 서버 구동을 하면 정상적으로 구동되는 것을 확인할 수 있습니다.</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[Docker Service Preparing error]]></title>
            <link>https://velog.io/@de_youn/Docker-Service-Preparing-error</link>
            <guid>https://velog.io/@de_youn/Docker-Service-Preparing-error</guid>
            <pubDate>Tue, 26 Jul 2022 04:40:15 GMT</pubDate>
            <description><![CDATA[<h3 id="독자-대상📣">독자 대상📣</h3>
<blockquote>
<p>👉 Docker Swarm을 통해 에코 시스템을 구축중이신 분</p>
</blockquote>
<hr>
<h3 id="출간-이유❓">출간 이유❓</h3>
<blockquote>
<p>간혹가다 Docker stack 제거 후, 재구축할 때, Docker service가 정상적으로 구동되지 않는 문제 발견</p>
</blockquote>
<hr>
<h3 id="문제-파악🔍">문제 파악🔍</h3>
<pre><code>Q #1: docker stack deploy ~ 명령어로 스택 배포했는데, 
      컨테이너 접속이 안되요😥</code></pre><pre><code>Q #2: docker service의 current state가 계속 preparing 상태에요❗❗</code></pre><hr>
<h3 id="문제-해결🎊">문제 해결🎊</h3>
<ul>
<li>Q #1<pre><code class="language-bash">docker service ls</code></pre>
<pre><code>A: 상기 명령어를 입력해서 replica를 확인해보세요.
   replica 값이 0/n 일 경우, 서비스가 아직 생성되지 않은 것입니다❗❗</code></pre></li>
<li>Q #2<pre><code class="language-bash">docker stack ps [프로젝트명] --no-trunc</code></pre>
<pre><code>A: 상기 명령어를 사용해서 NODE를 확인하시고, 해당 노드에 접속한 후,
   해당 노드에 배포하려는 컨테이너의 이미지가 있는지 확인해보세요❗❗</code></pre></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[해외 주식 분석 프로젝트-2]]></title>
            <link>https://velog.io/@de_youn/%ED%95%B4%EC%99%B8-%EC%A3%BC%EC%8B%9D-%EB%B6%84%EC%84%9D-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-2</link>
            <guid>https://velog.io/@de_youn/%ED%95%B4%EC%99%B8-%EC%A3%BC%EC%8B%9D-%EB%B6%84%EC%84%9D-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-2</guid>
            <pubDate>Fri, 22 Jul 2022 06:48:32 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요.
오랜만에 글을 쓰게 되네요.</p>
<p>요새 바쁜 일들이 너무 겹쳐서 정신이 없었습니당...😂😂</p>
<p>이번 글부터 본격적으로 프로젝트를 진행해보려고 합니다.</p>
<p>이렇게 글을 쓰면서 프로젝트를 진행한 적은 처음이라,
글솜씨가 서툴러도 양해 부탁드리겠습니다!🙏</p>
<hr>
<h2 id="목표🏆">목표🏆</h2>
<blockquote>
<p>👉 해외주식 데이터 수집이 가능한 웹 선정
👉 웹으로부터 크롤링할 데이터 선정
👉 크롤링 시작, 끝, 텀 선정
👉 크롤링 데이터 적재 프레임워크 선정</p>
</blockquote>
<hr>
<h3 id="1-크롤링-웹-선정🥇">1. 크롤링 웹 선정🥇</h3>
<p>우선 요즘 저작권법이 중요해진만큼 크롤링할 웹이 크롤링이 가능한지 여부부터 확인해야한다.</p>
<p>이를 위해, 크롤링할 웹 주소 뒤에 <strong>&#39;/robots.txt&#39;</strong> 를 입력하여 <strong>&#39;Disallow&#39;</strong> 부분을 확인하면 된다.</p>
<p>확인 결과, <strong>&#39;finance.yahoo.com&#39;</strong> 가 특정 디렉터리에 한해서는 <strong>Disallow</strong>가 명시되어있었지만, 그 외에는 명시되어있지 않아, 해당 웹을 선정하였다.</p>
<p>이미 이전 <a href="https://github.com/YounHS/Data_Integration_Center">프로젝트</a>에서도 해당 웹에서 크롤링한 적이 있으므로, 이번 프로젝트에서 사용하면 유용할 것으로 예상된다.</p>
<hr>
<h3 id="2-크롤링-데이터-및-시각-선정🥈">2. 크롤링 데이터 및 시각 선정🥈</h3>
<p>크롤링할 데이터는 너무 방대하다. 우선 실시간으로 주가를 크롤링해야하는건 너무나도 당연한 일이다.</p>
<p>이외에 굳이 실시간이 아니더라고 하루에 한 번씩 크롤링해도 되는 데이터(배치데이터)가 존재한다.</p>
<p>배치 데이터 항목으로는 PER, EPS, PEG, Open, Close, Market Capital, Volume 등이다. <del>이전 <a href="https://github.com/YounHS/Data_Integration_Center">프로젝트</a>에서 크롤링한 데이터 항목에 몇 가지 추가할 거다</del></p>
<p>또한, 이 프로젝트는 순수 저자 혼자만을 위한 것이므로, 모든 종목에 대한 데이터를 크롤링하는 것이 아니라, 관심있는 종목만을 크롤링할 것이다.</p>
<p>아무래도 해외주식이기 때문에, 크롤링 시각은 미장의 서머타임을 고려해 설정할 것으로 사료된다.</p>
<h3 id="3-적재-프레임워크-선정🥉">3. 적재 프레임워크 선정🥉</h3>
<p>이번 단계만큼은 이 프로젝트에서 새롭게 시작하는 단계이다😁</p>
<p>기존 <a href="https://github.com/YounHS/Data_Integration_Center">프로젝트</a>에서는 적재하기 위해 단순 RDB인 MySQL을 사용했다. 그러나 지금은 굉장히 많은 데이터 베이스들이 출시되어있고 이 중, 시계열 데이터베이스(TSDB)를 사용하려고 한다.</p>
<p>저자는 TSDB 중, 제조와 금융에서 많이 쓰이는 InfluxDB를 사용하여 데이터를 적재하려고 한다. InfluxDB를 써야하는 이유는 저자가 작성한 <a href="https://velog.io/@de_youn/InfluxDB-%EC%9C%A1%ED%95%98%EC%9B%90%EC%B9%99">InfluxDB 육하원칙</a>에 기재되어 있다.</p>
<p>적재 시, 실시간 주가를 적재하는 테이블(measurement)과 배치성 데이터를 적재하는 테이블(measurement) 두 가지를 생성해야할 것이다.</p>
<p><img src="https://velog.velcdn.com/images/de_youn/post/1f978fab-3a57-485f-b8b7-c8ff7503e1e9/image.png" alt="Data Collect Process"></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Sqoop SQL Server to Hive]]></title>
            <link>https://velog.io/@de_youn/Sqoop-SQL-Server-to-Hive</link>
            <guid>https://velog.io/@de_youn/Sqoop-SQL-Server-to-Hive</guid>
            <pubDate>Thu, 21 Jul 2022 07:29:14 GMT</pubDate>
            <description><![CDATA[<h3 id="독자-대상📣">독자 대상📣</h3>
<blockquote>
<p>👉 SQL Server 데이터를 Hive로 옮기시려는 분</p>
</blockquote>
<hr>
<h3 id="출간-이유❓">출간 이유❓</h3>
<blockquote>
<p>첫 번째 마이그레이션 이후, 데이터를 계속 덮어쓰는 방식을 사용하다가, 너무 답답해서 이어쓰는 방식을 채택</p>
</blockquote>
<blockquote>
<p>시계열 데이터가 기반일 때, 정말 유용하다❗❗ 강추 ❗❗❗❗</p>
</blockquote>
<hr>
<h3 id="문제-파악🔍">문제 파악🔍</h3>
<pre><code>Q: Sqoop을 사용하면 대중적인 RDB에서 HDFS로 
   데이터를 마이그레이션을 할 수 있는 건 아는데... 
   매일 덮어쓰기를 하니까 시간 소요가 너무 길어요😥</code></pre><pre><code>A: 아~ 울지 마시고~ 자 일단 Sqoop 커맨딩 사용 후, 
   Hive에서 테이블을 생성하는 방법까진 아시죠? 
   설마 테이블 생성하고 &#39;load data inpath~&#39; 커맨딩까지 쓰시진 않죠?🙂</code></pre><pre><code>Q: 음... &#39;load data inpath&#39;를 사용하지 않고 
   HDFS 데이터를 Hive에 적재할 수가 있나요??😲</code></pre><pre><code>A: Oh... jesus cr.. 아.. 그럴 수 있죠😌 
   그럼 &#39;load data inpath~&#39; 커맨딩 없이 Hive 테이블로 
   데이터를 적재하는 방법과 
   &#39;Sqoop을 사용하여 데이터 이어쓰기&#39; 방법에 대해 
   한 번 끄적여드리겠습니다.</code></pre><hr>
<h3 id="문제-해결🎊">문제 해결🎊</h3>
<ul>
<li><p>&#39;load data inpath&#39; 없이 Hive 테이블과 연동</p>
<pre><code class="language-bash">sqoop import 
    --username xxxx 
    --password xxxxx
    --num-mappers 1 
    --connect &quot;jdbc:sqlserver://118.219.11.126:1566;database=ctf_spc&quot; 
    --query &quot;select a.xxxx, count(a.xx) as xxx  
             from aaaaa a with (nolock)
                  inner join bbbbb b with (nolock) 
                  on a.xxx = b.yyy and
                     a.xxx = b.yyy and
                     a.xxx = b.yyy and
                     a.xxx = b.yyy and
                     a.xxx = b.yyy and
                     a.xxx = b.yyy and
                     a.xxx = b.yyy
                  inner join ccccc c 
                  on b.yyy = c.zzz and
                     b.yyyy = c.zzzz and
                     b.yyyyy = c.zzzzz 
                  inner join ddddd d 
                  on b.yyy = d.qqq and
                     b.yyy = d.qqq and
                     b.yyy = d.qqq and
                     b.yyy = d.qqq and
                     b.yyy = d.qqq 
             where \$CONDITIONS 
             group by a.xxx&quot; 
    --delete-target-dir
    --target-dir /date_data_count/ 
    --as-textfile</code></pre>
<pre><code class="language-sql">create external table seokjin_date_data_count (F_WORKDATE DATE, data_count INT) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY &#39;,&#39; 
LINES TERMINATED BY &#39;\n&#39; 
stored as textfile 
location &#39;/date_data_count&#39;;</code></pre>
<pre><code>A: 우선 위 첫 번째 커맨딩에서 &#39;--delete-target-dir&#39; 과 
 &#39;--target-dir&#39; 옵션을 봐주세요. 

 &#39;--delete-target-dir&#39;은 마이그레이션 하기 전, 
 대상 디렉터리가 기 존재하는지 확인하여 삭제해주는 옵션이에요. 

 그 후, &#39;--target-dir&#39;을 사용하여 대상 디렉터리를 생성하고
 마이그레이션을 진행합니다😁</code></pre><pre><code>A: 두 번째 커맨딩이 질문자 분이 궁금해하시는 
 &#39;load data inpath~&#39; 없이 
 다이렉트로 Hive 테이블에서 HDFS 내 데이터를 확인할 수 있는 작업니다. 

 마지막에 &#39;location~&#39; 구문을 추가하는데 
 이 때, 로케이션은 
 첫 번째 커맨딩의 &#39;--target-dir&#39;에서 설정한 디렉터리명과
 동일하게 설정해야합니다😁😁</code></pre></li>
<li><p>첫 마이그레이션 이후, 데이터 이어쓰기</p>
<pre><code class="language-bash">sqoop import 
    --username xxxx 
    --password xxxxx
    --num-mappers 1 
    --connect &quot;jdbc:sqlserver://118.219.11.126:1566;database=ctf_spc&quot; 
    --query &quot;select a.xxxx, count(a.xx) as xxx  
             from aaaaa a with (nolock)
                  inner join bbbbb b with (nolock) 
                  on a.xxx = b.yyy and
                     a.xxx = b.yyy and
                     a.xxx = b.yyy and
                     a.xxx = b.yyy and
                     a.xxx = b.yyy and
                     a.xxx = b.yyy and
                     a.xxx = b.yyy
                  inner join ccccc c 
                  on b.yyy = c.zzz and
                     b.yyyy = c.zzzz and
                     b.yyyyy = c.zzzzz 
                  inner join ddddd d 
                  on b.yyy = d.qqq and
                     b.yyy = d.qqq and
                     b.yyy = d.qqq and
                     b.yyy = d.qqq and
                     b.yyy = d.qqq 
             where a.DATE = &#39;2022-07-21&#39; and
             \$CONDITIONS 
             group by a.xxx&quot; 
    --target-dir /date_data_count/ 
    --as-textfile
    --append</code></pre>
<pre><code>A: 출간 이유에서 보면 시계열 데이터 사용 시, 추천한다고 했었쥬? 

 &#39;where&#39; 구문을 보시면 특정 날짜를 추가하려고 하는 모습이 보입니다. 

 그리고 데이터를 이어쓰려는 목적이기 때문에 
 &#39;--delete-target-dir&#39; 옵션이 사라지고, 

 마지막에 &#39;--append&#39; 옵션이 추가된 것을 확인할 수 있어요😁</code></pre></li>
</ul>
<p><img src="https://velog.velcdn.com/images/de_youn/post/4e9c1f82-51eb-4ee6-ac7a-50cce96eef97/image.png" alt="sqoop import to hdfs"></p>
<blockquote>
<p>위의 방식을 따르면, 더이상 데이터 덮어쓰기로 인해 소요한 시간들을 아낄 수 있답니다😁
시간은 금이니까요<del>~ ~</del>Time is Gold~~</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[Hadoop local to HDFS]]></title>
            <link>https://velog.io/@de_youn/Hadoop-local-to-HDFS</link>
            <guid>https://velog.io/@de_youn/Hadoop-local-to-HDFS</guid>
            <pubDate>Thu, 21 Jul 2022 04:49:48 GMT</pubDate>
            <description><![CDATA[<h3 id="독자-대상📣">독자 대상📣</h3>
<blockquote>
<p>👉 Linux(Ubuntu) 환경에서 Hadoop을 사용하시는 분
👉 Local pc에서 HDFS로 파일을 옮기시려는 분</p>
</blockquote>
<hr>
<h3 id="출간-이유❓">출간 이유❓</h3>
<blockquote>
<p>플랫폼 구축 중, 문제가 발생해서?😂</p>
</blockquote>
<blockquote>
<p>귀찮다고 코드 수정 안 하다가 수정한줄 착각하고 뫼비우스의 띠에 빠져서? 🤣🤣🤣</p>
</blockquote>
<hr>
<h3 id="문제-파악🔍">문제 파악🔍</h3>
<pre><code>Q: 분명 python에서 &quot;Popen&quot; 라이브러리 사용해서 
   처음에 적용한 put 명령어는 잘 됬는데, 
   그 이후로는 put이 안 되는데 왜 그러는지 아오?😥</code></pre><pre><code>A: Ah~ 그럼 먼저 python에서 말고, 
   Hadoop 로컬 PC에서 경이 적용한 그 역겨운 put 명령을 
   그대로 입력해보시겠소?</code></pre><pre><code>Q: Oh~ HolyMoly~ RolyPoly~ Guacamole~ &#39;File exists&#39; 오류가 뜨오! 
   파일이 이미 존재해서 그런거 같은데... 
   어떡해야 하오?😥</code></pre><hr>
<h3 id="문제-해결🎊">문제 해결🎊</h3>
<pre><code>A: 그 역겨운 put 명령줄에 한 가지 빠진게 있소... 
   바로 -f 옵션이오. 
   이 옵션만 쓴다면 그 역겨운 커맨딩에서 향기가 나게 될 것이오.😃😃</code></pre><blockquote>
<p>저자는 귀차니즘으로 인해 -f 옵션 추가를 미루다가 문제 발생 시, 다른 부분에서 <del>뺑이친</del> 헛수고한 경험이 존재함...</p>
</blockquote>
<blockquote>
<p>나처럼 개고생말고 일단 put 옵션이 안 먹힌거 같으면 HDFS web ui 접속해서 파일의 &quot;<strong>Last Modified</strong>&quot; 를 확인해보시길...</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/de_youn/post/392877c6-c121-4329-8d41-f1c74b0a8013/image.png" alt="HDFS Last Modified Check"></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Pandas 상관분석]]></title>
            <link>https://velog.io/@de_youn/Pandas-%EC%83%81%EA%B4%80%EB%B6%84%EC%84%9D</link>
            <guid>https://velog.io/@de_youn/Pandas-%EC%83%81%EA%B4%80%EB%B6%84%EC%84%9D</guid>
            <pubDate>Thu, 21 Jul 2022 03:21:47 GMT</pubDate>
            <description><![CDATA[<h3 id="독자-대상📣">독자 대상📣</h3>
<blockquote>
<p>👉 Pandas Dataframe을 사용하여 상관분석을 하고 싶은 분
👉 상관 분석을 그래프화하고 싶은 분</p>
</blockquote>
<hr>
<h3 id="출간-이유❓">출간 이유❓</h3>
<blockquote>
<p>상관분석, 그래프화 정도는 구글링이나 책 좀 보면 누구나 쉽게 따라할 수 있쥬? 😀</p>
</blockquote>
<blockquote>
<p>근데 간혹가다 결과물로 생성된 그래프에 &quot;<em><strong>NaN</strong></em>&quot;으로 빈 줄이 쭈~욱 그어진 분들도 계시쥬? 😂</p>
</blockquote>
<blockquote>
<p>🙏이 글 그 분들을 위해 바칩니다...🙏</p>
</blockquote>
<p><del>R.I.P My time (like gold)...</del></p>
<hr>
<h3 id="문제-파악🔍">문제 파악🔍</h3>
<p><img src="https://velog.velcdn.com/images/de_youn/post/8c4fe10c-bf7a-4f9c-b22c-f280440be726/image.png" alt="corr graph issue"></p>
<pre><code>Q: 아니... 하란대로 프밍했는데 중간중간에 왜 그래프가 비어있어요?</code></pre><pre><code>A: 예... 저도 이거 때문에 Dataframe 컬럼별로 NaN 제거,
   corr() 결과 Dataframe에서 NaN 제거 했는데, 
   그게 문제가 아니더라구요 ㅋㅋㅋㅋㅋ 근본부터 문제였더라구요😄😄</code></pre><pre><code>Q: 그래서 뭐가 문제고, 어떻게 고쳐야 하는데요?</code></pre><hr>
<h3 id="문제-해결🎊">문제 해결🎊</h3>
<blockquote>
<p>cor(i,j) = cov(i,j)/[stdev(i)*stdev(j)]</p>
</blockquote>
<pre><code>A: corr() 상관계수 계산을 할 땐 위와 같은 수식을 쓴단 말이지? 
   근데 보여? stdev... 표준편차 알지?
   이 표준편차 값이 0이 되면 계산 결과가 NaN이 나오더라곸ㅋㅋㅋ
   해결절차는 아래에 적어놨으니까 참고해😀</code></pre><ol>
<li>Dataframe에서 std를 계산</li>
<li>std가 0.00000 이상인 컬럼명만 리스트로 추출</li>
<li>Dataframe에 추출한 컬럼 리스트 필터링</li>
</ol>
<pre><code>A: 잘 모르겠다고? pseudo-code 적어줄테니까 참고해~</code></pre><pre><code class="language-python">dataframe.dropna(axis=1, inplace=True)

std_df = dataframe.std(axis=0)
filtered_col_list = std_df[std_df &gt; 0.00000].index.tolist()

dataframe = dataframe[filtered_col_list]
print(dataframe.corr())</code></pre>
<p><img src="https://velog.velcdn.com/images/de_youn/post/4e8e16e1-a90a-4c06-b09a-6de500d3f573/image.png" alt="corr graph solution"></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[InfluxDB 육하원칙]]></title>
            <link>https://velog.io/@de_youn/InfluxDB-%EC%9C%A1%ED%95%98%EC%9B%90%EC%B9%99</link>
            <guid>https://velog.io/@de_youn/InfluxDB-%EC%9C%A1%ED%95%98%EC%9B%90%EC%B9%99</guid>
            <pubDate>Thu, 21 Jul 2022 02:18:14 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/de_youn/post/135cd26e-663a-4d0f-83c8-0a0b9990d4a2/image.png" alt="InfluxDB WEB UI 메인 화면"></p>
<h3 id="influxdb-무엇인지-1-what">InfluxDB 무엇인지? (<strong>1 what</strong>)</h3>
<ul>
<li><a href="https://docs.influxdata.com/influxdb/v2.0/">공식 문서 참고</a></li>
</ul>
<p><img src="https://velog.velcdn.com/images/de_youn/post/aae206f5-31bf-4378-a0ef-4244d34f0f19/image.png" alt="InfluxDB WEB UI Explore 탭"></p>
<h3 id="influxdb-언제-사용-가능하신지-2-when">InfluxDB 언제 사용 가능하신지? (<strong>2 when</strong>)</h3>
<ul>
<li>(<strong>BEST</strong>)IoT 센서, 웹 크롤링 등에서 주기(초/분)마다 데이터가 수집되는 경우</li>
<li>(<strong>NOT RECOMMEND</strong>)기 적재된 시계열 데이터(파일 및 테이블 형태)를 처리하여 다시 적재하려는 경우</li>
</ul>
<p><img src="https://velog.velcdn.com/images/de_youn/post/f16309e2-8348-4b67-8978-c69ade5bbaca/image.png" alt="InfluxDB WEB UI Books 탭"></p>
<h3 id="influxdb-어디서누가-사용하시는지-1-wherewho">InfluxDB 어디서/누가 사용하시는지? (<strong>1 where/who</strong>)</h3>
<ul>
<li>시계열 데이터 적재가 필요한 곳 (ex. 제조업, 금융업 등)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/de_youn/post/db2758d5-9e36-47b4-9e83-3481429be091/image.png" alt="InfluxDB WEB UI Boards 탭"></p>
<h3 id="influxdb-왜-사용하시는지-4-why">InfluxDB 왜 사용하시는지? (<strong>4 why</strong>)</h3>
<ul>
<li>시계열 데이터를 위해 특별히 제작되었기 때문</li>
<li>RDB는 시계열 워크로드에 최적화되어있지 않기 때문</li>
<li>방대한 시계열 데이터를 저장할 수 있기 때문</li>
<li>실시간 분석을 신속하게 수행할 수 있기 때문</li>
</ul>
<p><img src="https://velog.velcdn.com/images/de_youn/post/7538a467-b012-4ccf-84ca-6b760035ecf3/image.png" alt="InfluxDB WEB UI Tasks 탭"></p>
<h3 id="influxdb-어떻게-사용하는지-6-how">InfluxDB 어떻게 사용하는지? (<strong>6 how</strong>)</h3>
<ul>
<li>macOS에서</li>
<li>Linux에서</li>
<li>Windows에서</li>
<li>Docker에서</li>
<li>Kubernetes에서</li>
<li>Raspberry Pi에서</li>
</ul>
<p><img src="https://velog.velcdn.com/images/de_youn/post/df32ad4a-833b-4561-8d93-0a1dd33ea4ad/image.png" alt="InfluxDB WEB UI Alerts 탭"></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[해외 주식 분석 프로젝트-1]]></title>
            <link>https://velog.io/@de_youn/%ED%95%B4%EC%99%B8-%EC%A3%BC%EC%8B%9D-%EB%B6%84%EC%84%9D-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-1</link>
            <guid>https://velog.io/@de_youn/%ED%95%B4%EC%99%B8-%EC%A3%BC%EC%8B%9D-%EB%B6%84%EC%84%9D-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-1</guid>
            <pubDate>Tue, 05 Jul 2022 08:04:45 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요.</p>
<p>프로젝트를 진행하기에 앞서 간략한 자기소개부터 하겠습니다.</p>
<p>저는 2020년 초부터 
미국 배당주/성장주에 장기투자중인 서학개미입니다.</p>
<p>약 2년의 투자 경험을 바탕으로 보유중인 주식에 대한 정보를
한눈에 쉽게 파악 및 분석해보고 싶어서
본 프로젝트를 기획하게 되었습니다.</p>
<p>현재 <strong>DE</strong> 겸 <strong>FE/BE</strong> 직무를 맡고 있으므로 본 프로젝트를 진행함에 따라 커리어 및 투자 능력에 큰 도움이 될 것으로 예상합니다.</p>
<p>본 프로젝트는
2년여 전, Github을 통해 <strong>&quot;보유중인 펀드의 수익금과 주식의
시가/고가/저가/종가를 시각화해주는 프로젝트&quot;</strong> 를 기반하여
리빌딩하는 식으로 진행할 예정입니다.</p>
<p>이전에 진행했던 프로젝트 정보는 <a href="https://github.com/YounHS/Data_Integration_Center">여기</a>를 참고해주시면 감사하겠습니다.</p>
<hr>
<p><em>주식 시장은 확신을 요구하며,확신이 없는 사람들은 반드시 희생된다.</em> </p>
]]></description>
        </item>
    </channel>
</rss>