2016-04-28 7 views
7

Znalazłem kilka samouczków, jak skonfigurować IPython Notebook tak, aby ładował zmienną Context Spark sc używając PySpark (podobnie jak ten: http://ramhiser.com/2015/02/01/configuring-ipython-notebook-support-for-pyspark/).Jak uruchomić niestandardowy skrypt w języku Python na platformie Juwater Notebook (do rozruchu Sparka)?

Problem polega na tym, że od teraz używamy programu Jupyter Notebook zamiast programu IPython Notebook, nie możemy utworzyć skryptu instalacyjnego, który ładowałby zmienną Spark Context, podobnie jak w przypadku IPython (który powinien znajdować się w ~/.ipython/profile_pyspark/startup/00-pyspark-setup.py).

Pytanie brzmi: Jakie są konfiguracje na Japyter Notebook, które wykonają skrypt 00-pyspark-setup.py podczas uruchamiania?

+0

brzmi jak chcesz [Apache Toree] (https://github.com/apache/incubator-toree). Instalacja wymaga jednak trochę wysiłku. –

Odpowiedz

2

EDIT

Oryginalny odpowiedź powinna nadal działać, ale jest nieporęczny i używamy w następujący sposób w dzisiejszych czasach, który używa PySpark zbudowany w zmiennych:

export PYSPARK_DRIVER_PYTHON=jupyter 
export PYSPARK_DRIVER_PYTHON_OPTS="notebook" 

Następnie wystarczy uruchomić PySpark bezpośrednio jak ty normalnie, ale przy powyższych ustawieniach uruchamia notebooka zamiast powłoki:

cd path/to/spark 
bin/pyspark --master local[*] # Change to use standalone/mesos/yarn master and add any spark config 

Jeśli otworzysz nowy notatnik, znajdziesz dla siebie Spark. Można dodać inne opcje Juopyter jeśli chcesz, aby dopasować swoje środowisko, jak:

export PYSPARK_DRIVER_PYTHON_OPTS="notebook --ip='*' --no-browser" 

ORYGINALNEGO ODPOWIEDZI

Nadal można skonfigurować rzeczy z tych samych początkowych etapach, tj utworzyć profil za pomocą ipython profile create pyspark i umieść skrypt uruchamiania w $(ipython profile locate pyspark)/startup/.

Następnie, aby udostępnić go w notebookach Jupyter, należy określić jądro, które korzysta z tego profilu, tworząc plik $(ipython locate)/kernels/pyspark/kernel.json. To właśnie kopalnia wygląda następująco:

{ 
    "display_name": "PySpark", 
    "language": "python", 
    "argv": [ 
    "python", 
    "-m", "ipykernel", 
    "--profile=pyspark", 
    "-f", "{connection_file}" 
    ], 
    "env": { 
    "PYSPARK_SUBMIT_ARGS": " --master spark://localhost:7077 --conf spark.driver.memory=20000m --conf spark.executor.memory=20000m" 
    } 
} 

Ważne bit jest w sekcji argv. Informacje zawarte w sekcji env jest odbierany przez skrypt startowy używam:

import os 
import sys 

spark_home = '/opt/spark/' 
os.environ["SPARK_HOME"] = spark_home 
sys.path.insert(0, spark_home + "/python") 
sys.path.insert(0, os.path.join(spark_home, 'python/lib/py4j-0.9-src.zip')) 

pyspark_submit_args = os.environ.get("PYSPARK_SUBMIT_ARGS", "") 
pyspark_submit_args += " pyspark-shell" 
os.environ["PYSPARK_SUBMIT_ARGS"] = pyspark_submit_args 

filename = os.path.join(spark_home, 'python/pyspark/shell.py') 
exec(compile(open(filename, "rb").read(), filename, 'exec')) 

Jak widać jest dość podobna do tej, którą powiązana tylko plus argumenty, które są zdefiniowane w jądrze i dodatek argumentu, który jest potrzebny w najnowszej wersji PySpark.

Whit ten można uruchomić jupyter notebook, otworzyć stronę główną w przeglądarce i można teraz tworzyć notebooki pomocą tego nowego jądra:

create new pyspark notebook

+1

Dzięki za odpowiedź @sgvd, myślę, że jesteśmy blisko. Rzeczywiście stworzyłem jądro, a teraz mój notatnik Juwater pokazuje nowy notebook PySpark. Ale po utworzeniu przez mojego notebooka (z kernel PySpark) wykonywanie 'sc' zwraca pusty ciąg ... (co oznacza, że ​​Spark nie jest załadowany) Jedyne zmiany, które wprowadziłem do twojego skryptu, zmieniały lokalizację' spark_home' i wersję py4j. Nie zmieniłem 'kernel.json' (może powinienem, szczególnie' {plik_połączenia} '?) – htaidirt

+0

Z której wersji Sparka korzystasz?Działa to dla mnie przynajmniej dla 1.6.x. Upewnij się też, że używasz prawidłowego głównego adresu URL. Ten w mojej odpowiedzi, 'spark: // localhost: 7077' jest dla samodzielnego klastra Spark z mistrzem działającym na tej samej maszynie co Jupyter. Jeśli używasz Mesos lub Yarn, zlec niech twój master gdzieś indziej, lub twój master nie nasłuchuje na 'localhost' musisz to zmienić. – sgvd

+0

Dostałeś to do pracy? – sgvd