21

Chạy Apache Zeppelin trên đám mây
Lên không trung với Apache Zeppelin.
Giới thiệu

Bài đăng này sẽ là một tổng hợp các phần thực tế của hai bài đăng, một bài được viết vào cuối năm ngoái và bài còn lại cách đây vài tháng. Các bài đăng là Apache Zeppelin: Stairway to Notes * Haven! (cuối tháng 12 năm 2018) và Chạy Máy tính xách tay JuPyTer của bạn trên Cơ sở hạ tầng đám mây Oracle (đầu tháng 9 năm 2019). Lần này, chúng tôi sẽ làm cho Apache Zeppelin chạy trên Cơ sở hạ tầng đám mây Oracle .

Chúng ta sẽ làm theo một cấu trúc tương tự như trong các bài viết trước để dễ đọc và dễ hiểu.

Ngoài ra, để ngắn gọn, chúng tôi sẽ sử dụng thuật ngữ OCI khi đề cập đến Cơ sở hạ tầng đám mây Oracle trong suốt phần còn lại của bài đăng. Trong một số trường hợp, tôi đã siêu liên kết và chuyển hướng người đọc (với một chút tường thuật) với các bước lặp lại trong bài đăng, và trong một số trường hợp, tôi đã diễn đạt các bước đó theo nghĩa đen trong bài đăng được điều chỉnh cho phù hợp với chủ đề hiện tại tức là Apache Zeppelin trên OCI.

Vui lòng không sử dụng thông tin như địa chỉ DNS hoặc IP hoặc bất kỳ chi tiết nào khác trực tiếp từ ảnh chụp màn hình hoặc vùng văn bản trong bài đăng này và từ những người được liên kết. Những chi tiết này có thể khác nhau trong trường hợp của bạn, vì vậy hãy cố gắng tuân theo các ý tưởng và nguyên tắc đằng sau quy trình. Bạn nên sử dụng các chi tiết hiển thị trên bảng điều khiển hoặc giao diện trình duyệt khi bạn đang thiết lập ở cuối, như được hướng dẫn trong bài đăng.

OCI: Bắt đầu nhanh chóng

Vì vậy, để bắt đầu, chúng ta cần có một tài khoản trên OCI, một tài khoản cực kỳ đơn giản để thiết lập. Tôi khuyên bạn nên đọc các phần bên dưới từ bài đăng, "Chạy sổ ghi chép JuPyTer của bạn trên Cơ sở hạ tầng đám mây Oracle" (cung cấp ảnh chụp màn hình để giúp điều hướng qua các bước):

  • Giới thiệu
  • Đăng ký
  • Thiết lập
Chạy Apache Zeppelin trên đám mây
Hành động nhanh chóng
Chạy Apache Zeppelin trên đám mây
Thực đơn tính toán
Chạy Apache Zeppelin trên đám mây
Phiên bản
Chạy Apache Zeppelin trên đám mây
Thông tin phiên bản
  • Các hành động để có được trên đám mây

Và chúng tôi dừng lại khi chúng tôi kết thúc các Hành động để truy cập vào phần đám mây . Nhưng hãy đảm bảo rằng bạn cài đặt mọi thứ trên đường đi để có các công cụ bạn cần cho phần còn lại của bài đăng. Bỏ qua bất kỳ thứ gì xuất hiện liên quan đến sổ ghi chép Jupyter vì chúng tôi sẽ thiết lập Apache Zeppelin tiếp theo.

Khi chúng ta hoàn thành những điều trên, chúng ta đã đến một thời điểm tốt, vì chúng ta sẽ có một phiên bản VM có thể truy cập được từ cả trình duyệt cũng như từ CLI. Và sau đó chúng ta có thể thực hiện các bước tiếp theo để cài đặt Apache Zeppelin và bắt đầu. Ghi lại Địa chỉ IP Công cộng của phiên bản VM được tạo ở trên trước khi tiếp tục; trong trường hợp của tôi, nó là 132.145.60.249 .

Zeppelin: Bắt đầu nhanh chóng

Nếu bạn đã biết Zeppelin và cảm thấy thoải mái với nó, bạn có thể trực tiếp đến phần tiếp theo trong bài đăng, Chạy Apache Zeppelin.

Nhưng để làm quen với Apache Zeppelin nếu bạn chưa từng sử dụng nó trước đây, tôi khuyên bạn nên từ từ xem qua bài đăng, "Apache Zeppelin: cầu thang đến các ghi chú * thiên đường!" và làm cho nó hoạt động trên máy cục bộ của bạn. Chúng tôi sẽ thực hiện các bước tiếp theo để làm cho nó hoạt động trên đám mây. Chỉ để biết thông tin của bạn, khi bài đăng được viết, chúng tôi đã sử dụng Apache Zeppelin 0.8.0 và Spark 2.4.3 và chạy nó trên GraalVM 1.0.0-rc10, như được đóng gói trong hình ảnh Docker neomatrix369 / zeppelin: 0.1 . Kể từ đó, mọi thứ đã tiếp tục. Đối với bài đăng này, chúng tôi đã quyết định sử dụng các phiên bản mới hơn, Apache Zeppelin 0.8.1, Spark 2.4.4 và GraalVM 19.2.0.1 và bạn có thể truy cập thông qua hình ảnh Docker neomatrix369 / zeppelin: 0.2 .

Lưu ý: Tôi đã tránh xa Apache Zeppelin 0.8.0 và 0.8.2 cho bài đăng này vì nó đã giới thiệu những điều mới gây ra sự hồi quy trong quy trình làm việc của chúng tôi. Đối với tất cả các ý định và mục đích cho bài đăng này, chúng tôi có thể sử dụng Apache Zeppelin 0.8.1. Phiên bản 0.8.0 tạo ra lỗi này (được giải quyết trong phiên bản 0.8.1) khi chúng tôi cố gắng chạy một đoạn có mã Scala.

Ngoài ra, nếu bạn đã để ý, Zeppelin đổi tên "sổ ghi chép" thành "ghi chú", "ô" thành "đoạn văn", v.v.

Chạy Apache Zeppelin

Chúng tôi sẽ chạy Apache Zeppelin trực tiếp trên đám mây ngay bây giờ vì chúng tôi đã có kinh nghiệm chạy nó trên máy cục bộ. Đối với một số bạn, điều này bây giờ có thể là không có trí tuệ, vì các bước không nhiều và khá đơn giản để thực hiện vì chúng tôi đã đặt nền móng cho nó. Chỉ cần rõ ràng, các hướng dẫn tương tự có thể áp dụng trên phiên bản máy ảo hoặc kim loại trần.

Đăng nhập vào phiên bản VM

Sau đó, bạn có thể ssh vào hộp (xem tài liệu về cách kết nối qua SSH ) và tiếp tục với phần còn lại của các hành động bên dưới:

### Oracle Linux and CentOS images, user name: opc
### the Ubuntu image, user name: ubuntu
$ ssh -i ~/.ssh/id_rsa ubuntu@132.145.60.249
or
$ ssh ubuntu@132.145.60.249

và chúng tôi nhận được lời nhắc tiếp theo, mà chúng tôi trả lời "có":


The authenticity of host '132.145.60.249 (132.145.60.249)' can't be established. 
ECDSA key fingerprint is SHA256:USafjsySmPItXTdBOsQyiYbEdiFSa7Cs1so+9EnKC4M. 
Are you sure you want to continue connecting (yes/no)? yes

theo sau là bảng điều khiển này, một dấu hiệu cho thấy bạn hiện đã đăng nhập vào máy ảo:

Chạy Apache Zeppelin trên đám mây
Bảng điều khiển

Sao chép Git Repo

Bây giờ chúng tôi đã đăng nhập và chúng tôi có tất cả các tập lệnh chúng tôi cần từ đây , chúng tôi có thể sao chép nó và chạy chúng.

Nếu bạn chưa có, hãy chạy các lệnh dưới đây:

$ git clone https://github.com/neomatrix369/awesome-ai-ml-dl/
$ cd examples/apache-zeppelin

Cài đặt Docker

Bạn có thể tìm thấy các tài liệu Docker để cài đặt Docker trên Ubuntu trên trang Docker . Một tập lệnh bash cũng đã được cung cấp để làm nhanh quá trình, mặc dù hệ điều hành mục tiêu ở đây là Ubuntu 16.04 trở lên:

$ ./installDocker.sh

Lưu ý:  Nếu bạn chọn hình ảnh hệ điều hành khác trong quá trình tạo máy ảo, bạn sẽ phải cài đặt Docker theo cách thủ công với tài liệu từ Docker hoặc sửa đổi tập lệnh ở trên để làm cho nó hoạt động cho hệ điều hành mục tiêu.

Xây dựng hình ảnh Apache Zeppelin Docker (tùy chọn)

Quá trình này có thể mất nhiều thời gian hơn, vì vậy hãy tự pha cà phê, đọc xkcd và sau đó quay lại sau 20 phút hoặc lâu hơn.

Chúng tôi có thể chọn tiếp tục hoặc chuyển sang bước tiếp theo và sử dụng phiên bản cũ hơn của hình ảnh docker.

Chúng ta có thể bắt đầu bằng cách chạy tập lệnh xây dựng để tạo vùng chứa Zeppelin Docker mới nhất của mình :

$ DOCKER_USER_NAME=<your Docker Hub username> IMAGE_VERSION=0.2 ./buildZeppelinDockerImage.sh

và chúng tôi thấy những thông báo này bay qua:

Sending build context to Docker daemon  34.82kB
Step 1/21 : ARG ZEPPELIN_VERSION
Step 2/21 : FROM apache/zeppelin:${ZEPPELIN_VERSION}
---> 353d7641c769
Step 3/21 : ARG SPARK_VERSION
---> Using cache
---> 2ca1b6703dd7
Step 4/21 : ENV SPARK_VERSION=${SPARK_VERSION:-2.4.3}
---> Using cache
---> f507d31d0aca
Step 5/21 : RUN echo "$LOG_TAG Download Spark binary" &&     wget -O /tmp/spark-${SPARK_VERSION}-bin-hadoop2.7.tgz http://archive.apache.org/dist/spark/spark-${SPARK_VERSION}/spark-${SPARK_VERSION}-bin-hadoop2.7.tgz
---> Running in c94542e7eb00
[ZEPPELIN_0.8.1]: Download Spark binary
--2019-10-13 19:55:16--  http://archive.apache.org/dist/spark/spark-2.4.4/spark-2.4.4-bin-hadoop2.7.tgz
Saving to: ‘/tmp/spark-2.4.4-bin-hadoop2.7.tgz’
[--snipped--]
213350K .......... .......... .......... .......... .......... 94% 51.4K 3m0s
213400K .......... .......... .......... .......... .......... 94% 88.1K 2m59s
213450K .......... .......... .......... .......... .......... 95% 58.7K 2m59s
213500K .......... .......... .......... .......... .......... 95% 45.5K 2m58s
213550K .......... .......... .......... .......... .......... 95% 4.40M 2m57s
213600K .......... .......... .......... .......... .......... 95% 83.8K 2m56s
213650K .......... .......... .......... .......... .......... 95% 91.9K 2m55s
213700K .......... .......... .......... .......... .......... 95% 67.2K 2m55s
213750K .......... .......... .......... .......... .......... 95%  166K 2m54s
213800K .......... .......... .......... .......... .......... 95% 79.8K 2m53s
[--snipped--]
Step 21/21 : CMD ["bin/zeppelin.sh"]
---> Running in 843684f60302
Removing intermediate container 843684f60302
---> 5833f13ff7c7
Successfully built 5833f13ff7c7
Successfully tagged neomatrix369/zeppelin:0.2

Bạn có thể nhận thấy rằng chúng tôi có một số thay đổi:

  • Các sửa đổi được thực hiện đối với Zeppelin-Dockerfile)
  • Các tập lệnh xây dựng và chạy cũng trông khác (  buildZeppelinDockerImage.sh và   runZeppelinDockerImage.sh )
  • Chúng tôi cũng đang sử dụng để xem 0,2 cách sử dụng CLI trong bài đăng

Hy vọng tất cả những điều này bắt đầu có ý nghĩa (Tôi đã đưa ra gợi ý khi chúng tôi nói rằng mọi thứ đã tiếp tục…).

Đẩy Hình ảnh Docker đến Docker Hub (Tùy chọn)

Khi chúng tôi đã tạo thành công hình ảnh Docker chứa Apache Zeppelin từ bước trên, chúng tôi có thể dễ dàng tải hình ảnh từ kho lưu trữ cục bộ của mình lên kho lưu trữ từ xa thông qua:

$ DOCKER_USER_NAME=<your Docker Hub username> IMAGE_VERSION=0.2 ./push-apache-zeppelin-docker-image-to-hub.sh

Mặc dù hãy lưu ý rằng nó mong đợi một vài điều:

  • Một tài khoản trên Docker Hub (tức là neomatrix369 ) - tất nhiên là tài khoản của riêng bạn
  • Bạn đã đăng nhập vào tài khoản Docker Hub cục bộ
  • Bạn đã thiết lập  DOCKER_USER_NAME tài khoản trung tâm Docker của mình

Nếu không, bạn sẽ nhận được thông báo lỗi. Hy vọng rằng họ sẽ hướng dẫn bạn cho đến khi bạn tải lên.

Lưu ý: trong trường hợp của chúng tôi, chúng tôi có quyền truy cập vào hình ảnh Docker trên trung tâm Docker, xem neomatrix369 / zeppelin trên Docker Hub .

Chạy Apache Zeppelin từ hình ảnh Docker

Chúng tôi sẽ tải xuống các hình ảnh đã được tạo được lưu trữ trên Docker Hub:

Phiên bản 0.1 (Apache Zeppelin 0.8.0, Spark 2.4.3, GraalVM 1.0.0-rc10) - hình ảnh cũ hơn

$ docker pull neomatrix369/zeppelin:0.1
$ ./runZeppelinDockerContainer.sh

hoặc là


Phiên bản 0.2 (Apache Zeppelin 0.8.1, Spark 2.4.4, GraalVM 19.2.0.1) - hình ảnh mới

$ docker pull neomatrix369/zeppelin:0.2
$ IMAGE_VERSION=0.2 ./runZeppelinDockerContainer.sh

các lệnh trên sẽ dẫn đến kết quả đầu ra:

ubuntu@instance-20191014-0101:~/awesome-ai-ml-dl/examples/apache-zeppelin$ IMAGE_VERSION=0.2 ./runZeppelinDockerContainer.sh
Please wait till the log messages stop moving, it will be a sign that the service is ready! (about a minute or so)
Once the service is ready, go to http://localhost:8080 to open the Apache Zeppelin homepage
Pid dir doesn't exist, create /zeppelin/run
OpenJDK GraalVM CE 19.0.0 warning: ignoring option MaxPermSize=512m; support was removed in 8.0
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/zeppelin/lib/interpreter/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/zeppelin/lib/slf4j-log4j12-1.7.10.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]
[---snipped---]
WARNING: A HTTP GET method, public javax.ws.rs.core.Response org.apache.zeppelin.rest.CredentialRestApi.getCredentials(java.lang.String) throws java.io.IOException,java.lang.IllegalArgumentException, should not consume any entity.
WARNING: The (sub)resource method createNote in org.apache.zeppelin.rest.NotebookRestApi contains empty path annotation.
WARNING: The (sub)resource method getNoteList in org.apache.zeppelin.rest.NotebookRestApi contains empty path annotation.

Mở Ghi chú Apache Zeppelin trong trình duyệt của bạn

Đi tới trình duyệt và thử mở cái này:

http://132.145.60.249:8080

Nhưng điều này sẽ không hoạt động vì chúng tôi chưa mở cổng 8080 từ bên trong mạng đám mây của mình (thông qua Quy tắc Ingress, đọc thêm về nó tại đây ) với thế giới bên ngoài (công khai):

Chạy Apache Zeppelin trên đám mây
Quy tắc xâm nhập

Chúng tôi cần thêm mục nhập ở trên vào phần Quy tắc nhập , mà bạn có thể truy cập Quy tắc nhập bằng cách đi tới  Mạng > Mạng đám mây ảo > Chi tiết mạng đám mây ảo (bằng cách nhấp vào mục nhập VCN) > Danh sách bảo mật, sẽ đưa bạn đến trang có Danh sách bảo mật mặc định . Sau khi nhấp vào Danh sách bảo mật tương ứng với Mạng đám mây ảo (VCN) của bạn, bạn sẽ đến trang Quy tắc nhập ở trên .

Nếu bạn vẫn không thể tìm thấy nó, hãy tìm kiếm cụm từ bảo mật  bằng cách sử dụng phương tiện tìm kiếm trên bất kỳ trang nào trong Cloud Console (xem kính lúp ở đầu trang). Thao tác này sẽ hiển thị cho bạn tất cả các Danh sách bảo mật mặc định và nhấp vào nó sẽ đưa bạn đến trang Quy tắc nhập ở trên (bạn có thể chỉ có một mục nhập Danh sách bảo mật). Lưu ý: Ingress có nghĩa là lưu lượng truy cập vào phiên bản mạng / máy ảo.

Chúng tôi chọn cổng 8080 vì chúng tôi thiết lập nó như vậy trong các tập lệnh Docker.

Sau khi thực hiện tất cả những điều trên, chúng tôi thấy trang khởi động Apache Zeppelin trong trình duyệt:

Chạy Apache Zeppelin trên đám mây
Khởi động Zeppelin

Sử dụng Apache Zeppelin Notes

Hãy xem phần Nhập ghi chú trong " Apache Zeppelin: Stairway to Notes * Haven! " Sau phần này, bạn có thể xem cách nhập ghi chú hiện có và thực hiện chúng. Sau khi chúng tôi nhập và mở một ghi chú và chạy nó, nó sẽ trông như thế này:

Chạy Apache Zeppelin trên đám mây
Chạy ghi chú

Việc nhập ghi chú này cũng tạo ra một tệp “Notes.json” trong thư mục ~ / awesome-ai-ml-dl / amples / apache-zeppelin / notebook của phiên bản VM.

Các ví dụ khác có thể được tìm thấy trên https://github.com/dylanmei/docker-zeppelin , mặc dù những ví dụ này sẽ cần cài đặt và cấu hình bổ sung cho bản dựng Apache Zeppelin.

Tạo hình ảnh tùy chỉnh để sử dụng lại

Vì chúng tôi đã có thể chạy thành công Apache Zeppelin từ bên trong một phiên bản VM, chúng tôi có thể lưu hình ảnh này để sử dụng lại trong tương lai hoặc chia sẻ với những người khác. Trước khi làm điều đó, tôi sẽ xóa các nhật ký và thư mục sổ ghi chép khỏi ~ / awesome-ai-ml-dl /amples / apache-zeppelin của phiên bản VM.

Tạo hình ảnh của phiên bản VM có thể được thực hiện thông qua Compute> Instances> Instance Details trong menu điều hướng và Tạo hình ảnh tùy chỉnh từ menu thả xuống Actions:

Chạy Apache Zeppelin trên đám mây
Tạo hình ảnh tùy chỉnh
Chạy Apache Zeppelin trên đám mây
Tùy chọn hình ảnh tùy chỉnh

Lưu ý:  Trong quá trình tạo hình ảnh tùy chỉnh, phiên bản VM ban đầu của bạn bị tắt. Quá trình này có thể mất vài phút để hoàn thành tùy thuộc vào kích thước của phiên bản VM gốc.

Khi được tạo thành công, nó sẽ có sẵn trong danh sách Hình ảnh tùy chỉnh để bạn lựa chọn, vào lần tiếp theo chúng ta tạo một phiên bản VM mới:

Chạy Apache Zeppelin trên đám mây
Hình ảnh có sẵn

Người dùng quyền lực

Nếu tất cả những điều này là miếng bánh cho bạn hoặc bạn đã sống sót mà không gặp nhiều rắc rối, thì hãy thử tất cả những thứ chuyên sâu được đề cập trong trang README tại đây .

Để có thể viết mã bằng các ngôn ngữ JVM khác trong môi trường Apache Zeppelin, tất cả những gì bạn cần là các phần mở rộng bổ sung - vấn đề chỉ là cài đặt và cấu hình. Bạn có thể tìm hiểu tất cả về chúng ở đây , bạn có thể thấy bạn cũng có thể viết mã bằng Python trên Apache Zeppelin. Tìm hiểu cách bạn có thể viết thông dịch viên của riêng mình cho Apache Zeppelin . Cả sổ ghi chép và trình thông dịch đều có thể được truy cập thông qua API NotebookAPI thông dịch viên .

Đang ký tắt


[--snipped--]
Oct 14, 2019 1:02:40 AM org.glassfish.jersey.internal.Errors logErrors
WARNING: The following warnings have been detected: WARNING: A HTTP GET method, public javax.ws.rs.core.Response org.apache.zeppelin.rest.InterpreterRestApi.listInterpreter(java.lang.String), should not consume any entity.
WARNING: A HTTP GET method, public javax.ws.rs.core.Response org.apache.zeppelin.rest.CredentialRestApi.getCredentials(java.lang.String) throws java.io.IOException,java.lang.IllegalArgumentException, should not consume any entity.
WARNING: The (sub)resource method createNote in org.apache.zeppelin.rest.NotebookRestApi contains empty path annotation.
WARNING: The (sub)resource method getNoteList in org.apache.zeppelin.rest.NotebookRestApi contains empty path annotation.
^C

Nếu bạn đã tạo ghi chú, ghi chú sẽ được lưu trong thư mục con có tên (thư mục Apache Zeppelin), bạn có thể lấy ghi chú này bằng cách sử dụng scp từ máy cục bộ của mình (xem tại đây về cách thực hiện điều đó).

Đảm bảo rằng bạn đã đăng xuất khỏi cả hai phiên đăng nhập oracle.com và cloud.oracle.com, vì bạn rất dễ quên cái này hay cái kia. Nhưng trước khi làm điều đó, vui lòng xem trang Dọn dẹp tài nguyên trong tài liệu - bạn không muốn phiên bản của mình chạy mãi mãi trong khi bạn không nhìn vào nó!

Phần kết luận

Sau khi làm điều này, có vẻ như không có trí tuệ để chạy một dịch vụ máy tính xách tay, tức là Apache Zeppelin trên một nhà cung cấp đám mây như OCI ( Cơ sở hạ tầng đám mây của Oracle ).

Thực tế, nếu tóm tắt lại, chúng ta có thể nói rằng Apache Zeppelin mang lại cho chúng ta:

  • Tính linh hoạt tương tự như máy tính xách tay jupyter và cho phép mở rộng chức năng thông qua cấu hình và tiện ích mở rộng
  • Tiến trình thực thi trên mỗi đoạn (mỗi ô) luôn được hiển thị (trong thời gian thực) không giống như sổ ghi chép jupyter
  • Thực hiện lười biếng để giúp hiệu quả
  • Khả năng điều hướng khứ hồi giữa dữ liệu bảng và trực quan hóa trong ô (đoạn văn)
  • Đôi khi, việc thực thi có thể chậm hơn một chút so với máy tính xách tay jupyter, nhưng có các giải pháp để tăng tốc độ này (dành cho các bài đăng trong tương lai)
  • Tất cả là một nơi tuyệt vời để các nhà phát triển Java / JVM cảm thấy như ở nhà và thực hiện các thử nghiệm ML trên JVM

OCI  cung cấp cho chúng tôi:

  • Môi trường đám mây dễ sử dụng
  • Nhanh chóng thiết lập môi trường của chúng tôi để tiếp cận thị trường với các ứng dụng và giải pháp mà chúng tôi muốn nhanh chóng đưa ra thị trường
  • Cho phép chúng tôi chạy Apache Zeppelin (nguyên bản hoặc thông qua hình ảnh Docker)
  • Các phiên bản có thể được chia sẻ công khai hoặc riêng tư tùy thuộc vào cài đặt bảo mật mạng của bạn
  • Cung cấp các cách để bảo mật cơ sở hạ tầng của bạn trên đám mây (chúng tôi không trình bày sâu về vấn đề này ở đây), nhưng vui lòng xem tài liệu về Bảo mật trên trang tài liệu OCI Để tìm hiểu thêm.

Đọc thêm


Bắt đầu với Dịch vụ Đám mây Vùng chứa Oracle

Trực quan hóa dữ liệu bằng Apache Zeppelin

|