9

Tôi đang sử dụng Jupyter máy tính xách tay với Pyspark với hình ảnh Docker sau: Jupyter all-spark-notebookThêm lọ tùy chỉnh để pyspark trong máy tính xách tay jupyter

Bây giờ tôi muốn viết một pyspark trực tuyến ứng dụng trong đó tiêu thụ thông điệp từ Kafka. Trong Spark-Kafka Integration guide, chúng mô tả cách triển khai một ứng dụng như vậy bằng cách sử dụng trình kích hoạt tia lửa (nó yêu cầu liên kết một bình bên ngoài - giải thích là trong 3. Triển khai). Nhưng kể từ khi tôi đang sử dụng máy tính xách tay Jupyter tôi không bao giờ thực sự chạy lệnh spark-submit, tôi giả sử nó được chạy ở phía sau nếu tôi nhấn thực thi.

Trong lệnh spark-submit bạn có thể chỉ định một số tham số, một trong số đó là -jars, nhưng không rõ ràng cách tôi có thể đặt tham số này từ sổ ghi chép (hoặc bên ngoài qua biến môi trường?). Tôi giả sử tôi có thể liên kết bình bên ngoài này một cách linh động thông qua các đối tượng SparkConf hoặc SparkContext. Có ai có kinh nghiệm về cách thực hiện liên kết đúng cách từ sổ ghi chép không?

Trả lời

6

tôi đã quản lý để làm cho nó làm việc từ bên trong máy tính xách tay jupyter mà đang chạy dưới dạng container toàn tia lửa.

Tôi bắt đầu sổ tay python3 trong jupyterhub và ghi đè cờ PYSPARK_SUBMIT_ARGS như được hiển thị bên dưới. Thư viện tiêu dùng Kafka đã được tải về từ kho maven và đặt trong thư mục home/nhà tôi/jovyan:

import os 
os.environ['PYSPARK_SUBMIT_ARGS'] = 
    '--jars /home/jovyan/spark-streaming-kafka-assembly_2.10-1.6.1.jar pyspark-shell' 

import pyspark 
from pyspark.streaming.kafka import KafkaUtils 
from pyspark.streaming import StreamingContext 

sc = pyspark.SparkContext() 
ssc = StreamingContext(sc,1) 

broker = "<my_broker_ip>" 
directKafkaStream = KafkaUtils.createDirectStream(ssc, ["test1"], 
         {"metadata.broker.list": broker}) 
directKafkaStream.pprint() 
ssc.start() 

Lưu ý: Đừng quên pyspark vỏ trong biến môi trường!

Tiện ích mở rộng: Nếu bạn muốn đưa mã từ gói tia lửa, bạn có thể sử dụng cờ --package thay thế. Một ví dụ về cách thực hiện điều này trong máy tính xách tay toàn màn hình có thể được tìm thấy here

0

Bạn có thể chạy máy tính xách tay của bạn jupyter với lệnh pyspark bằng cách thiết lập các biến môi trường có liên quan:

export PYSPARK_DRIVER_PYTHON=jupyter 
export IPYTHON=1 
export PYSPARK_DRIVER_PYTHON_OPTS="notebook --port=XXX --ip=YYY" 

với XXX là cổng mà bạn muốn sử dụng để truy cập vào máy tính xách tay và YYY là địa chỉ ip.

Bây giờ chỉ cần chạy pyspark và thêm --jars như một công tắc giống như bạn sẽ châm ngòi nộp

+1

Điều đó thật thú vị. Docker có thể thiết lập các biến môi trường với 'docker run -e', nhưng chúng cũng có thể bị clobbered ở đâu đó. Dockerfile cho tất cả các tia lửa-máy tính xách tay sử dụng env 'SPARK_OPTS' nhưng tôi đã nhận thấy rằng tất cả các tia lửa-máy tính xách tay Toree (scala) đã clobbering một' --driver-memory' thiết lập cũng như '--master' và sử dụng' địa phương [2] 'trong một tệp kernel.json cụ thể. Xem, ví dụ: bài đăng của tôi về một số thử nghiệm thủ công trong https://github.com/jupyter/docker-stacks/pull/144. – Paul

Các vấn đề liên quan