Thiết kế được xác thực của Dell cho phân tích—Data Lakehouse (4)

Xác thực cơ sở hạ tầng

Giới thiệu

Các phần sau đây nêu chi tiết những nỗ lực mà Dell Technologies đã thực hiện để đảm bảo rằng Thiết kế được xác thực của Dell cho Analytics — phần cứng và phần mềm tích hợp Data Lakehouse đã tạo ra một thiết kế hoạt động hợp lệ. Việc kiểm tra toàn diện từng thành phần phần cứng và phần mềm đã không được thực hiện. Dell Technologies đã xác minh rằng tất cả các bộ phận đều hoạt động cùng nhau như thiết kế.

Các phần sau đây trình bày một số thử nghiệm đã được thực hiện cũng như phác thảo các mục tiêu và lý do thử nghiệm.

 

Thành phần phần mềm

Các thành phần và phiên bản phần mềm được xác thực cho Dell Validated Design for Analytics — Data Lakehouse được liệt kê trong các bảng bên dưới. Các thành phần được xác thực có thể không khớp chính xác với cấu hình được Dell Technologies khuyến nghị. Để biết thêm thông tin, hãy gửi email tới ai.assist@dell.com hoặc liên hệ với đại diện bán hàng Dell Technologies của bạn .

Bảng 15. Firmware PowerEdge R660 đã được xác thực
Thành phần Phiên bản
BIOS PowerEdge 1.2.1
iDRAC 6.10.39.00
NVIDIA ConnectX-6 Lx 26.35.10.12
BOSS-S2 2.0.13.2015
Thiết bị logic lập trình phức hợp hệ thống (CPLD) 1.0.5
Bảng 16. Firmware PowerEdge R760 đã được xác thực
Thành phần Phiên bản
BIOS PowerEdge 1.2.1
iDRAC 6.10.39.00
BOSS-S2 2.0.13.2015
Lõi Tensor NVIDIA Ampere A100 92.00.25.00.08
NVIDIA ConnectX-6 Lx 26.35.10.12
CPLD hệ thống 1.0.5
Bảng 17. Các thành phần phần mềm đã được xác thực
Loại Thành phần Phiên bản
Hệ điều hành máy chủ Máy chủ Linux doanh nghiệp Red Hat 8,6
nền tảng Linux 4.18.0-305.el8.x86_64
Hệ thống tập tin máy chủ XFS không áp dụng
Chuyển đổi hệ điều hành Dell SmartFabric OS10 không áp dụng
Phần mềm ECS ECS 3,7
Hệ điều hành PowerScale OneFS 9.4.0.12
Máy ảo Java Mở JDK 8 (8u232-b09)
Nền tảng tính toán GPU NVIDIA CUDA 11.4
trình điều khiển GPU Lõi Tensor NVIDIA Ampere A100 470.82.01
Động cơ container Docker 20.10.8
Nền tảng container Kubernetes doanh nghiệp 1.26.0
Công cụ phân tích dữ liệu Apache Spark 3.3.2
Nhà hồ dữ liệu Hồ đồng bằng 2.3.0
Phân phối luồng dữ liệu Apache Kafka 3.3.2
Nền tảng truyền dữ liệu Nền tảng hợp lưu 7.3
Nền tảng Kubernetes Nền tảng Symcloud 5.4.3
Môi trường phát triển tương tác Jupyter Xem các thành phần Jupyter đã được xác thực
Ngôn ngữ lập trình Python 3,9
Bảng 18. Các thành phần Jupyter đã được xác thực
Thành phần Phiên bản
IPython 8.0.1
ipykernel 6.8.0
ipywidget 7.6.5
jupyter_client 7.1.2
jupyter_core 4.9.1
jupyter_server 1.13.5
jupyterlab 3.2.9
nbclient 0.5.10
nbconvert 6.4.1
nbformat 5.1.3
sổ tay 6.4.8
những đặc điểm 5.1.1

Xác thực thành phần

Mục tiêu thử nghiệm là chạy kiểm tra mẫu để xác thực chức năng của các thành phần và dịch vụ khác nhau mà Dell Technologies đã cài đặt như một phần của Thiết kế được xác thực của Dell cho phân tích — Data Lakehouse .

Xác thực GPU

Dell Technologies đã thử nghiệm toàn bộ một cặp GPU NVIDIA A100, các thiết bị không phân vùng với phiên bản trình điều khiển 470.82.01. Toán tử GPU có sẵn công khai đã được cài đặt bằng biểu đồ Helm sau khi cụm Nền tảng Symcloud được cung cấp. Làm như vậy sẽ cho phép Kubernetes phát hiện thiết bị . Để cung cấp GPU trong môi trường Symcloud , Dell Technologies đã thực hiện một robin host probe --rediscover <nodename>lệnh. Làm như vậy sẽ giúp GPU có sẵn để triển khai các gói ứng dụng yêu cầu tài nguyên GPU.

Thiết kế được xác thực của Dell cho Analytics – Data Lakehouse sử dụng gói Spark 3.3.2 với nút công nhân tùy chọn yêu cầu một hoặc nhiều GPU. Việc kích hoạt nhân viên này khi khởi tạo ứng dụng sẽ yêu cầu GPU và khiến nhân viên đăng ký với Spark master, cho biết nguồn tài nguyên bổ sung.

Việc chạy các công việc dựa trên ngăn xếp ứng dụng Spark đã triển khai sẽ trải đều công việc trên tất cả các nút. Nếu khối lượng công việc yêu cầu tài nguyên GPU để tăng tốc thì công việc chỉ được lên lịch cho những nhân viên đã đăng ký GPU. Lập lịch công việc này đã được xác minh bằng cách chạy các tác vụ sử dụng lệnh gọi Spark SQL RAPIDS.

/opt/spark/bin/spark-shell  --jars /opt/spark/jars/rapids-4-spark_2.12-22.06.0.jar 
--conf spark.plugins=com.nvidia.spark.SQLPlugin 
--conf spark.executor.resource.gpu.discoveryScript=/opt/sparkRapidsPlugin/ \
getGpusResources.sh 
--conf spark.executor.resource.gpu.vendor=nvidia.com  
--conf spark.rapids.sql.enabled=true  
--conf spark.executor.resource.gpu.amount=1 
--conf spark.rapids.shims-provider-override=com.nvidia.spark.rapids.shims.spark330.SparkShimServiceProvider
scala> val df = sc.makeRDD(1 to 10000000, 6).toDF
df: org.apache.spark.sql.DataFrame = [value: int]
scala> val df2 = sc.makeRDD(1 to 10000000, 6).toDF
df2: org.apache.spark.sql.DataFrame = [value: int]
scala> df.select( $"value" as "a").join(df2.select($"value" as "b"), $"a" === $"b").count
res0: Long = 10000000

Việc kiểm tra nhân viên vật lý có tài nguyên GPU bằng cách chạy công cụ /usr/bin/nvidia-smi sẽ hiển thị GPU được sử dụng để xử lý.

[root@worker6 ~]# nvidia-smi
vào ngày 10 tháng 4 14:46:55 2023
 +--------------------------------------- --------------------------------------+ 
| Phiên bản trình điều khiển NVIDIA-SMI 470.82.01: 470.82.01 Phiên bản CUDA: 11.4 | 
|-----------------------------+------------------- ------+----------------------+ 
| Tên GPU Persistence-M | Bus-Id Disp.A | Không ổn định. ECC | 
| Fan Temp Perf Pwr: Cách sử dụng/Cap| Sử dụng bộ nhớ | GPU-Util Tính toán M. | 
| | | MIG M. | 
|====================================================== =====+=========================| 
| 0 NVIDIA A100-PCI... Tắt | 00000000:B1:00.0 Tắt | 0 |
| Không áp dụng 28C P0 31W / 250W | 0MiB / 40536MiB | Mặc định 0% | 
| | | Vô hiệu hóa | 
+-----------------------------+------------------- ------+----------------------+ 
| 1 NVIDIA A100-PCI... Tắt | 00000000:CA:00.0 Tắt | 0 | 
| Không áp dụng 30C P0 36W / 250W | 39902MiB / 40536MiB | Mặc định 0% | 
| | | Vô hiệu hóa | 
+-----------------------------+------------------- ------+----------------------+ 
+---------------------- -------------------------------------------------- -------+ 
| Quy trình: |
| GPU GI CI Loại PID Tên quy trình GPU Bộ nhớ | 
| ID Sử dụng ID | 
|===================================================== ===============================| 
| 1 Không áp dụng Không áp dụng 1310307 C ....0-openjdk-amd64/bin/java 39895MiB | 
+------------------------------------------------ ----------------------------+

Xác thực nền tảng

Dell Technologies đã thử nghiệm kho dữ liệu Delta Lake được triển khai trên Nền tảng Symcloud . Dell Technologies cũng đã thử nghiệm tích hợp mảng lưu trữ Dell PowerScale và Dell ECS với Delta Lake . Nền tảng này cho phép chạy nhiều ứng dụng phân tích dữ liệu khác nhau như Spark , Kafka và Splunk trên Nền tảng Symcloud với các hệ thống lưu trữ khác nhau.

Dell Technologies đã sử dụng Delta Lake 2.3.0 với Spark 3.3.2 để xác thực tất cả chức năng của kho dữ liệu . Tất cả các tính năng của Delta Lake với Spark đã được xác thực, bao gồm:

  • Giao dịch nguyên tử, nhất quán, cô lập và độ bền (ACID)
  • Xử lý siêu dữ liệu có thể mở rộng
  • Cập nhật, xóa và hợp nhất
  • Kiểm toán và du hành thời gian
  • Thực thi và phát triển lược đồ
  • Hàng loạt và phát trực tuyến thống nhất

Xác thực tia lửa

Các thử nghiệm này xác thực việc chạy ứng dụng gói Spark trên việc sử dụng Delta Lake làm kho lưu trữ dữ liệu . Dell Technologies đã sử dụng phiên bản Hadoop dựng sẵn Apache Spark 3.3.2 với Delta Lake 2.3.0 .

Dell PowerScale và Dell ECS đóng vai trò là kho lưu trữ dữ liệu Delta Lake để truy cập dữ liệu cho các hoạt động đọc và ghi. Dell Technologies cũng đã xác nhận Spark có GPU NVIDIA trên nền tảng này.

Dữ liệu có thể được ghi vào hoặc đọc từ Spark bằng các giao thức API khác nhau, chẳng hạn như:

  • Hadoop ( hdfs://<IP> )
  • Giao thức lưu trữ đối tượng S3 ( s3a://<bucket Name>/ )
Lưu ý: Việc truy cập bộ lưu trữ S3 được thực hiện bằng cách sử dụng hadoop-aws:3.2.3thư viện để truy cập dữ liệu từ ECS  thông qua giao thức API S3.

quy mô sức mạnh

Kiểm tra Spark với PowerScale bao gồm các bước sau:

 

  1. Chạy Delta Lake với Spark yêu cầu cài đặt gói bổ sung có sẵn từ Delta.io : 
    /opt/spark/bin/pyspark --packages \
         io.delta:delta-core_2.12:2.3.0,org.apache.hadoop:hadoop-aws:3.3.4 --conf
    "spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension" --conf 
    "spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog"
  2. Dữ liệu được đọc từ Spark bằng HDFS: 
    >>> dfl = spark.read.format("delta").load('hdfs://<ip_address>/data/hdfs-test-table')
    >>> dfl.show(1)
    Hệ thống trả về thông báo chỉ hiển thị hàng trên cùng của bảng, tương tự như ví dụ sau:

    +--------+--------+------+------+--------------+- --------------+-------+-------------------+------ --------------+--------------------------+-------------- ---+-------------------+----+-------------+-------+- -------+|msisdn_1|msisdn_2|ô_1|ô_2| toán tử_1| toán tử_2|thời lượng| dấu thời gian|chấm dứt_status_1|chấm dứt_status_2| giá trị_1| value_2|loại|transit_type| tac_1| tac_2|+--------+--------+------+------+-------------- +--------------+--------+-------------------+---- -------------------------------------++------------- ------+----------+----+-------------+------- +--------+| 1| 1| 259| 259|Viễn thôngMobile 1|Viễn thôngMobile 1| 694|2023-04-10T03:31:58| 1| 1|6.321016642869488|6. 7185260289517865|GỌI| INT|1203900|35203107|+--------+--------+------+------+---------- ----+--------------+--------+-------------------+ --------------------+----------------------+-------- ----------+----------+----+-------------+--- ----+--------+
  3. Chữ d tại a đã được ghi đè và đọc lại từ Spark bằng HDFS: 
    >>> df2 = df1.write.format("delta").mode("overwrite").save("hdfs://<ip_address>data/hdfs-test-table1")
    >>> df3 = spark.read.format("delta").load('hdfs://<ip_address>/data/hdfs-test-table1')
    >>> df3.show(1)
    Hệ thống trả về thông báo chỉ hiển thị hàng trên cùng của bảng, tương tự như ví dụ sau:

    +--------+--------+------+------+--------------+- --------------+-------+-------------------+------ --------------+--------------------------+-------------- ---+-------------------+----+-------------+-------+- -------+|msisdn_1|msisdn_2|ô_1|ô_2| toán tử_1| toán tử_2|thời lượng| dấu thời gian|chấm dứt_status_1|chấm dứt_status_2| giá trị_1| value_2|loại|transit_type| tac_1| tac_2|+--------+--------+------+------+-------------- +--------------+--------+-------------------+---- -------------------------------------++------------- ------+----------+----+-------------+------- +--------+| 1| 1| 259| 259|Viễn thôngMobile 1|Viễn thôngMobile 1| 694|2023-04-10T03:31:58| 1| 1|6.321016642869488|6. 7185260289517865|GỌI| INT|1203900|35203107|+--------+--------+------+------+---------- ----+--------------+--------+-------------------+ --------------------+----------------------+-------- ----------+----------+----+-------------+--- ----+--------+

 

Dell Technologies  đã chứng minh tính hợp lệ của   tính năng đọc và ghi  PowerScale từ Delta Lake  bằng  Spark .

ECS

Kiểm tra Spark  với  ECS  bao gồm các bước sau:

  1. Chạy Delta Lake với Spark yêu cầu cài đặt gói bổ sung có sẵn từ Delta.io : 
    /opt/spark/bin/spark-shell --packages \
         io.delta:delta-core_2.12:2.3.0,org.apache.hadoop:hadoop-aws:3.3.4 --conf \
    "spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension" --conf \
    "spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog"
  2. Dữ liệu được đọc từ Spark bằng S3: 
    sc.hadoopConfiguration.set("fs.s3a.access.key", "access key id")
    sc.hadoopConfiguration.set("fs.s3a.secret.key", "secret key")
    sc.hadoopConfiguration.set("fs.s3a.endpoint", "http://<s3api address: port>")
    sc.hadoopConfiguration.set("fs.s3a.aws.credentials.provider", \
         "org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider") \
         spark.range(5).repartition(1).write.format("delta").save("s3a://<bucketname>/")
Dell Technologies  đã chứng minh tính hợp lệ của   việc đọc và ghi  ECS từ Delta Lake  bằng  Spark .

Xác thực Kafka

Thử nghiệm này xác thực việc triển khai gói ứng dụng Kafka trên Nền tảng Symcloud với Delta Lake . Dell Technologies đã tích hợp Kafka với Spark để truyền dữ liệu đầu vào từ Kafka , thực hiện chuyển đổi dữ liệu trên Spark và lưu trữ kết quả trên Delta Lake . Thử nghiệm Kafka bao gồm các bước sau:

  1. Bắt đầu phiên shell trên nhà môi giới Kafka : 
    kubectl exec -it kakfa7-broker-01 /bin/bash
  2. Truyền dữ liệu từ tệp giá trị được phân tách bằng dấu phẩy (CSV): 
    kubectl exec -it kakfa7-broker-01 -- /bin/bash -c "/usr/bin/Kafka-console-producer --broker-list kakfa7-broker-01:9092 --topic test < /home/appuser/TestDataOne.csv"
  3. Chạy lệnh sau từ vùng chứa Spark : 
    /spark/bin/pyspark --packages \
         io.delta:delta-core_2.12:2.3.0,org.apache.hadoop:hadoop-aws:3.3.4,\
         org.apache.spark:spark-sql-kafka-0-10_2.12:3.3.2 --conf 
    "spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension" --conf 
    "spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog"
    Hệ thống trả về thông báo tương tự như ví dụ sau:

    bộ chứa tia lửa: nhập sysimport osimport pyspark.sql.functions as Ffrom pyspark.sql import SparkSessionfrom pyspark.context import SparkContextfrom pyspark.sql.functions import *from pyspark.sql.functions import *from delta.tables import *hadoopConf = spark._jsc. hadoopConfiguration()hadoopConf.set("fs.s3a.access.key", "<access_key>")hadoopConf.set("fs.s3a.secret.key", "<secret_key>")hadoopConf.set("fs. s3a.endpoint", "http://<s3_api_address>")hadoopConf.set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")hadoopConf.set("fs.s3a. aws.credentials.provider", "org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider")df = (spark\
          .readStream \
          .format("kafka") \
          .option("kafka.bootstrap.servers", "kakfa7-broker-01:9092") \
          .option("đăng ký", "kafkaspark") \
          .option("startingOffsets", "mới nhất") \
          .load()) df.writeStream \
    .format("delta") \
    .outputMode("chắp thêm") \
    .option("mergeSchema", "true") \
    .option("checkpointLocation", "/tmp/kafaktest") \
    .start("s3a://sparkdelta/kafkaspark2/")df.selectExpr("CAST(value AS STRING)").show(20)
Dell Technologies  đã chứng minh chức năng cơ bản của  Kafka  là truyền dữ liệu, tích hợp  Kafka  với  Spark  để xử lý dữ liệu và tải dữ liệu cuối cùng vào  Delta Lake .

Xác thực tính sẵn sàng cao

Thử nghiệm này xác thực việc triển khai Nền tảng Symcloud ở chế độ sẵn sàng cao (HA). Đối với cụm Kubernetes có tính sẵn sàng cao , Dell Technologies khuyên bạn nên định cấu hình cụm Kubernetes với tối thiểu ba nút mặt phẳng điều khiển .

Symcloud sử dụng dịch vụ keepaliving và HAProxy để cung cấp tính sẵn sàng cao cho máy chủ Kubernetes API. Dịch vụ được lưu giữ chịu trách nhiệm quản lý địa chỉ IP ảo (VIP) nơi tất cả các yêu cầu đến máy chủ API Kubernetes được gửi. Dịch vụ HAProxy chịu trách nhiệm chuyển hướng các yêu cầu máy chủ API đến các phiên bản của máy chủ API đang chạy trên mỗi nút mặt phẳng điều khiển .

Dell Technologies đã sử dụng lệnh sau để triển khai Nền tảng Symcloud ở chế độ HA:

gorobin_5.4.3-120 onprem install-ha --hosts hosts.json --config-json config.json \
--gorobintar gorobintar-5.4.3-120.tar  --vip <ip_address> --vrid 5 --ignore-warnings

Dell Technologies đã chứng minh chức năng HA của cụm Nền tảng Symcloud cơ bản bằng cách mô phỏng thủ công chuyển đổi dự phòng của nút mặt phẳng điều khiển Kubernetes . Khi nút quản lý chính bị lỗi hoặc không hoạt động tốt, một trong các nút quản lý phụ sẽ đảm nhận vai trò chính. Tính toàn vẹn của dữ liệu được duy trì đối với siêu dữ liệu chính có liên quan đến quản lý lưu trữ cho cụm Nền tảng Symcloud và cho các ứng dụng đã triển khai. Ngoài ra, một cơ chế được cung cấp để phục hồi sau những lỗi cứng.

Những phát hiện

Tất cả các bài kiểm tra đã chạy thành công. Họ cho thấy có thể tích hợp các giải pháp phần mềm mạnh mẽ với phần cứng của Dell để tạo ra giá trị lớn hơn từng bộ phận riêng lẻ.

Bản tóm tắt

Thiết kế được xác thực của Dell dành cho phân tích – Data Lakehouse là một giải pháp có giá trị cho bất kỳ nhóm nào muốn phân tích lượng lớn dữ liệu. Sự dễ dàng và linh hoạt của việc tích hợp các sản phẩm khác nhau của nhà cung cấp vào giải pháp mang lại giá trị lớn cho doanh nghiệp.