월별 글 목록: 2018년 5월월

jupyter server 보안 설정하기

Published / by greennuri

jupyter Notebook 서버를 올렸는 아무나 접근하게 하고 싶지 않을때 다음과 같이 설정한다.

jupyter notebook --generate-config
위 코드를 실행 시키면
/home/jupyter/.jupyter/jupyter_notebook_config.py 파일이 생긴다.
위 파일에서 아래와 같은 항목을 아래와 같이 설정한다.

c.NotebookApp.ip = '0.0.0.0'
위 코드는 외부 접속이 가능하게 허용하는 설정

c.NotebookApp.port = 8888
위 코드는 접속 포트 설정, 방화벽이나 기타 이유로 바꿔야 할시 위 값을 바꾸면 됨.

c.NotebookApp.open_browser = False
위 코드는 주피터를 실행할때 브라우저를 열지 않게 하는 설정
c.NotebookApp.notebook_dir = "/path/to/ipython"
위 코드는 주피터 작업 디렉토리를 설정
c.NotebookApp.password = u'password'
위 코드는 주피터 접속시 암호를 입력받게 하는 설정, 당연히 설정된 암호와 맞아야 ^^

c.NotebookApp.keyfile = '/home/jupyter/.ssh/mykey.key'
c.NotebookApp.certfile = '/home/jupyter/.ssh/mycert.pem'
위 두개 코드는 ssl 설정에서 나온 암호파일로 이 설정이 셋팅 되면
http://ip:8888이 아니고 https://ip:8888로 접속해야 한다.

openssl로 암호화 설정은 다음과 같이 수행
$openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem

위 명령을 배쉬 쉘에서 실행하면 365일 동안 쓸수 있는 인증서 생성

jupyter ubuntu linux daemon으로 설정하기

Published / by greennuri

ubuntu에서 jupyter daemon으로 설정하기

다음과 같은 방식으로 서비스 설정 파일을 작성한다.

위치 : /etc/systemd/system/
파일명 : ipython-notebook.service

내용

  • Unit
  • type=simple
  • PIDFile=/var/run/ipython-notebook.pid
  • ExecStart=/usr/bin/ipython notebook –no-brower
  • User=ipynb
  • Group=ipynb
  • WorkingDirectory=/home/ipynb/notebooks
  • Install
  • WantedBy=multi-user.target

위의 설정 파일에서는 서비스를 돌리는 계정과 그룹을 ipynb로 정의 하고 있다. 그러므로 계정을 추가 해야 한다

  • useradd ipynb
  • su – ipynb
    cd $IPYNB HOME ipynb로 계정 전환후 ipython 홈 디렉토리로 이동한다.
    systemctl daemon-reload
    systemctl enable ipython-notebook
    systemctl start ipython-notebook

위와 같이 설정하면 동작하는데 다음과 같은 오류가 발생할수 있다.
OSError: [Errno 13] Permission denied: '/run/user/1000/jupyter'

외와 같은 오류가 발생시 XDG_RUNTIME_DIR 값을 설정해재 하면 처리 됨. 관련 깃허브 이슈

그외에 다른 링크 공유

jupyter에서 암호 설정하기

Published / by greennuri

출처 :
http://jupyter-notebook.readthedocs.io/en/stable/public_server.html

jupyter notebook을 서버로 운영하다 보면 주피터를 실행시키면 token을 입력해야지 웹 브라우저에서 접근이 허용가능하게 되어 있다.

아무나 접속하지 못하게 하기위한 방법인데, 이게 좀 길고 프로세스를 다시 뛰울때 마다 바뀌기 때문에 가끔은 햇깔리기도 하다.
그래서 고정된 암호를 설정하는 방법을 찾아 보니 다음과 같은 방법이 있다.

주피터 설정은 jupyter_notebook_config.py파일을 편집 하면 된다.
이 파일의 위치는 $HOME.jupyter\jupyter_notebook_config.py 이다.
이 파일이 없을 경우 아래와 같이 입력 하면 작성된다.
‘jupyter noteook generate-config’

간단히 암호를 설정하려면 다음과 같이 입력 하면 된다.

‘$ jupyter notebook password
Enter password: ****
Verify password: ****
[NotebookPasswordApp] Wrote hashed password to /Users/you/.jupyter/jupyter_notebook_config.json’

위와 같이 jupyter notebook password를 입력하면 암호를 입력받고 그 암호를 암호화시켜서 jupyter_notebook_config.json으로 저장 된다.

pyspark dataframe 관련함수 1

Published / by greennuri
  1. rdd -> dafaFrame 변환
    dataframe df = spark.createDataFrame(rdd,columns)
    columns : array of string
    ie
    rdd에 두개의 컬럼이있다고 치고
    dataFrame df = spark.createFataFrame(rdd,["key","value"])

  2. 기존 데이터 프레임 컬럼에 기존 컬럼 데이터로 새로운 컬럼 더하기
    df = df.withcolumn(new_column_name, function | column)
    ie. 기존 데이터 그대로 새로운 컬럼에 할당
    df = df.withcolumn("new_column", df["value"])
    ie. 기존 데이터에 “test” 문자열을 더해서 할당 하기
    df = df.withColumn("new_column", df["value"]+"test")
    ie. 기존의 데이터에 사용자 정의 함수 결과를 새로운 컬럼으로 추가 하기
    from pyspark.sql.functions import udf
    from pyspark.sql.types import *
    def plus_text(str):
    return str + "_test"
    udf1 = udf(plus_text, StringType())
    df = df.withColumn("col1", udf1("content"))

pyspark와 zeppelin 연동하기

Published / by greennuri

분산 처리 플랫폼 중 하나인 스파크(spark)를 제플린(apache zeppelin, 웹 개발 플랫폼 아님)) 연동 시키기 위한 삽질을 정리

제플린을 기준으로 스파크 설정

현재 제플린은 https://zeppelin.apache.org/download.html 홈페이지에서 다운 받을수 있으며 버젼은 0.7.3(2018.5.7일 현재)이며
이 버젼은 스카프 2.1, 2.2까지 지원한다.

스파크는 https://spark.apache.org/downloads.html 링크에서 다운 받을수 있으며 최신 버젼은 2.3.0까지 나와 있지만, 제플린과 연동을 위해서는 2.1.0을 추천(2.2버젼도 지원 된다고 하지만 좀 애매해서 한 버젼 낮은걸 사용)

그리고 spark 2.1.0 버젼은 python 3.6 버젼에서 호환성 문제(오류가 생김… 오류 생기니깐 호환이 안 맞는거 맞지 않을까…)

그래서 spark 2.1.0 설정에서 PYTHON_PATH에 python 3.5 버젼 python 파일을 설정해야 함.

아래 링크에서는 spark 2.1.0에서 python 3.6에서 사용하기 위한 픽스를 설명

http://www.blog.howechen.com/fix-compatibility-of-apache-spark-2-1-0-with-python-3-6/

그냥 아나콘다에서 python3.5 환경 추가 시켜서 PYTHON_PATH에 할당하고 사용함..

귀차니즘… ^^