HBase
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> HBase

Sao lưu Apache HBase trực tuyến với CopyTable

CopyTable là một tiện ích Apache HBase đơn giản, không ngạc nhiên khi có thể được sử dụng để sao chép các bảng riêng lẻ trong một cụm HBase hoặc từ một cụm HBase này sang một cụm HBase khác. Trong bài đăng blog này, chúng ta sẽ nói về công cụ này là gì, tại sao bạn muốn sử dụng nó, cách sử dụng nó và một số lưu ý về cấu hình phổ biến.

Các trường hợp sử dụng:

CopyTable cốt lõi là một công việc Apache Hadoop MapReduce sử dụng giao diện đường dẫn đọc HBase Scan tiêu chuẩn để đọc các bản ghi từ một bảng riêng lẻ và ghi chúng vào một bảng khác (có thể trên một cụm riêng biệt) bằng cách sử dụng giao diện đường dẫn ghi HBase Put tiêu chuẩn. Nó có thể được sử dụng cho nhiều mục đích:

  • Bản sao nội bộ của bảng (Ảnh chụp nhanh của người đàn ông tội nghiệp)
  • Sao lưu phiên bản HBase từ xa
  • Các bản sao bảng HBase tăng dần
  • Bản sao một phần bảng HBase và thay đổi giản đồ bảng HBase

Các giả định và hạn chế:

Công cụ CopyTable có một số giả định và hạn chế cơ bản. Trước tiên, nếu được sử dụng trong tình huống nhiều cụm, cả hai cụm phải trực tuyến và cá thể đích cần có bảng đích có cùng họ cột được xác định như bảng nguồn.

Vì công cụ sử dụng các chức năng quét và đặt tiêu chuẩn, nên cụm mục tiêu không nhất thiết phải có cùng số lượng nút hoặc vùng. Trên thực tế, nó có thể có số lượng bảng khác nhau, số lượng máy chủ vùng khác nhau và có thể có ranh giới phân chia vùng hoàn toàn khác nhau. Vì chúng tôi đang sao chép toàn bộ bảng, bạn có thể sử dụng cài đặt tối ưu hóa hiệu suất như đặt giá trị bộ nhớ đệm của máy quét lớn hơn để có hiệu quả hơn. Sử dụng giao diện đặt cũng có nghĩa là các bản sao có thể được tạo ra giữa các cụm của các phiên bản nhỏ khác nhau. (0.90.4 -> 0.90.6, CDH3u3 -> CDH3u4) hoặc các phiên bản tương thích với dây (0.92.1 -> 0.94.0).

Cuối cùng, HBase chỉ cung cấp đảm bảo ACID cấp hàng; điều này có nghĩa là trong khi CopyTable đang diễn ra, các hàng mới được chèn hoặc cập nhật có thể xảy ra và các chỉnh sửa đồng thời này sẽ được bao gồm hoàn toàn hoặc bị loại trừ hoàn toàn. Mặc dù các hàng sẽ nhất quán, nhưng không có gì đảm bảo về tính nhất quán, quan hệ nhân quả hoặc thứ tự đặt trên các hàng khác.

Bản sao nội bộ của bảng (Ảnh chụp nhanh của người đàn ông nghèo)

Các phiên bản của HBase lên đến và bao gồm các phiên bản 0.94.x mới nhất không hỗ trợ tính năng chụp nhanh bảng. Bất chấp những hạn chế về ACID của HBase, CopyTable có thể được sử dụng như một cơ chế chụp nhanh đơn giản để tạo bản sao vật lý của một bảng cụ thể.

Giả sử chúng ta có một bảng, tableOrig với các họ cột cf1 và cf2. Chúng tôi muốn sao chép tất cả dữ liệu của nó vào tableCopy. Trước tiên, chúng ta cần tạo tableCopy với các họ cột giống nhau:

srcCluster$ echo "create 'tableOrig', 'cf1', 'cf2'" | hbase shell

Sau đó, chúng tôi có thể tạo và sao chép bảng với tên mới trên cùng một phiên bản HBase:

srcCluster$ hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=tableCopy tableOrig

Thao tác này bắt đầu công việc MR sẽ sao chép dữ liệu.

Sao lưu phiên bản HBase từ xa

Giả sử chúng tôi muốn sao chép dữ liệu sang một cụm khác. Đây có thể là một bản sao lưu một lần, một công việc định kỳ hoặc có thể là khởi động để sao chép giữa các cụm. Trong ví dụ này, chúng ta sẽ có hai cụm riêng biệt:srcCluster và dstCluster.

Trong trường hợp nhiều cụm này, CopyTable là một quá trình đẩy - nguồn của bạn sẽ là phiên bản HBase mà hbase-site.xml hiện tại của bạn tham chiếu đến và các đối số được thêm trỏ đến cụm và bảng đích. Điều này cũng giả định rằng tất cả các MR TaskTrackers có thể truy cập tất cả các nút HBase và ZK trong cụm đích. Cơ chế cấu hình này cũng có nghĩa là bạn có thể chạy nó như một công việc trên một cụm từ xa bằng cách ghi đè các cấu hình hbase / mr để sử dụng cài đặt từ bất kỳ cụm từ xa nào có thể truy cập và chỉ định các nút ZK trong cụm đích. Điều này có thể hữu ích nếu bạn muốn sao chép dữ liệu từ một cụm HBase có SLA thấp hơn và không muốn trực tiếp chạy các công việc MR trên chúng.

Bạn sẽ sử dụng cài đặt –peer.adr để chỉ định nhóm ZK của cụm đích (ví dụ:cụm mà bạn đang sao chép vào). Đối với điều này, chúng tôi cần IP và cổng đại biểu ZK cũng như nút ZK gốc của HBase cho phiên bản HBase của chúng tôi. Giả sử một trong những máy này là srcClusterZK (được liệt kê trong hbase.zookeeper.quorum) và chúng tôi đang sử dụng cổng máy khách zk mặc định 2181 (hbase.zookeeper.property.clientPort) và ZK znode cha / hbase mặc định (Zookeeper.znode. cha mẹ). (Lưu ý:Nếu bạn có hai phiên bản HBase sử dụng cùng một ZK, bạn sẽ cần một Zookeeper.znode.parent khác nhau cho mỗi cụm.

# create new tableOrig on destination cluster
dstCluster$ echo "create 'tableOrig', 'cf1', 'cf2'" | hbase shell
# on source cluster run copy table with destination ZK quorum specified using --peer.adr
# WARNING: In older versions, you are not alerted about any typo in these arguments!
srcCluster$ hbase org.apache.hadoop.hbase.mapreduce.CopyTable --peer.adr=dstClusterZK:2181:/hbase tableOrig

Lưu ý rằng bạn có thể sử dụng đối số –new.name với –peer.adr để sao chép sang một bảng có tên khác trên dstCluster.

# create new tableCopy on destination cluster
dstCluster$ echo "create 'tableCopy', 'cf1', 'cf2'" | hbase shell
# on source cluster run copy table with destination --peer.adr and --new.name arguments.
srcCluster$ hbase org.apache.hadoop.hbase.mapreduce.CopyTable --peer.adr=dstClusterZK:2181:/hbase --new.name=tableCopy tableOrig

Thao tác này sẽ sao chép dữ liệu từ tableOrig trên srcCluster sang bảng dstCluster’s tableCopy.

Các bản sao bảng HBase tăng dần

Sau khi bạn có một bản sao của bảng trên một cụm đích, làm cách nào để bạn sao chép dữ liệu mới được ghi vào cụm nguồn? Một cách ngây thơ, bạn có thể chạy lại công việc CopyTable và sao chép trên toàn bộ bảng. Tuy nhiên, CopyTable cung cấp một cơ chế sao chép gia tăng hiệu quả hơn chỉ sao chép các hàng được cập nhật từ srcCluster sang dstCluster sao lưu được chỉ định trong một khoảng thời gian. Do đó, sau bản sao đầu tiên, bạn có thể có một công việc cron định kỳ chỉ sao chép dữ liệu từ giờ trước đó từ srcCluster sang dstCuster.

Điều này được thực hiện bằng cách chỉ định các đối số –starttime và –endtime. Thời gian được chỉ định dưới dạng mili giây thập phân kể từ thời gian kỷ nguyên đơn lẻ.

# WARNING: In older versions, you are not alerted about any typo in these arguments!
# copy from beginning of time until timeEnd 
# NOTE: Must include start time for end time to be respected. start time cannot be 0.
srcCluster$ hbase org.apache.hadoop.hbase.mapreduce.CopyTable ... --starttime=1 --endtime=timeEnd ...
# Copy from starting from and including timeStart until the end of time.
srcCluster$ hbase org.apache.hadoop.hbase.mapreduce.CopyTable ... --starttime=timeStart ...
# Copy entries rows with start time1 including time1 and ending at timeStart excluding timeEnd.
srcCluster$ hbase org.apache.hadoop.hbase.mapreduce.CopyTable ... --starttime=timestart --endtime=timeEnd

Bản sao một phần bảng HBase và thay đổi giản đồ bảng HBase

Theo mặc định, CopyTable sẽ sao chép tất cả các họ cột từ các hàng phù hợp. CopyTable cung cấp các tùy chọn để chỉ sao chép dữ liệu từ các họ cột cụ thể. Điều này có thể hữu ích cho việc sao chép dữ liệu nguồn ban đầu và loại trừ các họ cột dữ liệu dẫn xuất được thêm vào bằng cách xử lý theo dõi.

Bằng cách thêm các đối số này, chúng tôi chỉ sao chép dữ liệu từ các họ cột được chỉ định.

  • –families =srcCf1
  • –families =srcCf1, srcCf2

Bắt đầu từ 0.92.0, bạn có thể sao chép trong khi thay đổi họ cột:

  • –families =srcCf1:dstCf1
    • sao chép từ srcCf1 sang dstCf1
  • –families =srcCf1:dstCf1, dstCf2, srcCf3:dstCf3
    • sao chép từ srcCf1 sang destCf1, sao chép dstCf2 thành dstCf2 (không đổi tên) và srcCf3 thành dstCf3

Xin lưu ý rằng dstCf * phải có trong bảng dstCluster!

Bắt đầu từ 0.94.0, các tùy chọn mới được cung cấp để sao chép các điểm đánh dấu xóa và bao gồm một số phiên bản bị ghi đè hạn chế. Trước đây, nếu một hàng bị xóa trong cụm nguồn, thì việc xóa sẽ không được sao chép - thay vào đó, phiên bản cũ của hàng đó sẽ vẫn còn trong cụm đích. Điều này tận dụng một số tính năng nâng cao của bản phát hành 0.94.0.

  • –versions =vers
    • trong đó vers là số phiên bản ô cần sao chép (mặc định là 1 hay chỉ là phiên bản mới nhất)
  • –all.cells
    • cũng sao chép các điểm đánh dấu xóa và các ô đã xóa

Những cạm bẫy phổ biến

Ứng dụng khách HBase trong các phiên bản 0.90.x, 0.92.x và 0.94.x luôn sử dụng Zoo.cfg nếu nó nằm trong classpath, ngay cả khi tệp hbase-site.xml chỉ định cài đặt cấu hình số đại biểu ZooKeeper khác. “Tính năng” này gây ra sự cố phổ biến trong CDH3 HBase vì các gói của nó được mặc định bao gồm một thư mục nơi Zoo.cfg nằm trong classpath của HBase. Điều này có thể và đã dẫn đến sự thất vọng khi cố gắng sử dụng CopyTable (HBASE-4614). Giải pháp cho việc này là loại trừ tệp Zoo.cfg khỏi đường dẫn classpath của HBase và chỉ định các thuộc tính cấu hình ZooKeeper trong tệp hbase-site.xml của bạn. http://hbase.apache.org/book.html#zookeeper

Kết luận

CopyTable cung cấp bảo hiểm khôi phục thảm họa đơn giản nhưng hiệu quả cho việc triển khai HBase 0.90.x (CDH3). Cùng với tính năng sao chép được tìm thấy và hỗ trợ trong HBase dựa trên HBase 0.92.x của CDH4, các tính năng gia tăng của CopyTable trở nên ít giá trị hơn nhưng chức năng cốt lõi của nó rất quan trọng để khởi động bảng sao chép. Mặc dù các tính năng nâng cao hơn như ảnh chụp nhanh HBase (HBASE-50) có thể hỗ trợ khôi phục thảm họa khi nó được triển khai, CopyTable vẫn sẽ là một công cụ hữu ích cho quản trị viên HBase.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tách và hợp nhất vùng Apache HBase

  2. tạo nhanh một bảng hbase mẫu

  3. Thực thi đầu cơ trong Hadoop MapReduce

  4. Cách thực hiện:Sử dụng tính năng Tải hàng loạt của HBase và tại sao

  5. Hadoop Cluster là gì? Các phương pháp hay nhất để xây dựng các cụm Hadoop