HBase Performance Tuning | Ways For HBase Optimization - فيسبوك

‎We won’t support this browser soon. For a better experience, we recommend using another browser. ‎تعرف على المزيد‎‎فيسبوكانضمام أو تسجيل دخول إلى فيسبوك   البريد الإلكتروني أو الهاتفكلمة السرهل نسيت الحساب؟تسجيل الدخولهل تريد الانضمام إلى فيسبوك؟إنشاء حساب في فيسبوكتسجيلHBase Performance Tuning | Ways For HBase OptimizationTrần Hưng·الأحد، ١٠ مايو ٢٠٢٠·مجموعة عامةHi cả nhà, hôm nay trong bài viết này mình xin giới thiệu với các bạn về một số cách để tối ưu hoạt động của HBase. Trước khi đọc bài này mình nghĩ các bạn nên xem lại bài viết giới thiệu về Kiến trúc HBase để có một cái nhìn thể về Hbase đã nhé!Như chúng ta đã biết HBase cũng là một phần của kiến trúc Hadoop và cơ sở dữ liệu phân tán do đó việc tối ưu hiệu năng cho HBase càng nhiều sẽ càng tốt, nó cũng sẽ giúp chúng ta rút ngắn được các chi phí cho các thao tác dữ liệu trong HBase cũng như hệ thống của chúng ta hoạt một một cách trơn tru và mượt mà hơn.Nội dung chính của bài viết của mình sẽ gồm các phần sau:
HBase Performance Tuning
1. Hiệu chỉnh bộ thu gom rác (Garbage Collection Tuning)Tham số thu gom rác - Garbage Collection Parameter là một trong những cài đặt lower-level mà chúng ta cần hiệu chỉnh cho các region server processes. Trong HBase dữ liệu chắc chắn không đi qua Master và Master cũng không xử lý bất kỳ tải nặng nào vì vậy chúng ta sẽ chỉ hiệu chỉnh các tham số thu gom rác cho các region servers.Thế tại sao chúng ta lại phải hiệu chỉnh tham số này? HBase hoạt động dựa trên JRE, các tiến trình sẽ tạo các đối tượng cũng như xin cấp phát bộ nhớ heap để xử lý dữ liệu... có một điều là JRE lại không handle tốt các region servers khi mà dữ liệu được ghi với dung lượng lớn, việc cấp phát bộ nhớ sẽ bị treo và nó sẽ không an toàn cho hệ thống, chúng ta sẽ cần phải hiệu chỉnh các tùy chọn của JRE để điều chỉnh các chiến lược thu gom rác phù hợp với khối lượng công việc.Đối với các trường hợp ghi dữ liệu với dung lượng lớn, MemStore tạo và loại bỏ các đối tượng ở nhiều thời điểm khác nhau và ở các kích cỡ khác nhau, Dữ liệu được lưu đệm trên bộ nhớ và nó sẽ duy trì ở đó cho đến khi vượt quá kích thước xả tối thiểu (minimum flush size), chúng ta có thể hiệu chỉnh nó với thuộc tính hbase.hregion.memstore.flush.size trong file cấu hình hbase-site.xml.Chúng ta có thể cấu hình các tùy chọn cho bộ thu gom rác bằng cách thêm các cấu hình cho biến HBASE_OPTS hoặc HBASE_REGIONSERVER_OPTStrong file hbase-env.sh để hiệu chỉnh cho bộ thu gom rác, cụ thể đó là các tham số sau:# cấu hình kích thước file khi tạo mới trên heap-Xmn128m# cấu hình hiển thị log gc-verbose:gc-XX:+PrintGCDetails-XX:+PrintGCTimeStamps-Xloggc:$HBASE_HOME/logs/gc-$(hostname)-hbase.log# cấu hình sử dụng trình quét đồng thời – CMS với 70% tài nguyên-XX:+UseConcMarkSweepGC-XX:CMSInitiatingOccupancyFraction=70Chú ý rằng: các giá trị có thể tuỳ biến cho phù hợp với các hệ thống và dữ liệu thực tế.2. Hiệu chỉnh bộ đệm phân bổ Memstore-Local (Memstore-Local Allocation Buffer)
Data Write
Để giảm thiểu vấn đề phân mảnh heap do quá nhiều phiên bản memstore của một HBase Region Server, phiên bản 0.90 của HBase đã giới thiệu một cơ chế nâng cao đó chính là bộ đệm phân bổ Memstore-Local (MSLAB).Theo như Garbage Collection Tuning chúng ta đã biết rằng khi dữ liệu được flush, nó sẽ tạo ra các vùng trống trong vùng dữ liệu Heap cũ, Khi không còn đủ không gian cấp mới cho các đối tượng do phân mảnh gây ra, JRE sẽ dừng lại và thực hiện thu gom rác, nó ghi lại toàn bộ không gian Heap và gom lại các vùng trống cho các đối tượng hoạt động.Chìa khóa để giảm việc thu gom tổng hợp này là giảm phân mảnh và MSLAB (Memstore-Local Allocation Buffer) được xây dựng để giúp giải quyết vấn đề đó. Ý tưởng ở đây là chỉ các đối tượng có cùng kích thước mới được phân bổ trong Heap do đó khi dữ liệu được flush, các vùng trống được tạo ra là hoàn toàn phù hợp cho các đối tượng mới được phân bổ và JRE sẽ không phải dừng lại để thực hiện việc thu gom rác, hệ thống của chúng ta sẽ hoạt động mượt mà hơn…Chúng ta có thể cấu hình bật tắt MSLAB bằng cách thay đổi thuộc tính hbase.hregion.memstore.mslab.enabled trong file hbase-default.xml với giá trị true/false. Tính năng này được bật theo mặc định trong các phiên bản >=0.92 và bị tắt trong phiên bản <=0.90 của HBase.Chúng ta có thể cấu hình kích thước bộ đệm phân bổ bằng cách thay đổi giá trị của thuộc tính hbase.hregion.memstore.mslab.chunksize trong file hbase-default.xml, giá trị mặc định của nó là 2MB.Chú ý rằng: cái gì cũng có 2 mặt của nó, nếu chúng ta bật MSLAB chúng ta phải đánh đổi sự lãng phí bộ nhớ vì với các KeyValue có dung lượng thấp hay không lấp đầy bộ đệm thì sẽ có nhiều bye trống được tạo ra, chúng ta sẽ không tối ưu được bộ nhớ nhưng đổi lại chúng ta sẽ có sự trơn tru trong các hoạt động của HBase.3. Nén trong HBase (HBase Compression)
HBase Compression
Có một tính năng nữa của HBase, đó là nó hỗ trợ một số thuật toán nén. Về cơ bản, thuật toán nén HBase có thể được kích hoạt ở column family level. Ngoài ra, nén cũng mang lại hiệu năng tốt hơn, đối với mọi trường hợp CPU thực hiện nén và giải nén, chi phí hoạt động sẽ thấp hơn hoạt động đọc thêm dữ liệu từ đĩa.Kiểm tra các thuật toán nén đã cài đặt:$ ./bin/hbase org.apache.hadoop.hbase.util.CompressionTestUsage: CompressionTest <path> none|gz|lzo|snappyCấu hình kiểm tra thư viện nén khi Region Server khởi động trong file hbase-site.xml:<property> <name>hbase.regionserver.codecs</name> <value>snappy,lzo</value></property>Enable nén trong HBase:hbase(main):001:0> create 'testtable', { NAME => 'colfam1', COMPRESSION => 'GZ' }0 row(s) in 1.1920 secondshbase(main):012:0> describe 'testtable'DESCRIPTION ENABLED{NAME => 'testtable', FAMILIES => [{NAME => 'colfam1', trueBLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', VERSIONS=> '3', COMPRESSION => 'GZ', TTL => '2147483647', BLOCKSIZE=> '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}]}1 row(s) in 0.0400 secondsGiải thích: đoạn code trên thực hiện tạo bảng và enable nén cho họ cột “colfam1”, chúng ta cũng có thể sử dụng lệnh alter để thay đổi enable/disable nén cho bảng đã tồn tại trong HBase.4. Cân bằng tải (Load Balancing)
Region Load Balancing
Có một tính năng tích hợp trong Master, cái mà chúng ta gọi là bộ cân bằng, về cơ bản, theo mặc định bộ cân bằng chạy 5 phút một lần. Chúng ta có thể thay đổi chu kỳ này bằng cách thay đổi giá trị thuộc tính hbase.balancer.period trong file hbase-default.xml. Khi bộ cân bằng được khởi động, nó sẽ cố gắng cân bằng số lượng vùng được chỉ định cho mỗi Region Server.Chúng ta có thể sử dụng lệnh balance_switch true/false hoặc balanceSwitch() API để bật/tắt bộ cân bằng trong HBase.Chúng ta cũng đã biết một bảng có thể được lưu trên nhiều Region Server HBase vì thế để chủ động kiểm soát các Region Server lưu bảng chúng ta cũng có thể chủ động sử dụng lệnh move hoặc API dể gán một vùng bất kỳ cho một Region Server bất kỳ.6. Gộp vùng (Merging Regions)Khi chúng ta thêm dữ liệu và bảng trong HBase dữ liệu sẽ được phân chia tự động cho các vùng theo thời gian, tuy nhiên đôi khi chúng ta vẫn cần phải gộp các vùng lại với nhau, ví dụ như sau khi chúng ta xóa một lượng lớn dữ liệu và chúng ta muốn giảm số lượng vùng được lưu trữ ở mỗi Region Server.HBase cung cấp lệnh gộp hai vùng liền kề khi cụm không online, chúng ta có thể xem chi tiết lệnh gộp vùng:$ ./bin/hbase org.apache.hadoop.hbase.util.MergeUsage: bin/hbase merge <table-name> <region-1> <region-2>7. Cấu hình HBase (HBase Configuration)Trong HBase có rất nhiều thuộc tính chúng ta cần cấu hình và phần lớn các thuộc tính này được đặt trong file hbase-site.xml, chúng ta chỉ cần chỉnh sửa các thuộc tính này cho phù hợp với mục đích và copy file này vào tất cả các server trong cụm sau đó khởi động lại các servers để áp dụng các thay đổi. Dưới đây là các thuộc tính thường được chỉnh sửa để tối ưu hiệu năng của HBase.7.1. Giảm thời gian chờ ZooKeeperMặc định thời gian chờ giữa Region Server và ZooKeeper trong HBase là 90 giây, nó được cấu hình bởi thuộc tính zookeeper.session.timeout, điều này có nghĩa là nếu một Region Server gặp sự số thì phải mất 90 giây Hmaster mới được thông báo và quá trình khôi phục mới được bắt đầu, vì thế chúng ta hoàn toàn có thể giảm thời gian chờ này xuống 60 giây hoặc ít hơn.Có một lưu ý là thời gian này phải lớn hơn thời gian chờ thu gom rác do đó chúng ta cần phải tính toán dựa theo đặc thù của hệ thống hiện tại để cấu hình cho phù hợp.7.2. Tăng khả năng xử lýMặc định số lượng luồng được giữ để trả lời các requests tới các bảng người dùng là 30 luồng, nó được cấu hình bởi thuộc tính hbase.regionserver.handler.count. Nguyên tắc chung là chúng ta nên đặt giá trị thấp khi dung lượng mỗi yêu cầu lên tới MB như các hoạt động put dư liệu lớn, scan sử dụng bộ đệm lớn, nên đặt giá trị cao khi dung lượng các yêu cầu đến là nhỏ ví dụ như các hoạt động get, put dữ liệu nhỏ, tăng giá trị, xóa dữ liệu.Có một lưu ý là chúng ta không nên đặt quá cao bởi vì nếu có quá nhiều tác vụ dữ liệu thực hiện song song sẽ gây áp lực lên bộ nhớ RAM và có thể gây ra lỗi OutOfMemoryError.7.3. Tăng cài đặt HeapMặc định bộ nhớ Heap của HBase được cấu hình phù hợp và thận trọng để người dùng có thể thử nghiệm nó trên hầu hết các loại máy, giá trị này mặc định là 1GB được cấu hình bởi thuộc tính HBASE_HEAPSIZE trong file hbase-env.sh. Nếu máy chủ của chúng ta có cấu hình tốt chúng ta hoàn toàn có thể tăng giá trị này lên để hệ thống hoạt động hiệu quả hơn.Có một lưu ý là chúng ta có thể cân nhắc cấu hình thuộc tính HBASE_REGIONSERVER_OPTS thay vì HBASE_HEAPSIZE để cấu hình riêng lẻ cho mỗi Region Server.7.4. Tăng kích thước vùngChúng ta có thể cấu hình tăng kích thước của vùng đểm giảm số lượng vùng trên cụm HBase, khi ít vùng thì công việc quản lý sẽ nhẹ nhàng hơn và hệ thống sẽ hoạt động tốt hơn, theo mặc định phiên bản HBase hiện tại đang để dung lượng max cho mỗi vùng là 10 GB, chúng ta có thể hiệu chỉnh lại giá trị này bởi thuộc tính hbase.hregion.max.filesize trong file hbase-site.xml.7.5. Điều chỉnh kích thước bộ đệm khốiDung lượng bộ nhớ Heap đượng sử dung cho bộ đệm khối (block cache) được tính theo phần trăm, nó được cấu hình bởi thuộc tính hfile.block.cache.size trong file hbase-default.xml, giá trị của nó là số float, mặc định ở phiên bản HBase mới nhất giá trị của nó là 0.4 (40%). Chúng ta cần tăng giá trị này nếu như hoạt động chính của cụm HBase là đọc dữ liệu.7.6. Điều chỉnh giới hạn memstoreDung lượng MemStore Heap được cấu hình bởi thuộc tính hbase.regionserver.global.memstore.upperLimittrong file hbase-default.xml, mặc định giá trị của nó là 0.4 (40%), ngoài ra còn có thuộc tính hbase.regionserver.global.memstore.lowerLimit với giá trị mặc định là 0.35 (35%) được sử dụng để kiểm soát lượng dữ liệu flush sẽ diễn ra khi máy chủ được yêu cầu giải phóng không gian Heap. Chúng ta cần giữ các giới hạn trên và dưới gần nhau để tránh flush dữ liệu quá mức.Nếu hoạt động chính của chúng ta là đọc thì chúng ta có thể cân nhắc giảm cả 2 giới hạn để có thêm bộ nhớ cho bộ đệm khối, ngược lại nếu chúng ta có nhiều hoạt động ghi dữ liệu thì chúng ta nên tăng cả 2 giới hạn để giảm các chi phí I/O.7.7. Tăng số lượng khối cho các file lưu trữSố lượng khối cho các file lưu trữ được cấu hình bởi thuộc tính hbase.hstore.blockingStoreFiles, trong bản HBase hiện tại, mặc định là 16, nếu chúng ta tăng giá trị này lên thì Region Server sẽ tính toán để giảm số lượng file, thông thường chúng ta nên tăng giá trị này nếu hệ thống của chúng ta có nhiều hoạt động ghi dữ liệu.7.8. Tăng block multiplierGiá trị block multiplier được cấu hình trong thuộc tính hbase.hregion.memstore.block.multiplier, ở bản HBase hiện tại mặc định đang là 4, nếu chúng ta có nhiều bộ nhớ chúng ta có thể tăng giá trị này lên để giúp hệ thống xử lý đột biến dữ liệu tốt hơn: thay vì chặn các bản cập nhật để chờ quá trình flush hoàn tất chúng ta hoàn toàn có thể thêm dữ liệu.7.9. Giảm maximum logfilesGiá trị maximum logfiles được cấu hình trong thuộc tính hbase.regionserver.maxlogs, giá trị mặc định của nó là 32, nó cho phép kiểm soát hoạt động flush dữ liệu dựa vào số lượng file WAL trên đĩa, nếu chúng ta có các hoạt động ghi dữ liệu lớn thì chúng ta nên giảm giá trị này.Như vậy mình vừa giới thiệu xong với các bạn các cách phổ biến nhất để tối ưu hiệu năng hoạt động cho hệ thống HBase, việc tối ưu này nó sẽ không có một mẫu chung nào cả bởi vì nó còn tùy thuộc vào đặc thù của mỗi hệ thống cũng như mục đích và cách hoạt động của hệ thống, mỗi một tham số thuộc tính cấu hình chúng ta đều cần cân nhắc lựa chọn sao cho phù hợp và đôi khi chúng ta còn phải sử dụng đến các phép thử để kiểm tra tác dụng của nó... Hi vọng bài viết đem tới cho các bạn những điều bổ ích, chúc các bạn buổi tối chủ nhật vui vẻ !Tham khảo: HBase The Definitive Guide
Brg!
  • العربية
  • Tiếng Việt
  • English (UK)
  • 中文(台灣)
  • 한국어
  • 日本語
  • Français (France)
  • ภาษาไทย
  • Español
  • Português (Brasil)
  • Deutsch
  • إنشاء حساب في فيسبوك
  • تسجيل الدخول
  • Messenger
  • Facebook Lite
  • فيديو
  • الأماكن
  • الألعاب
  • Marketplace
  • Meta Pay
  • متجر Meta
  • Meta Quest
  • Ray-Ban Meta
  • Meta AI
  • Instagram
  • Threads
  • حملات جمع التبرعات
  • الخدمات
  • مركز معلومات التصويت
  • سياسة الخصوصية
  • مركز الخصوصية
  • المجموعات
  • حول
  • إنشاء إعلان
  • إنشاء صفحة
  • المطوّرون
  • الوظائف
  • ملفات تعريف الارتباط
  • اختيارات الإعلانات
  • الشروط
  • مساعدة
  • تحميل جهات الاتصال والإشعار غير المتعلق بالمستخدمين
  • الإعدادات
  • سجل النشاطات
Meta © 2024

Từ khóa » Cài đặt Hbase