Các thông số tài nguyên trong YARN và cách cài đặt
hadoop
11
YARN
4
White

Bùi Hồng Hà viết ngày 09/06/2015

Tài liệu này làm gì

Tài liệu này tổng hợp các tham số quản lý tài nguyênhiệu năng trong YARN -- giải thích ý nghĩa cũng như cách tính toán giá trị cho các biến này.

Hiểu biết qua về kiến trúc và các components của YARN là điều kiện cần. Khái lược về kiến trúc của YARN có thể được tham khảo ở bài: YARN và MapReduce2

Tài liệu này không:

  • Tổng hợp các tham số dành cho MapReduce2.
  • Đi sâu chi tiết vào các tham số như thread-count, interval
  • Giải thích cgroup và container.

Khái quát các thông số cần cài đặt trong YARN

Các thông số về hiệu năng và tài nguyên trong YARN có thể chia làm 2 nhóm:

  • Nhóm dành cho NodeManager
  • Nhóm dành cho ResourceManager

Node Manager

Container Memory
  • Tham số: yarn.nodemanager.resource.memory-mb
  • Lượng bộ nhớ có thể gán cho các containers.
Container Virtual CPU Cores
  • Tham số: yarn.nodemanager.resource.cpu-vcores
  • số lượng virtual CPU cores có thể gán cho các containers.

YARN đưa ra khái niệm virtual cores là số lượng CPU cores mà hệ thống có. Ví dụ máy tính có 1 CPU HC E5-2430L v2 2.4GHz thì CPU này có 6 cores vật lý. Nếu công nghệ HyperThreading được sử dụng, thì virtual cores của máy chủ này là 12.

Resource Manager

Container Memory Minimum
  • Tham số: yarn.scheduler.minimum-allocation-mb
  • Lượng bộ nhớ nhỏ nhất tính bằng MiB mà có thể được yêu cầu cho 1 container.
Container Memory Increment
  • Tham số: yarn.scheduler.increment-allocation-mb
  • Nếu sử dụng FairScheduler, bộ nhớ yêu cầu cho container sẽ là bội số của giá trị này.
Container Memory Maximum
  • Tham số: yarn.scheduler.maximum-allocation-mb
  • Lượng bộ nhớ tối đa tính bằng MiB có thể được yêu cầu cho 1 container.
Container Virtual CPU Cores Minimum
  • Tham số: yarn.scheduler.minimum-allocation-vcores
  • Số virtual CPU cores nhỏ nhất có thể yêu cầu cho 1 container
Container Virtual CPU Cores Increment
  • Tham số: yarn.scheduler.increment-allocation-vcores
  • Nếu sử dụng FairScheduler, số lượng virtual core yêu cầu sẽ bội số của giá trị này.
Container Virtual CPU Cores Maximum
  • Tham số: yarn.scheduler.maximum-allocation-vcores
  • Số lượng vcores tối đa có thể được yêu cầu bởi 1 container. Giá trị này nên là số vcores của 1 node tính toán trong cluster.

Cgroup

Cgroup CPU Shares
  • Tham số: cpu.shares
  • Trọng số cho phép sử dụng CPU của container. Số này càng lớn thì thời gian CPU được cấp cho container càng nhiều. Giá trị này phải nằm giữa 2 và 262144. Giá trị mặc định là 1024
Cgroup I/O Weight
  • Tham số: blkio.weight
  • Trọng số cho yêu cầu đọc I/O. Trọng số này càng lớn, yêu cầu càng được ưu tiên khi có xảy ra tắc nghẽn I/O. Giá trị của tham số phải nằm giữa 100 và 1000.
Cgroup Memory Soft Limit
  • Tham số: memory.soft_limit_in_bytes
  • Giới hạn mềm của bộ nhớ được sử dụng. Khi bộ nhớ container sử dụng đạt tới giới hạn này, Kernel sẽ thu hồi bộ nhớ nếu host bị áp lực thiếu bộ nhớ. Nếu việc thu hồi không thành công, kernel sẽ kill process.
Cgroup Memory Hard Limit
  • Tham số: memory.limit_in_bytes
  • Giới hạn cứng của bộ nhớ được sử dụng. Khi bộ nhớ container sử dụng đạt tới giới hạn này, Kernel sẽ thu hồi bộ nhớ nếu host bị áp lực thiếu bộ nhớ. Nếu việc thu hồi không thành công, kernel sẽ kill process.

Tính toán các giá trị này thế nào?

Các tham số trên phải được cài đặt dựa vào tài nguyên phần cứng:

  • RAM (lượng bộ nhớ)
  • CORES (số lượng cpu cores)
  • DISKS (Đĩa cứng)

Chú ý: lượng bộ nhớ dành cho YARN nên được tính là phần bộ nhớ còn lại sau khi đã dự trữ cho hệ thống và các process của hadoop khác.

Bộ nhớ dự trữ = Bộ nhớ dành cho hệ thống + Bộ nhớ dành cho HBase

Tham khảo bảng dưới đây để tính bộ nhớ dự trữ

Tổng bộ nhớ / nodes Bộ nhớ dành cho hệ thống Bộ nhớ dành cho HBase
4GB 1GB 1GB
8GB 2GB 1GB
16GB 2GB 2GB
24GB 4GB 4GB
32GB 6GB 8GB
48GB 6GB 8GB
64GB 8GB 8GB
72GB 8GB 8GB
96GB 12GB 16GB
128GB 24GB 24GB

Số lượng tối đa containers trên 1 node. Công thức:

#containers = minimum (2*CORES, 1.8*DISKS,  RAM / MIN_CONTAINER_SIZE)

MIN_CONTAINER_SIZE: Bộ nhớ tối thiểu dành cho 1 container. Giá trị của MIN_CONTAINER_SIZE có thể được cài đặt như sau:

Tổng RAM / node Giá trị container size nhỏ nhất
< 4GB 256MB
> 4GB, < 8GB 512MB
> 8GB, < 24GB 1024MB
> 24GB 2048MB

Giá trị cuối cùng là: số lượng RAM / container

RAM-per-Container = maximum(MIN_CONTAINER_SIZE, RAM / Containers)

Với những giá trị trên ta có bảng sau:

File cấu hình Tham số Giá trị
yarn-site.xml yarn.nodemanager.resource.memory-mb = Containers * RAM-per-Container
yarn-site.xml yarn.scheduler.minimum-allocation-mb = RAM-per-Container
yarn-site.xml yarn.scheduler.maximum-allocation-mb = containers * RAM-per-Container
mapred-site.xml mapreduce.map.memory.mb = RAM-per-Container
mapred-site.xml mapreduce.reduce.memory.mb = 2 * RAM-per-Container
mapred-site.xml mapreduce.map.java.opts = 0.8 * RAM-per-Container
mapred-site.xml mapreduce.reduce.java.opts = 0.8 * 2 * RAM-per-Container
yarn-site.xml (check) yarn.app.mapreduce.am.resource.mb = 2 * RAM-per-Container
yarn-site.xml (check) yarn.app.mapreduce.am.command-opts = 0.8 * 2 * RAM-per-Container

Ví dụ

Cluster nodes có 12 CPU cores, 48GB RAM và 12 đĩa cứng
Bộ nhớ dự trữ = 6GB
MIN_CONTAINER_SIZE = 2GB

Không có HBase

# Containers = minimum(2*12, 18 * 12, (48-6)/2) = minimum(24, 21.6, 21)

Tham số Giá trị
yarn.nodemanager.resource.memory-mb = 21 * 2 = 42*1024 MB
yarn.scheduler.minimum-allocation-mb = 2*1024 MB
yarn.scheduler.maximum-allocation-mb = 21 * 2 = 42*1024 MB
mapreduce.map.memory.mb = 2*1024 MB
mapreduce.reduce.memory.mb = 2 * 2 = 4*1024 MB
mapreduce.map.java.opts = 0.8 * 2 = 1.6*1024 MB
mapreduce.reduce.java.opts = 0.8 * 2 * 2 = 3.2*1024 MB
yarn.app.mapreduce.am.resource.mb = 2 * 2 = 4*1024 MB
yarn.app.mapreduce.am.command-opts = 0.8 * 2 * 2 = 3.2*1024 MB

Tham khảo

  1. http://www.alexjf.net/blog/distributed-systems/hadoop-yarn-installation-definitive-guide/
  2. http://www.wired.com/2013/07/hadoop-yarn/
  3. http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.0.9.1/bk_installing_manually_book/content/rpm-chap1-11.html
Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Bùi Hồng Hà

59 bài viết.
262 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
74 8
Bài viết tổng hợp cơ chế hoạt động của https Chút ít về chữ ký điện tử Chữ ký điện tử là cơ chế bao gồm 3 thuật toán: Thuật toán chọn một khóa...
Bùi Hồng Hà viết gần 3 năm trước
74 8
White
43 7
Giới thiệu Gần đây thấy bản thân chém gió rất nhiều về MapReduce, Hadoop v.v nhưng chưa thấy có bài viết nào tổng hợp + giải thích cụ thể về MapRe...
Bùi Hồng Hà viết 2 năm trước
43 7
White
32 0
Giới thiệu Google là một công ty dẫn đầu về phần mềm xử lý Big Data. Hầu hết các phần mềm xử lý dữ liệu như Hadoop đều có nguồn gốc ý tưởng từ Goo...
Bùi Hồng Hà viết 2 năm trước
32 0
Bài viết liên quan
White
10 0
Hadoop là cái gì vậy? “Hadoop là một framework nguồn mở viết bằng Java cho phép phát triển các ứng dụng phân tán có cường độ dữ liệu lớn một cách ...
nguyenduyhao1111 viết hơn 1 năm trước
10 0
White
12 0
Trước khi so sánh khác nhau về HDFS và HDFS2. Chúng ta đi tìm hiểu về HDFS là cái gì, kiến trúc thế nào? Vì sao điều này lại quan trọng. Bởi vì đâ...
nguyenduyhao1111 viết hơn 1 năm trước
12 0
White
1 1
Gần đây mình có thử chạy hadoop trên aerospike database theo tutorial https://github.com/aerospike/aerospikehadoop Khi build xong jar file của sa...
Hoàng Minh Trung viết gần 3 năm trước
1 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
59 bài viết.
262 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!