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

Lập chỉ mục email bằng Tìm kiếm Cloudera và HBase

Trong bài trước của tôi, bạn đã học cách lập chỉ mục email ở chế độ hàng loạt và trong thời gian gần thực, bằng cách sử dụng Apache Flume với MorphlineSolrSink. Trong bài đăng này, bạn sẽ học cách lập chỉ mục email bằng Tìm kiếm Cloudera với Apache HBase và Lily HBase Indexer, được duy trì bởi NGDATA và Cloudera. (Nếu bạn chưa đọc bài trước, tôi khuyên bạn nên làm như vậy để tìm hiểu nền tảng trước khi đọc tiếp.)

Lựa chọn phương pháp gần thời gian thực nào, HBase Indexer hoặc Flume MorphlineSolrSink, sẽ hoàn toàn phụ thuộc vào trường hợp sử dụng của bạn, nhưng dưới đây là một số điều cần cân nhắc khi đưa ra quyết định đó:

  • HBase có phải là phương tiện lưu trữ tối ưu cho trường hợp sử dụng nhất định không?
  • Dữ liệu đã được nhập vào HBase chưa?
  • Có bất kỳ hình thức truy cập nào yêu cầu tệp được lưu trữ ở định dạng khác với tệp HF không?
  • Nếu HBase hiện không chạy, liệu có đủ tài nguyên phần cứng để kích hoạt nó không?

Có hai cách để cấu hình Cloudera Search để lập chỉ mục các tài liệu được lưu trữ trong HBase:thay đổi trực tiếp tệp cấu hình và khởi động Lily HBase Indexer theo cách thủ công hoặc dưới dạng dịch vụ, hoặc để định cấu hình mọi thứ bằng Trình quản lý Cloudera. Bài đăng này sẽ tập trung vào phần sau, vì cho đến nay đây là cách dễ nhất để bật Tìm kiếm trên HBase - hoặc bất kỳ dịch vụ nào khác trên CDH, cho vấn đề đó.

Tìm hiểu về nhân bản HBase và Trình chỉ mục Lily HBase

Khi thiết kế giải pháp này, Cloudera đã xác định bốn yêu cầu chính để làm cho việc lập chỉ mục HBase hiệu quả:

  • Độ trễ lập chỉ mục phải theo thời gian gần thực (giây) và có thể điều chỉnh được
  • Chỉ số Solr cuối cùng phải nhất quán với bảng HBase trong khi các thao tác chèn, cập nhật và xóa được áp dụng cho HBase
  • Cơ chế lập chỉ mục phải có khả năng mở rộng và khả năng chịu lỗi
  • Quá trình lập chỉ mục không thể làm chậm quá trình ghi HBase

Để đáp ứng những yêu cầu này, Cloudera Search sử dụng cơ chế sao chép nguyên bản của HBase. Đối với những người không quen với việc sao chép HBase, đây là một bản tóm tắt ngắn gọn và rất cao cấp:

Khi các bản cập nhật được áp dụng cho ghi nhật ký (WAL), HBase RegionServer lắng nghe các bản cập nhật này trên một chuỗi riêng biệt. Khi bộ đệm của luồng đó được lấp đầy hoặc chạm đến cuối tệp, nó sẽ gửi các lô với tất cả các bản cập nhật được sao chép tới một Máy chủ vùng ngang hàng đang chạy trên một cụm khác. Do đó, WAL rất cần thiết để lập chỉ mục hoạt động.

Cloudera Search sử dụng cơ chế sao chép HBase, cơ chế này sẽ lắng nghe các sự kiện đột biến hàng HBase và thay vì gửi các bản cập nhật đến một Máy chủ vùng khác, hãy gửi chúng đến Máy chủ lập chỉ mục Lily HBase. Đổi lại, Lily HBase Indexer áp dụng logic chuyển đổi Cloudera Morphlines, chia nhỏ các sự kiện thành các trường Solr và chuyển tiếp chúng vào Máy chủ Apache Solr.

Có những lợi thế lớn khi sử dụng sao chép HBase so với việc triển khai cùng một chức năng trong bộ đồng xử lý HBase. Đầu tiên, sao chép hoạt động song song và không đồng bộ với dữ liệu được nhập vào HBase. Do đó, lập chỉ mục Tìm kiếm Cloudera không thêm bất kỳ độ trễ hoặc hoạt động không ổn định nào vào hoạt động HBase thông thường. Thứ hai, sử dụng phương pháp sao chép cho phép các thay đổi liên tục đối với logic chuyển đổi. Ngược lại, để thực hiện một thay đổi thông qua sửa đổi bộ đồng xử lý, yêu cầu khởi động lại Máy chủ Vùng, điều này sẽ làm cho dữ liệu không khả dụng cho người dùng HBase. Có lẽ điều quan trọng nhất là việc triển khai các bộ đồng xử lý khá dễ xâm nhập và nếu không được kiểm tra đúng cách, có thể làm gián đoạn hiệu suất của HBase.

Quy trình này được minh họa bên dưới:

Cài đặt Tìm kiếm Cloudera và Triển khai Trình lập chỉ mục Lily HBase

Trình quản lý Cloudera tự động tải xuống và triển khai Tìm kiếm Cloudera dưới dạng một gói duy nhất. Tất cả những gì bạn phải làm là nhấp vào biểu tượng “Gói” ở điều hướng trên cùng, chọn phiên bản Solr và tải xuống, phân phối và kích hoạt nó:

Như đã đề cập trước đó, Tìm kiếm Cloudera phụ thuộc vào bản sao HBase, và do đó, tính năng này sẽ được bật tiếp theo. Kích hoạt sao chép bằng cách nhấp vào Dịch vụ HBase-> Cấu hình-> Sao lưu và đảm bảo “Bật nhân bản HBase” và “Bật lập chỉ mục” đều được chọn. Nếu cần, hãy lưu các thay đổi và khởi động lại dịch vụ HBase.

Để thêm Trình lập chỉ mục Lily HBase, hãy đi tới Dịch vụ-> Thêm dịch vụ , chọn “Keystore Indexer” và thêm nó, trỏ nó đến phiên bản HBase sẽ được sử dụng để xử lý email:

Định cấu hình Solr

Tiếp theo, hãy cấu hình Solr chính xác như được mô tả trong bài viết trước tại đây.

  1. Tạo tệp cấu hình schema.xml mẫu:
    $ solrctl --zk localhost:2181/solr \
    instancedir --generate $HOME/emailSearchConfig
    

  2. Chỉnh sửa tệp schema.xml trong $ HOME / emailSearchConfig, với tệp cấu hình sẽ xác định các trường liên quan đến xử lý email. Bạn có thể tìm thấy bản sao đầy đủ của tệp tại liên kết này.
  3. Tải các cấu hình Solr lên ZooKeeper:
    $ solrctl --zk localhost:2181/solr instancedir  \
    --create email_collection $HOME/emailSearchConfig
    

  4. Tạo bộ sưu tập Solr:
    $ solrctl --zk localhost:2181/solr collection  \
    --create email_collection -s 1
    

Đăng ký Trình chỉ mục

Bước này là cần thiết để thêm và cấu hình trình chỉ mục và bản sao HBase. Lệnh dưới đây sẽ cập nhật ZooKeeper và thêm myindexer làm ứng dụng ngang hàng sao chép cho HBase. Nó cũng sẽ chèn các cấu hình vào ZooKeeper, mà Lily HBase Indexer sẽ sử dụng để trỏ đến đúng bộ sưu tập trong Solr.

$ hbase-indexer add-indexer -n myindexer -c indexer-config.xml  \
       -cp solr.zk=localhost:2181/solr  \
       -cp solr.collection=collection1

Lập luận:

  • -n myindexer - chỉ định tên của trình lập chỉ mục sẽ được đăng ký trong ZooKeeper
  • -c indexer-config.xml - tệp cấu hình sẽ chỉ định hành vi của trình lập chỉ mục
  • -cp solr.zk =localhost:2181 / solr - chỉ định vị trí của cấu hình ZooKeeper và Solr. Điều này sẽ được cập nhật với vị trí môi trường cụ thể của ZooKeeper.
  • -cp solr.collection =collection1 - chỉ định bộ sưu tập nào cần cập nhật. Nhớ lại bước Cấu hình Solr nơi chúng ta đã tạo bộ sưu tập1.

Trong trường hợp này, tệp index-config.xml tương đối đơn giản; tất cả những gì nó làm là chỉ định cho người lập chỉ mục xem bảng nào, lớp sẽ được sử dụng như một trình ánh xạ (com.ngdata.hbaseindexer.morphline.MorphlineResultToSolrMapper) và vị trí của tệp cấu hình Morphline. Loại ánh xạ được đặt thành cột bởi vì chúng tôi muốn nhận từng ô dưới dạng một tài liệu Solr riêng lẻ. Theo mặc định, loại ánh xạ được đặt thành hàng , trong trường hợp đó, tài liệu Solr trở thành hàng đầy đủ.

Param name =”morphlineFile” chỉ định vị trí của tệp cấu hình Morphlines. Vị trí có thể là đường dẫn tuyệt đối của tệp Morphlines của bạn, nhưng vì bạn đang sử dụng Trình quản lý Cloudera, hãy chỉ định đường dẫn tương đối:“morphlines.conf”.

   
   


   
   

Bạn có thể tìm thấy nội dung của tệp cấu hình hbase-indexer tại liên kết này.

Đối với tham chiếu đầy đủ của lệnh hbase-indexer, chỉ cần thực thi lệnh mà không có bất kỳ đối số nào là đủ:

$ hbase-indexer

Usage: hbase-indexer 
where  an option from one of these categories:

TOOLS
  add-indexer
  update-indexer
  delete-indexer
  list-indexers

PROCESS MANAGEMENT
  server           run the HBase Indexer server node

REPLICATION (EVENT PROCESSING) TOOLS
  replication-status
  replication-wait

PACKAGE MANAGEMENT
  classpath        dump hbase CLASSPATH
  version          print the version

 or
  CLASSNAME        run the class named CLASSNAME
Most commands print help when invoked w/o parameters.

Định cấu hình và khởi động Trình chỉ mục Lily HBase

Nếu bạn nhớ lại, khi bạn thêm Lily HBase Indexer, bạn đã chỉ định phiên bản HBase được liên kết với nó. Do đó, bạn không cần thực hiện điều đó ở bước này. Tuy nhiên, bạn cần chỉ định logic chuyển đổi Morphlines sẽ cho phép trình lập chỉ mục này phân tích cú pháp email và trích xuất tất cả các trường có liên quan.

Đi tới Dịch vụ và chọn Trình lập chỉ mục Lily HBase mà bạn đã thêm trước đó. Chọn Cấu hình-> Xem và chỉnh sửa-> Toàn dịch vụ-> Đường hình thái . Sao chép và dán tệp morphlines.

Thư viện email morphlines sẽ thực hiện các tác vụ sau:

1. Đọc các sự kiện email HBase bằng lệnh extractHBaseCells
2. Chia văn bản không có cấu trúc thành các trường bằng lệnh grok
3. Nếu email bị thiếu ID thư, hãy tạo ID bằng lệnh createUUID
4. Chuyển đổi ngày / dấu thời gian thành một trường mà Solr sẽ hiểu, bằng lệnh convertTimestamp
5. Bỏ tất cả các trường bổ sung mà chúng tôi không chỉ định trong schema.xml bằng lệnh sanitizeUknownSolrFields

Lệnh extractHBaseCells đáng được chú ý hơn, vì nó là điều duy nhất khác biệt về cấu hình morphlines của HBase Indexer. Các thông số là:

  • inputColumn - chỉ định các cột để đăng ký (có thể là ký tự đại diện)
  • outputFied - tên của trường nơi dữ liệu được gửi
  • type - loại trường (nó là chuỗi trong trường hợp nội dung email)
  • nguồn - có thể là giá trị hoặc đủ điều kiện; giá trị chỉ định rằng giá trị ô phải được lập chỉ mục
extractHBaseCells {
       mappings : [
        {
          inputColumn : "messages:*"
          outputField : "message"
          type : string
          source : value
          }
        ]
      }

Tải xuống bản sao của tệp morphlines này từ đây.

Một lưu ý quan trọng là trường id sẽ được tạo tự động bởi Lily HBase Indexer. Bạn có thể định cấu hình cài đặt đó trong tệp index-config.xml ở trên bằng cách chỉ định thuộc tính duy nhất-key-field. Cách tốt nhất là để lại tên mặc định của id - vì nó không được chỉ định trong tệp xml ở trên, trường id mặc định đã được tạo và sẽ là sự kết hợp của RowID-Column Family-Column Name.

Tại thời điểm này, hãy lưu các thay đổi và khởi động Trình lập chỉ mục Lily HBase từ Trình quản lý Cloudera.

Thiết lập Bảng Hộp thư đến trong HBase

Có nhiều cách để tạo bảng trong HBase theo chương trình (API Java, API REST hoặc một phương pháp tương tự). Ở đây bạn sẽ sử dụng vỏ HBase để tạo bảng hộp thư đến (cố ý sử dụng tên họ cột mô tả để làm cho mọi thứ dễ theo dõi hơn). Trong các ứng dụng sản xuất, họ phải luôn ngắn, vì họ luôn được lưu trữ với mọi giá trị dưới dạng một phần của khóa ô. Lệnh sau sẽ thực hiện điều đó và cho phép sao chép trên một họ cột được gọi là “thông báo”:

hbase(main):003:0>  create 'inbox', {NAME => 'messages', REPLICATION_SCOPE => 1}

Để kiểm tra xem bảng đã được tạo đúng cách hay chưa, hãy chạy lệnh sau:

hbase(main):003:0> describe 'inbox'
DESCRIPTION                                                                ENABLED
 {NAME => 'inbox', FAMILIES => [{NAME => 'messages', DATA_BLOCK_ENCODING => ' true
 NONE', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '1', VERSIONS => '3',
 COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => '2147483647', KEEP_DEL
 ETED_CELLS => 'false', BLOCKSIZE => '65536', IN_MEMORY => 'false', ENCODE
 _ON_DISK => 'true', BLOCKCACHE => 'true'}]}

Từ thời điểm này, bất kỳ email nào được đưa vào bảng “hộp thư đến” trong họ cột “thông báo” sẽ kích hoạt một sự kiện tới Lily HBase Indexer, trình này sẽ xử lý sự kiện, chia nhỏ thành các trường và gửi đến Solr để lập chỉ mục.

Lược đồ của bảng hộp thư đến rất đơn giản:ID hàng là tên của người mà hộp thư đến này thuộc về. Mỗi ô là một thông báo riêng lẻ với cột là một ID số nguyên duy nhất. Dưới đây là ảnh chụp nhanh bảng mẫu được hiển thị bởi giao diện Hue’s HBase:

Truy cập dữ liệu

Bạn có thể lựa chọn nhiều công cụ trực quan để truy cập các email đã được lập chỉ mục. Hue và Solr GUI đều là những lựa chọn rất tốt. HBase cũng cho phép một số kỹ thuật truy cập, không chỉ từ GUI mà còn thông qua HBase shell, API và thậm chí cả các kỹ thuật tập lệnh đơn giản.

Tích hợp với Solr mang lại cho bạn tính linh hoạt cao và cũng có thể cung cấp các tùy chọn tìm kiếm rất đơn giản cũng như nâng cao cho dữ liệu của bạn. Ví dụ:việc định cấu hình tệp schema.xml Solr để tất cả các trường trong đối tượng email được lưu trữ trong Solr cho phép người dùng truy cập nội dung thư đầy đủ thông qua một tìm kiếm đơn giản, với sự đánh đổi của không gian lưu trữ và độ phức tạp của tính toán.

Ngoài ra, bạn có thể định cấu hình Solr để chỉ lưu trữ một số trường giới hạn, chẳng hạn như id, người gửi và chủ đề. Với các phần tử này, người dùng có thể nhanh chóng tìm kiếm Solr và truy xuất (các) ID thông báo, từ đó có thể được sử dụng để truy xuất toàn bộ thông báo từ chính HBase.

Ví dụ bên dưới chỉ lưu trữ ID thư trong Solr nhưng lập chỉ mục trên tất cả các trường trong đối tượng email. Tìm kiếm Solr trong trường hợp này truy xuất ID email, sau đó bạn có thể sử dụng để truy vấn HBase. Kiểu thiết lập này lý tưởng cho Solr vì nó giữ cho chi phí lưu trữ thấp và tận dụng hết khả năng lập chỉ mục của Solr.

Tập lệnh shell bên dưới đưa ra một truy vấn tới Solr Rest API cho từ khóa “productId” và trả về trường “id” ở định dạng CSV. Kết quả là một danh sách các ID tài liệu phù hợp với truy vấn. Sau đó, tập lệnh lặp qua các id và chia chúng thành Id Hàng, Họ Cột và Tên Cột, được sử dụng để truy cập HBase thông qua API HBase REST tiêu chuẩn.

#!/bin/bash

#  Query SOLR and return the id field for every document
#  that contains the word resign
query_resp=$(curl -s 'http://spark:8983/solr/collection1_shard1_replica1/select?q=productId&fl=id&wt=csv')

# Loop through results of the previous command,
# and use the id to retrieve the cells from HBase via the HBase REST API
for i in  $query_resp
do
            if [ "$i" != "id" ]; then
            cmd=$(echo $i |awk -F'-' '{print "curl -s http://spark:20550/inbox/" $1 "/" $2 ":"  $3}')
            $cmd -H "Accept: application/x-protobuf "
            fi
done

Kết luận

Trong bài đăng này, bạn đã thấy việc lập chỉ mục các email được lưu trữ trong HBase dễ dàng như thế nào - trong thời gian gần thực và hoàn toàn không xâm phạm đến luồng HBase chính. Tóm lại, hãy ghi nhớ các bước chính sau:

  • Cho phép sao chép trong HBase
  • Định cấu hình đúng cách Lily HBase Indexer
  • Sử dụng Morphlines trong Lily HBase Indexer để giúp thực hiện các phép biến đổi (không cần mã hóa!)

Nếu bạn đã có cơ hội đọc bài viết trước, bạn có thể thấy rằng tệp morphlines.conf thực tế giống hệt nhau trong cả ba trường hợp. Điều này có nghĩa là rất dễ dàng phát triển các trường hợp sử dụng tìm kiếm trên hệ sinh thái Hadoop. Nếu dữ liệu đã ở trong HDFS, hãy sử dụng MapReduceIndexerTool để lập chỉ mục dữ liệu đó. Nếu dữ liệu đến qua Flume, hãy sử dụng SolrMorphlineSink với một tệp morphlines giống hệt nhau. Nếu sau đó, bạn quyết định HBase phù hợp với trường hợp sử dụng, chỉ cần một thay đổi tối thiểu để bắt đầu lập chỉ mục các ô trong HBase:Chỉ cần thêm lệnh extractHBaseCells vào tệp morphlines.

Mặc dù ví dụ này tập trung vào email như một ca sử dụng, nhưng phương pháp này có thể được áp dụng trong nhiều trường hợp khác khi HBase được sử dụng làm lớp lưu trữ và truy cập. Nếu doanh nghiệp của bạn đã sử dụng HBase cho một trường hợp sử dụng cụ thể, hãy xem xét triển khai Cloudera Search trên đầu nó. Nó không yêu cầu mã hóa và thực sự có thể mở dữ liệu cho nhiều đối tượng hơn trong tổ chức.

Jeff Shmain là kiến ​​trúc sư giải pháp tại Cloudera.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Apache Phoenix dành cho CDH

  2. Tách và hợp nhất vùng Apache HBase

  3. giết zombie chết máy chủ vùng

  4. Các phương pháp tiếp cận để sao lưu và khôi phục thảm họa trong HBase

  5. Kiến trúc Apache Hadoop - HDFS, YARN &MapReduce