2024년 5월 22일 수요일

우분투에 dash-to-dock 설치

 1. 사용중인 그놈 쉘 버전 확인

gnome-shell --version

2. 아래 사이트에 그놈쉘 버전에 맞는 버전을 다운로드

dash-to-dock 사이트 : https://extensions.gnome.org/extension/307/dash-to-dock/

3 다운받은 파일을 아래와 같이 설치

$ mv 다운로드/다운파일명 dash-to-dock@micxgx.gmail.com.zip

$ mkdir -p ~/.local/share/gnome-shell/extensions/

$ unzip dash-to-dock@micxgx.gmail.com.zip -d ~/.local/share/gnome-shell/extensions/dash-to-dock@micxgx.gmail.com/

4. 로그아웃 - 로그인

5. 그놈 확장 설치

$ sudo add-apt-repository universe

$ sudo apt install gnome-shell-extensions gnome-shell-extension-prefs

6. 앱에서 '확장' extension 에서 들어가 설정

2024년 3월 18일 월요일

HTML 구조의 이해와 웹크롤링

참조 : https://wikidocs.net/127846

1. HTML 구조의 이해

HTML은 웹 문서를 만들기 위하여 사용하는 기본적인 웹 언어의 한 종류이다. 하이퍼텍스트를 작성하기 위해 개발되었으며 인터넷 서비스의 하나인 월드와이드웹(WWW)을 통해서 볼 수 있는 문서를 만들 때 사용하는 웹 언어의 한 종류이다. 특히 인터넷에서 웹을 통해 접근되는 대부분의 웹 페이지들은 HTML로 작성되는데 문서의 글자 크기, 글자색, 글자모양, 그래픽, 문서이동(하이퍼링크) 등을 정의하는 명령어들이 있다. HTML에서 사용하는 명령어는 태그(tag)라고 하는데 꺽쇠괄호'<>'를 사용하여 나타낸다. HTML 문서는 크게 Head 부분과 Body로 나누어지는데 Head 부분에는 문서의 제목을 포함한 기본적인 정보들을 포함하고 있으며 Body 부분에는 실제 웹 페이지에 나타나는 본문 내용으로 구성된다. 그래서 이러한 구조를 간단하게 요약해서 표기하면 아래와 같은 그림으로 표현할 수 있다.

좀더 구체적으로 위에 그림 중에 본문 문단을 의미하는 p 태그의 코드 기준으로 설명하면 HTML 요소는 시작 태그와 /로 시작하는 종료 태그 사이에 내용들이 들어 있으며, 시작 태그 안에는 속성명(Attributes) class와 속성값(Values) title을 포함하고 있고, 'HTML 문서의 구조'라는 내용을 포함하고 있는 태그이다.  보다 다양한 HTML 태그에 대한 이해를 위해서 자주 사용하는 태그들을 표의 형태로 정리하면 아래와 같다.


이러한 구조를 사람이 보기 편한 Text 문서로 파싱하기 위해서는 BeautifulSoup라는 라이브러리를 이용해야 한다. 뷰티플소프이라는 파이썬 라이브러리는 이와 같이 HTML 문서를 파싱하여 텍스트 데이터를 추출할 수 있는 유용한 도구이다.

2.HTML 문서의 파싱과 텍스트 추출

코랩을 이용해서 위에 그림으로 설명한 P 태그의 내용을 추출하는 방법을 설명하면 아래와 같은 코드를 실행시키면 추출이 가능하다.
먼저 뷰티풀소프라는 라이브러리를 아래와 같이 설치한다.

!pip install bs4
그리고 태그를 파싱해서 그안에 담겨있는 텍스트만 추출하여 정리하는 방법은 아래와 같다.

from bs4 import BeautifulSoup as bs
html_tag ='''<p class='title'> HTML 문서의 구조</p>'''
soup = bs(html_tag, 'html.parser')
print(soup.find("p").text)


3. 웹크롤링 방법 사례

웹크롤링을 하기 위해 우선적으로 해야할 일은 우리가 정보를 추출하고자하는 웹페이지의 로봇배제기준을 확인하여 추출이 가능한 웹페이지인지 확인해야한다. 현재 이 블로그의 로봇배제기준을 확인하려면 웹페이지 주소창에 있는 주소에 추가하여 /robots.txt 를 추가하여 확인하는 것이다. 

가. 기본정보 추출
기본적인 웹페이지의 정보를 크롤링하기 위해서는 아래와 같이 requests나 urllib 라이브러리를 이용하여 HTML 정보를 불러오고 이를 BeautifulSoup으로 파싱하여 구체적인 텍스트 정보를 얻을 수있다.

import requests
from bs4 import BeautifulSoup as bs
url = "https://enjoystat.blogspot.com/2024/03/html.html"
resp = requests.get(url)
print(resp)
html_src = resp.text
soup = bs(html_src, 'html.parser')

나. 태그사이에 있는 정보 추출
태그사이에 있는 정보를 추출하기 위해서는 f12 또는 Ctrl+Shift+I로 소스코드가 팝업되도록 펼치고, 좌상단 element select 또는 Ctrl+Shift+C로 마우스 선택기를 활성화하여 추출하고자하는 행에서 우측마우 클릭하고, copy - copy selector 선택 복사하여 아래와 같이 Select_one문에 붙여넣기하여 기본정보를 추출할 수 있다.

soup.select_one("#Blog1 > div.blog-posts.hfeed > div > div > div > div.post.hentry.uncustomized-post-template > h3").text.strip()

다. 속성값 추출
태그 내에 작성되어 있는 속성값을 추출하기 위해서는 get("속성명") 메소드를 활용하여 속성값을 추출할 수 있다.

print(soup.select_one("#Profile1 > div > a").get("href")) 

라. 반복되는 내용 추출
웹페이지에 있는 세부 텍스트 내용은 통상 패러그래프 태그인 P 태그에 반복적으로 들어있기 때문에 아래와 같이 for문을 이용하여 추출할 수 있다.

text =""
body=soup.find("div", {"class":"post-body entry-content"})

for para in body.select("p"):
    text=text+para.text.strip()
text







2024년 3월 3일 일요일

Ubuntu 22.04 server에 LAMP 설치를 통한 RStudio Server 설치와 owncloud 클라우드 서비스 운용 최신화

 1. 우분투 설치 및 기본설정 

가. root 계정 암호 설정

# passwd 실행해서 root unix 암호 등 설정

나. 관리자 계정 추가 및 sudo 권한부여 

# adduser admin

추가 확인 ls /home

# usermod -a -G sudo admin

다. hostname 변경

# hostnamectl set-hostname 원하는hostname

# hostnamectl 

라. 방화벽 설정 생략 : 호스트 컴퓨터 방화벽 사용하려면 ufw 비활성화 필요

# ufw disable


2. apache2 설치

가. 기본설치

# apt update

# apt install apache2

# apache2 -v

나. 인증 관련 설치 

https 인증서 관련 프로그램 설치

# apt install ssl-cert

무료인증서 발급 프로그램

# apt install certbot

다. 주요 apache2 모듈 설치

# a2enmod rewrite

# a2enmod headers

# a2enmod ssl

# a2dismod -f autoindex

변경사항 적용

# service apache2 restart

아파치 한경설정 분석

# apache2ctl -S

라. 환경설정 확인 

nano 에디터 설치

# apt install nano

기본언어셋 설치 utf-8로 설정(# 부분 제거)

# nano /etc/apache2/conf-available/charset.conf

보안설정 

# nano /etc/apache2/conf-available/security.conf

추가보안 패치 : 폴더보고, access 제어

# nano /etc/apache2/apache2.conf

서비스 재시작

# service apache2 restart

마. 아파치 개별 사용자 권한설정

# apt-cache search mpm-itk

# apt install libapache2-mpm-itk

# service apache2 restart

바. 기본사이트 추가 구성

서버 이름 ServerName localhost 예제 밑에 추가, 필요시 웹서버 어드민 추가 

# nano /etc/apache2/sites-available/000-default.conf

HTTPS 기본사이트 켜기

# mv /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/000-default-ssl.conf

서버네임 추가 ServerName localhost

# nano /etc/apache2/sites-available/000-default-ssl.conf

실행 및 확인

# a2ensite 000-default-ssl.conf

# apache2ctl -S

설정 적용 및 확인

# service apache2 reload

http://server_ip 웹페이지에서 확인 


3. PHP 설치 및 설정

가. 기본설치

* 내가 운용할 웹서비스 버전확인: owncloud php7.4까지만 호환, 8.0사용 불가 

# apt update

# apt install php

# php -v


최신 php가 아닌 다운그레이드는 아래 명령어로 버전 선택

sudo update-alternatives --config php

또는 아래처럼 수동으로 7.4 사용 설정

# a2dismod php8.3

# a2dismod php8.2

# a2dismod php8.1

# a2dismod php8.0

# a2enmod php7.4


추가 모듈 : 다국어처리모듈, 이미지 처리모듈, 원격ㄹ지정보 및 xml처리, 수학연산모듈, oauth 인증모듈 mysql 모듈, 의존성관리 모듈 등 설치

# apt install php-mbstring php-gd php-curl php-xml php-bcmath php-oauth php-mysql composer

기차 추가시 아래 명령어에서 이름 보고 선택 추가설치

# apt-cache search php- | grep ^php- | grep module


나. 보안 설치 : 파일 매치 거절 부분에 거절하고 싶은 확장자 추가 예제 확인

# nano /etc/apache2/mods-available/php7.4.conf

# service apache2 restart


다. 기본 time zone 설정

# nano /etc/php/7.4/apache2/php.ini

cron 및 console php php실행 참조

# nano /etc/php/7.4/cli/php.ini


라. phpinfo 파일 생성

# hostname 

hostname 보안

웹페이지에서 phpinfo확인을 위한 입력 

# echo "<?php phpinfo(); ?>" > /var/www/html/info.php

## nano  /var/www/html/info.php 들어가서 아래내용 붙여넣기 해도 됨

<?php phpinfo(); ?> 

apache2 재동작 및 확인

# systemctl restart apache2

# systemctl status apache2

아래주소로 확인 

http://서버의아이피/info.php

http://64.176.54.9/info.php


4. MySQL 설치 8.0 

패스워드 길이 조합 각별히 통제

# apt install mysql-server

# mysql -u root

mysql>create user '사용자id'@'localhost' identified by '사용자패스';

mysql>GRANT ALL PRIVILEGES ON *.* TO '사용자id'@'localhost';

mysql>flush privileges;

mysql>quit;


5.서버 R서버 설치

sudo apt update -qq

sudo apt install dirmngr gnupg apt-transport-https ca-certificates software-properties-common

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9

lsb_release -a 

sudo add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu jammy-cran40/"

sudo apt install r-base r-base-dev

R --version


6. Rstudio server 설치

#참조:https://rstudio.com/products/rstudio/

sudo apt-get install gdebi-core

sudo wget https://download2.rstudio.org/server/jammy/amd64/rstudio-server-2023.12.1-402-amd64.deb

sudo gdebi rstudio-server-2023.12.1-402-amd64.deb


서버에서 방화벽 설정 allow 8787

sudo rstudio-server status

sudo rstudio-server verify-installation


-working diretory 설정

터미널에서 mkdir rstudio_ex

상단메뉴를 이용하여 Session > Set Working Directory > Choose Directory.


한글깨지는 것방지

$ cd /usr/share/fonts

$ sudo wget http://cdn.naver.com/naver/NanumFont/fontfiles/NanumFont_TTF_ALL.zip

$ sudo unzip NanumFont_TTF_ALL.zip -d NanumFont

$ sudo rm -f NanumFont_TTF_ALL.zip

$ fc-list :lang=ko

R 콘솔에서

library(sysfonts) # 없다면 install.packages("sysfonts")

font_add("NanumGothicBold","/usr/share/fonts/NanumFont/NanumGothicBold.ttf")

par(family="NanumGothicBold")

우상단 전원버튼으로 재시작 확인

plot(c(1:5), main="가나다")

 

7.owncloud 서버 설치

가. 서버설치

sudo wget https://download.owncloud.com/server/stable/owncloud-complete-latest.tar.bz2

sudo tar -xjf owncloud-complete-latest.tar.bz2 


sudo mv owncloud /var/www/

sudo chown -R www-data:www-data /var/www/owncloud/

sudo chmod -R 755 /var/www/owncloud/


나.Mysql DB 생성 및 설정

$ sudo mysql

su

mysql -u root -p

mysql> create user 'yourid'@'%' identified by '자기 비번';

mysql> create database owncloud;

mysql>GRANT ALL on owncloud.* to 'yourid'@'%';

mysql> flush privileges;

mysql>exit;

su 사용자 

-https 가능하기 위해서는 SSL 인증서 필요(비쌈)

-Configure Apache for OwnCloud


다. 접속폴더 및 환경 설정

sudo nano /etc/apache2/conf-available/owncloud.conf

-------아래 입력

Alias /owncloud "/var/www/owncloud/"

<Directory /var/www/owncloud/>

  Options +FollowSymlinks

  AllowOverride All

 <IfModule mod_dav.c>

  Dav off

 </IfModule>

 SetEnv HOME /var/www/owncloud

 SetEnv HTTP_HOME /var/www/owncloud

</Directory>

---------------


라. 기타 설정 확인

sudo a2enconf owncloud

sudo a2enmod rewrite

sudo a2enmod headers

sudo a2enmod env

sudo a2enmod dir

sudo a2enmod mime

sudo systemctl restart apache2


마. 접속 및 설치확인

방화벽 포트 설정 : sudo ufw allow mysql

웹서비스 접속 및 확인

http://ip/owncloud


2024년 3월 2일 토요일

우분투 22.04에 R과 RStudio 설치

1. R 설치

sudo apt update -qq

sudo apt install dirmngr gnupg apt-transport-https ca-certificates software-properties-common

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9

lsb_release -a 

sudo add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu jammy-cran40/"

sudo apt install r-base r-base-dev

R --version


2. RStudio 설치 

sudo apt-get install gdebi-core

sudo wget https://download2.rstudio.org/server/jammy/amd64/rstudio-server-2023.12.1-402-amd64.deb

sudo gdebi rstudio-server-2023.12.1-402-amd64.deb


서버에서 방화벽 설정 allow 8787

sudo rstudio-server status

sudo rstudio-server verify-installation


-working diretory 설정

터미널에서 mkdir rstudio_ex

상단메뉴를 이용하여 Session > Set Working Directory > Choose Directory.


3. 한글깨지는 것방지

$ cd /usr/share/fonts

$ sudo wget http://cdn.naver.com/naver/NanumFont/fontfiles/NanumFont_TTF_ALL.zip

$ sudo unzip NanumFont_TTF_ALL.zip -d NanumFont

$ sudo rm -f NanumFont_TTF_ALL.zip

$ fc-list :lang=ko

R 콘솔에서

library(sysfonts) # 없다면 install.packages("sysfonts")

font_add("NanumGothicBold","/usr/share/fonts/NanumFont/NanumGothicBold.ttf")

par(family="NanumGothicBold")

우상단 전원버튼으로 재시작 확인

plot(c(1:5), main="가나다")

2022년 6월 4일 토요일

우분투 리눅스 Visual Studio Code의 C++ 개발환경 설정

 task.json 파일의 아래부분에 c++17 환경 설정


"args": [
"-fdiagnostics-color=always",
"-g",
"-std=c++17",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],

2021년 9월 4일 토요일

Spark에서 자료 형태별로 읽기 및 저장하기

 조건 : HDFS Cluster와 연동이 되고 있는 상태

start-dfs.sh

start-yarn.sh

start-all.sh

1. HDFS로부터 RDD 읽고 저장하기

종합된 자료만 읽기

val myrdd = sc.textFile("hdfs:///user/spark/text/word_counts")

myrdd.collect().foreach(println)

파일 위치까지 읽기

val rddWhole = spark.sparkContext.wholeTextFiles("hdfs:///user/spark/text/word_counts")

rddWhole.collect().foreach(println)

rddWhole.take(2).foreach(println)

저장하기

myrdd.saveAsTextFile("hdfs:///user/spark/word_rdd")


2. HDFS로부터 CSV 읽고 저장하기

val csv_data = sc.textFile("hdfs:///user/spark/names.csv")

csv_data.take(5)


csv파일을 데이터프레임으로 읽기

val df = spark.read.option("header", "true").csv("hdfs:///user/spark/names.csv")

df.show()


데이터프레임으로 저장하기

df.write.option("header","true").mode("overwrite").csv("hdfs:///user/spark/df")


3. json 파일 읽어오기 및 저장

val df1 = spark.read.json("file:///home/spark/names.json")

df1.show()

df1.write.json("hdfs:///user/spark/names.json")


2021년 8월 25일 수요일

Vagrant를 이용한 Hadoop과 Spark 설치

1. 설치환경 

virtualbox 설치된 상태

2. vagrant 다운로드 및 설치 : 다운로드 25분 정도 소요

wget https://raw.githubusercontent.com/spark-in-action/first-edition/master/spark-in-action-box.json

vagrant box add --name manning/spark-in-action spark-in-action-box.json

vagrant init manning/spark-in-action

3. 환경설정 파일 수정

nano Vagrantfile

-- 두개 수정 및 활성화

  config.vm.network "private_network", ip: "192.168.10.2"

  config.vm.network "public_network"

--

4. 가상환경 시작  

vagrant up 

# 나중에 virtualbox를 전원끄기 vagrant halt, 초기화시키고 싶으면 vagrant destroy 

# 모든 자료 없애기 vagrant box remove manning/spark-in-action  

5. 터미널 연결  

ssh spark@192.168.10.2

#password spark

로그인 하면 spark@spark-in-action으로 들어옴

6. 설치환경 확인

spark-submit --version

hadoop version

java -version

7. 사용자 하둡 운용환경 설정

nano .bashrc

--

## hadoop setup

export HADOOP_HOME=/opt/hadoop-2.7.2

export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native

--

source .bashrc

8. 하둡 시작

start-dfs.sh

start-yarn.sh

jps

hadoop fs -ls

hadoop fs -mkdir text

touch testfile0

echo >> testfile0 '안녕 안녕 나는 열심이 열심이 공부 공부 공부 사람'

hadoop fs -put testfile0 text

9. 하둡과 스파크 연동 준비

nano /opt/spark-2.0.0-bin-hadoop2.7/conf/spark-defaults.conf

--- master 를 local[*]을 yarn으로 변경

nano /opt/spark-2.0.0-bin-hadoop2.7/conf/spark-env.sh

---추가

export HADOOP_CONF_DIR=/opt/hadoop-2.7.2/etc/hadoop

---

# hdfs://localhost:9000/user/spark/text/test.txt파일의 경우 

---


10. 하둡과 스파크 연동

spark 클러스터 구동

$ start-master.sh

$ start-slaves.sh

$ jps  : 총 8개 프로세스 확인

---

3328 DataNode

3153 NameNode

4418 Worker

4467 Jps

3700 ResourceManager

3546 SecondaryNameNode

3853 NodeManager

4286 Master

---
이로서 스파크와 하둡 클러스터 연동 완료


11. 스파크에서 하둡파일 불러서 word count 하기

참고로 아래와 같이

### spark-shell scala wordcount

sc.textFile('text/test.txt').flatMap(_.split('\\W+')).map(w =>(w,1)).reduceByKey((a,b) =>(a+b)).foreach(println)

$ spark-shell 실행

--- 이후 scala 코드

var linesRDD = sc.textFile("hdfs://localhost:9000/user/spark/text/testfile0")

var wordsRDD = linesRDD.flatMap(_.split(" "))

var wordsKvRdd = wordsRDD.map((_, 1))

var wordCounts = wordsKvRdd.reduceByKey(_ + _ )

wordCounts.first

wordCounts.take(5)

# HDFS에 저장

wordCounts.saveAsTextFile("hdfs://localhost:9000/user/spark/text/word_counts")

### 


12. spark-sumit를 이용한 작업

spark-submit --master local /opt/spark-2.0.0-bin-hadoop2.7/examples/src/main/python/pi.py