7

Tôi mới sử dụng Spark on YARN và không hiểu mối quan hệ giữa YARN Containers và Spark Executors. Tôi đã thử cấu hình sau, dựa trên kết quả của tập lệnh yarn-utils.py, có thể được sử dụng để tìm cấu hình cụm tối ưu.Spark on YARN resource manager: Mối quan hệ giữa YARN Containers và Spark Executors

Cụm Hadoop (HDP 2.4) Tôi đang làm việc trên:

  • 1 Thạc sĩ Node:
    • CPU: 2 CPU với 6 lõi mỗi = 12 lõi
    • RAM: 64 GB
    • SSD: 2 x 512 GB
  • 5 Slave Nodes:
    • CPU: 2 CPU với 6 lõi mỗi = 12 lõi
    • RAM: 64 GB
    • HDD: 4 x 3 TB = 12 TB
  • HBase được cài đặt (đây là một trong những thông số cho kịch bản dưới đây)

vì vậy, tôi chạy python yarn-utils.py -c 12 -m 64 -d 4 -k True (c = lõi, m = nhớ, d = ổ cứng, k = HBase cài đặt) và nhận được kết quả sau:

Using cores=12 memory=64GB disks=4 hbase=True 
Profile: cores=12 memory=49152MB reserved=16GB usableMem=48GB disks=4 
Num Container=8 
Container Ram=6144MB 
Used Ram=48GB 
Unused Ram=16GB 
yarn.scheduler.minimum-allocation-mb=6144 
yarn.scheduler.maximum-allocation-mb=49152 
yarn.nodemanager.resource.memory-mb=49152 
mapreduce.map.memory.mb=6144 
mapreduce.map.java.opts=-Xmx4915m 
mapreduce.reduce.memory.mb=6144 
mapreduce.reduce.java.opts=-Xmx4915m 
yarn.app.mapreduce.am.resource.mb=6144 
yarn.app.mapreduce.am.command-opts=-Xmx4915m 
mapreduce.task.io.sort.mb=2457 

Các cài đặt này tôi đã thực hiện qua giao diện Ambari và khởi động lại cụm. Các giá trị cũng khớp với những gì tôi đã tính toán theo cách thủ công trước đây.

bây giờ tôi có vấn đề

  • để tìm các thiết lập tối ưu cho spark-submit kịch bản của tôi
    • thông số --num-executors, --executor-cores & --executor-memory.
  • để có được mối quan hệ giữa các thùng chứa sợi và Chấp hành viên Spark
  • để hiểu được thông tin phần cứng trong Spark của tôi Lịch sử UI (ít bộ nhớ hiển thị như tôi đặt (khi tính vào bộ nhớ tổng thể bằng cách nhân với số lượng nút công nhân))
  • để hiểu được khái niệm về vcores trong sỢI, ở đây tôi không thể tìm thấy bất kỳ ví dụ hữu ích chưa

Tuy nhiên, tôi thấy bài này What is a container in YARN?, nhưng điều này đã không thực sự giúp như nó doesn' t mô tả mối quan hệ với người thi hành S.

Ai đó có thể giúp giải quyết một hoặc nhiều câu hỏi?

Trả lời

10

tôi sẽ báo cáo những hiểu biết của tôi ở đây từng bước:

  • Đầu tiên điều quan trọng là thực tế này (Nguồn: this Cloudera documentation):

    Khi chạy Spark trên SỢI, mỗi người thi hành Spark chạy như một thùng chứa YARN. [...]

  • Điều này có nghĩa là số lượng các vùng chứa sẽ luôn giống như các trình thực thi được tạo bởi ứng dụng Spark, ví dụ: thông qua tham số --num-executors khi khởi chạy.

  • Đặt bởi yarn.scheduler.minimum-allocation-mb mỗi vùng chứa luôn phân bổ ít nhất lượng bộ nhớ này. Điều này có nghĩa là nếu tham số --executor-memory được đặt thành ví dụ: chỉ 1g nhưng yarn.scheduler.minimum-allocation-mb là ví dụ: 6g, vùng chứa lớn hơn nhiều so với nhu cầu của ứng dụng Spark.

  • Cách khác, nếu tham số --executor-memory được đặt thành một nơi nào đó cao hơn giá trị yarn.scheduler.minimum-allocation-mb, ví dụ: 12g, Vùng chứa sẽ phân bổ nhiều bộ nhớ động hơn, nhưng chỉ chỉ nếu số lượng bộ nhớ được yêu cầu nhỏ hơn hoặc bằng yarn.scheduler.maximum-allocation-mb giá trị.

  • Giá trị của yarn.nodemanager.resource.memory-mb xác định, số lượng bộ nhớ có thể được phân bổ tổng bằng tất cả các vùng chứa của một máy chủ!

=> Vì vậy, việc thiết yarn.scheduler.minimum-allocation-mb cho phép bạn chạy các thùng chứa nhỏ hơn ví dụ đối với những người thực thi nhỏ hơn (, nếu không sẽ bị lãng phí bộ nhớ).

=> Thiết yarn.scheduler.maximum-allocation-mb với giá trị tối đa (ví dụ bằng yarn.nodemanager.resource.memory-mb) cho phép bạn xác định Chấp hành viên lớn hơn (bộ nhớ hơn được phân bổ, nếu cần thiết, ví dụ bằng cách --executor-memory tham số).

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