Cách thiết lập database đồ thị Titan với Cassandra và ElasticSearch trên Ubuntu 16.04
Titan là một database đồ thị open-souce có khả năng mở rộng cao. Database đồ thị là một loại database NoSQL nơi tất cả dữ liệu được lưu trữ dưới dạng các node và cạnh . Database đồ thị phù hợp với các ứng dụng sử dụng dữ liệu được kết nối cao, trong đó mối quan hệ giữa dữ liệu là một phần quan trọng trong chức năng của ứng dụng, giống như một trang mạng xã hội. Titan được sử dụng để lưu trữ và truy vấn dữ liệu dung lượng lớn được phân phối trên nhiều máy. Nó có thể được cấu hình để sử dụng bất kỳ phần mềm lưu trữ có sẵn nào khác nhau như Apache Cassandra, HBase và BerkeleyDB. Điều này giúp bạn dễ dàng tránh bị khóa nhà cung cấp trong tương lai nếu bạn cần thay đổi repodata .Trong hướng dẫn này, bạn sẽ cài đặt Titan 1.0. Sau đó, bạn sẽ cấu hình Titan để sử dụng Cassandra và ElasticSearch, cả hai đều được đóng gói cùng với Titan. Cassandra hoạt động như một repodata lưu trữ dữ liệu cơ bản, trong khi ElasticSearch, một công cụ tìm kiếm văn bản miễn phí, được dùng để thực hiện một số thao tác tìm kiếm phức tạp trong database . Bạn cũng cần tạo và truy vấn dữ liệu từ database bằng Gremlin.
Yêu cầu
Để hoàn thành hướng dẫn này, bạn cần :
- Một server Ubuntu 16.04 với ít nhất 2 GB RAM với user không phải root và firewall . Bạn có thể cài đặt điều này theo Cài đặt server ban đầu với Ubuntu 16.04 .
- Đã cài đặt Oracle JDK 8, bạn có thể thực hiện theo phần “Cài đặt Oracle JDK” của bài viết cài đặt Java này .
Bước 1 - Download , extract và khởi động Titan
Để download database Titan, hãy truy cập trang download của chúng . Bạn sẽ thấy hai bản phân phối Titan có sẵn để download . Đối với hướng dẫn này, ta muốn Titan 1.0.0 với Hadoop 1 . Đây là bản phát hành ổn định. Download server của bạn với wget
:
- wget http://s3.thinkaurelius.com/downloads/titan/titan-1.0.0-hadoop1.zip
Sau khi quá trình download hoàn tất, hãy extract file zip. Chương trình extract file không được cài đặt theo mặc định. Cài đặt nó trước:
- sudo apt-get install unzip
Sau đó extract Titan:
- unzip titan-1.0.0-hadoop1.zip
Điều này tạo ra một folder có tên là titan-1.0.0-hadoop
.
Hãy khởi động Titan đảm bảo mọi thứ hoạt động. Thay đổi vào folder titan-1.0.0-hadoop
và gọi tập lệnh shell để khởi động Titan.
- cd titan-1.0.0-hadoop1
- ./bin/titan.sh start
Bạn sẽ thấy một kết quả tương tự như sau:
OutputForking Cassandra... Running `nodetool statusthrift`... OK (returned exit status 0 and printed string "running"). Forking Elasticsearch... Connecting to Elasticsearch (127.0.0.1:9300)...... OK (connected to 127.0.0.1:9300). Forking Gremlin-Server... Connecting to Gremlin-Server (127.0.0.1:8182)...... OK (connected to 127.0.0.1:8182). Run gremlin.sh to connect.
Titan phụ thuộc vào một loạt các công cụ khác để hoạt động. Vì vậy, khi nào Titan được khởi động, Cassandra, ElasticSearch và Gremlin-Server cũng được khởi động cùng với nó.
Bạn có thể kiểm tra trạng thái của Titan bằng cách chạy lệnh sau.
- ./bin/titan.sh status
Bạn sẽ thấy kết quả này:
OutputGremlin-Server (org.apache.tinkerpop.gremlin.server.GremlinServer) is running with pid 7490 Cassandra (org.apache.cassandra.service.CassandraDaemon) is running with pid 7077 Elasticsearch (org.elasticsearch.bootstrap.Elasticsearch) is running with pid 7358
Trong bước tiếp theo, bạn sẽ thấy cách truy vấn biểu đồ.
Bước 2 - Truy vấn biểu đồ bằng Gremlin
Gremlin là Ngôn ngữ truyền tải đồ thị được sử dụng để truy vấn, phân tích và thao tác database Đồ thị. Bây giờ Titan đã được cài đặt và khởi động, bạn sẽ sử dụng Gremlin để tạo và truy vấn các node và cạnh từ Titan.
Để sử dụng Gremlin, hãy mở Gremlin Console bằng cách đưa ra lệnh sau.
- ./bin/gremlin.sh
Bạn sẽ thấy một phản hồi tương tự như sau:
Output \,,,/ (o o) -----oOOo-(3)-oOOo----- plugin activated: tinkerpop.server plugin activated: tinkerpop.hadoop plugin activated: tinkerpop.utilities plugin activated: aurelius.titan plugin activated: tinkerpop.tinkergraph gremlin>
Control panel Gremlin tải một số plugin để hỗ trợ các tính năng dành riêng cho Titan và Gremlin.
Đầu tiên, khởi tạo đối tượng đồ thị. Đối tượng này đại diện cho đồ thị mà ta hiện đang làm việc. Nó có một số phương pháp có thể giúp quản lý biểu đồ như thêm đỉnh, tạo nhãn và xử lý các giao dịch. Thực thi lệnh này để khởi tạo đối tượng đồ thị:
- graph = TitanFactory.open('conf/titan-cassandra-es.properties')
Bạn sẽ thấy kết quả này:
Output==>standardtitangraph[cassandrathrift:[127.0.0.1]]
Đầu ra chỉ định loại đối tượng được trả về bởi phương thức TitanFactory.open()
, là standardtitangraph
. Nó cũng biểu thị phần backend lưu trữ nào mà đồ thị sử dụng ( cassandrathrift
) và nó được kết nối với qua localhost ( 127.0.0.1
).
Phương thức open()
tạo một đồ thị Titan mới hoặc mở một đồ thị hiện có, sử dụng các tùy chọn cấu hình có trong file thuộc tính được chỉ định. Tệp cấu hình chứa các tùy chọn cấu hình cấp cao như phần backend lưu trữ sẽ sử dụng, phần backend bộ nhớ đệm và một số tùy chọn khác. Bạn có thể tạo file cấu hình tùy chỉnh và sử dụng file đó thay vì file mặc định, bạn sẽ thực hiện trong Bước 3.
Khi lệnh được thực hiện, đối tượng đồ thị được khởi tạo và được lưu trữ trong biến graph
. Để xem tất cả các thuộc tính và phương thức có sẵn cho đối tượng đồ thị, hãy nhập graph.
, theo sau là TAB
:
gremlin> graph. addVertex( assignID( buildTransaction() close() closeTransaction( commit( compute( compute() configuration() containsEdgeLabel( containsPropertyKey( containsRelationType( containsVertexLabel( edgeMultiQuery( edgeQuery( edges( features() getEdgeLabel( getOrCreateEdgeLabel( getOrCreatePropertyKey( ... ...
Trong database biểu đồ, bạn truy vấn dữ liệu chủ yếu bằng cách duyệt qua nó thay vì truy xuất các bản ghi với các phép nối và chỉ số như trong database quan hệ. Để duyệt qua một biểu đồ, ta cần một nguồn duyệt biểu đồ từ biến tham chiếu graph
. Lệnh sau đây đạt được điều này.
- g = graph.traversal()
Bạn thực hiện duyệt với biến g
này. Hãy tạo một vài đỉnh bằng cách sử dụng biến đó. Dọc giống như các hàng trong SQL. Mỗi đỉnh có một loại đỉnh hoặc label
và các thuộc tính liên quan của nó, tương tự như các trường trong SQL. Thực hiện lệnh này:
- sammy = g.addV(label, 'fish', 'name', 'Sammy', 'residence', 'The Deep Blue Sea').next()
- company = g.addV(label, 'company', 'name', 'DigitalOcean', 'website', 'www.digitalocean.com').next()
Trong ví dụ này, ta đã tạo hai đỉnh có nhãn là fish
và company
tương ứng. Ta cũng đã xác định hai thuộc tính là name
và residence
cho đỉnh đầu tiên, name
và website
cho đỉnh thứ hai. Bây giờ ta hãy truy cập các đỉnh đó bằng cách sử dụng các biến sammy
và company
.
Ví dụ, để liệt kê tất cả các thuộc tính của đỉnh đầu tiên, hãy thực hiện lệnh sau:
- g.V(sammy).properties()
Đầu ra sẽ giống như sau:
Output==>vp[name->Sammy] ==>vp[residence->The Deep Blue Sea]
Bạn cũng có thể thêm một thuộc tính mới vào đỉnh. Hãy thêm một màu:
- g.V(sammy).property('color', 'blue')
Bây giờ, hãy xác định mối quan hệ giữa hai đỉnh đó. Điều này đạt được bằng cách tạo ra một edge
giữa chúng.
- company.addEdge('hasMascot', sammy, 'status', 'high')
Điều này tạo ra lợi thế giữa sammy
và company
có nhãn hasMascot
và status
có tên tài sản với giá trị high
.
Bây giờ, ta hãy lấy linh vật của công ty:
- g.V(company).out('hasMascot')
Điều này trả về các đỉnh đi ra từ đỉnh company
và cạnh giữa chúng được gắn nhãn là hasMascot
. Ta cũng có thể làm ngược lại và đưa công ty liên kết với linh vật sammy
như thế này:
- g.V(sammy).in('hasMascot')
Đây là một vài lệnh Gremlin cơ bản để bắt đầu. Để tìm hiểu thêm, hãy xem tài liệu Apache Tinkerpop3 mô tả.
Thoát khỏi console Gremlin bằng cách nhấn CTRL+C
Bây giờ ta hãy thêm một số tùy chọn cấu hình tùy chỉnh cho Titan.
Bước 3 - Cấu hình Titan
Hãy tạo một file cấu hình mới mà bạn có thể sử dụng để xác định tất cả các tùy chọn cấu hình tùy chỉnh cho Titan.
Titan có một lớp lưu trữ có thể cắm được; thay vì tự xử lý việc lưu trữ dữ liệu, Titan sử dụng database khác để xử lý. Titan hiện cung cấp ba tùy chọn cho database lưu trữ: Cassandra, HBase và BerkeleyDB. Trong hướng dẫn này, ta sẽ sử dụng Cassandra làm công cụ lưu trữ, vì nó có khả năng mở rộng cao và có tính khả dụng cao.
Đầu tiên, tạo file cấu hình:
- nano conf/gremlin-server/custom-titan-config.properties
Thêm những dòng này để xác định phần backend lưu trữ là gì và nó khả dụng ở đâu. Phần backend lưu trữ được đặt thành cassandrathrift
cho biết rằng ta đang sử dụng Cassandra để lưu trữ với giao diện tiết kiệm cho Cassandra:
storage.backend=cassandrathrift storage.hostname=localhost
Sau đó, thêm ba dòng này để xác định chương trình backend tìm kiếm nào sẽ sử dụng. Ta sẽ sử elasticsearch
làm chương trình backend tìm kiếm.
... index.search.backend=elasticsearch index.search.hostname=localhost index.search.elasticsearch.client-only=true
Dòng thứ ba cho biết ElasticSearch là một ứng dụng client mỏng không lưu trữ dữ liệu. Đặt nó thành false
sẽ tạo ra một nút cụm ElasticSearch thông thường có thể lưu trữ dữ liệu mà ta không muốn bây giờ.
Cuối cùng, thêm dòng này để cho Server Gremlin biết loại biểu đồ mà nó sẽ phân phát.
... gremlin.graph=com.thinkaurelius.titan.core.TitanFactory
Có một số file cấu hình mẫu có sẵn trong folder conf
mà bạn có thể xem để tham khảo.
Lưu file và thoát khỏi editor .
Ta cần thêm file cấu hình mới này vào Server Gremlin. Mở file cấu hình của Server Gremlin.
- nano conf/gremlin-server/gremlin-server.yaml
Điều hướng đến phần graphs
và tìm dòng này:
.. graph: conf/gremlin-server/titan-berkeleyje-server.properties} ..
Thay thế nó bằng cái này:
.. graph: conf/gremlin-server/custom-titan-config.properties} ..
Lưu và thoát khỏi file .
Bây giờ khởi động lại Titan bằng cách dừng Titan và bắt đầu lại.
- ./bin/titan.sh stop
- ./bin/titan.sh start
Bây giờ ta đã có cấu hình tùy chỉnh, hãy cấu hình Titan để chạy như một dịch vụ.
Bước 4 - Quản lý Titan với Systemd
Ta nên đảm bảo Titan tự động khởi động mỗi khi server của ta khởi động. Nếu server của ta vô tình bị khởi động lại hoặc phải khởi động lại vì bất kỳ lý do gì, ta cũng muốn Titan khởi động lại.
Để cấu hình điều này, ta sẽ tạo một file đơn vị Systemd cho Titan để ta có thể quản lý nó.
Để bắt đầu, ta tạo một file cho ứng dụng của bạn bên trong folder /etc/systemd/system
với phần mở rộng .service
:
- sudo nano /etc/systemd/system/titan.service
Một file đơn vị được tạo thành từ các phần. Phần [Unit]
chỉ định metadata và các yếu tố phụ thuộc vào dịch vụ của ta , bao gồm mô tả về dịch vụ của ta và thời điểm bắt đầu dịch vụ của ta .
Thêm cấu hình này vào file :
[Unit] Description=The Titan database After=network.target
Ta chỉ định rằng dịch vụ sẽ bắt đầu sau khi đã đạt được mục tiêu mạng. Nói cách khác, ta chỉ bắt đầu dịch vụ này sau khi các dịch vụ mạng đã sẵn sàng.
Sau phần [Unit]
, ta xác định phần [Service]
nơi ta chỉ định cách bắt đầu dịch vụ. Thêm cái này vào file cấu hình:
[Service] User=sammy Group=www-data Type=forking Environment="PATH=/home/sammy/titan-1.0.0-hadoop1/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin" WorkingDirectory=/home/sammy/titan-1.0.0-hadoop1/ ExecStart=/home/sammy/titan-1.0.0-hadoop1/bin/titan.sh start ExecStop=/home/sammy/titan-1.0.0-hadoop1/bin/titan.sh stop
Đầu tiên ta xác định user và group mà dịch vụ đang chạy. Sau đó, ta xác định loại dịch vụ mà nó sẽ trở thành. Loại được giả định là simple
theo mặc định. Vì tập lệnh khởi động mà ta đang sử dụng để khởi động Titan bắt đầu các chương trình con khác, ta chỉ định loại dịch vụ là forking
.
Sau đó, ta chỉ định biến môi trường PATH
, folder làm việc của Titan và lệnh thực thi để khởi động Titan. Ta gán lệnh khởi động Titan cho biến ExecStart
.
Các biến ExecStop
xác định cách dừng dịch vụ.
Cuối cùng, ta thêm phần [Install]
, trông giống như sau:
[Install] WantedBy=multi-user.target
Phần Install
cho phép bạn bật và tắt dịch vụ. Chỉ thị WantedBy
tạo một folder có tên multi-user.target
bên trong folder /etc/systemd/system
. Systemd sẽ tạo một softlink của file đơn vị này ở đó. Tắt dịch vụ này sẽ xóa file này khỏi folder .
Lưu file , đóng editor và bắt đầu dịch vụ mới:
- sudo systemctl start titan
Sau đó, kích hoạt dịch vụ này để mỗi khi server khởi động, Titan sẽ bắt đầu:
- sudo systemctl enable titan
Bạn có thể kiểm tra trạng thái của Titan bằng lệnh sau:
- sudo systemctl status titan
Để tìm hiểu thêm về file đơn vị, hãy đọc hướng dẫn Hiểu Đơn vị Systemd và file Đơn vị .
Kết luận
Đến đây bạn đã cài đặt cài đặt Titan cơ bản trên server của bạn . Nếu bạn muốn có một cái nhìn sâu hơn về kiến trúc của Titan, đừng ngần ngại xem tài liệu chính thức của họ.
Đến đây bạn đã cài đặt Titan, bạn nên tìm hiểu thêm về Tinkerpop3 và Gremlin bằng cách xem tài liệu chính thức .
Các tin liên quan
Cách thiết lập database từ xa để tối ưu hóa hiệu suất trang web với MySQL trên Ubuntu 16.042017-06-05
Cách gỡ lỗi WordPress "Lỗi thiết lập kết nối database"
2017-04-21
Cách bảo mật database OrientDB của bạn trên Ubuntu 16.04
2017-03-24
Cách backup, khôi phục và di chuyển database MongoDB trên Ubuntu 14.04
2016-04-15
Cách nhập và xuất database MongoDB trên Ubuntu 14.04
2016-04-15
Cách chạy database cụm đa node với Cassandra trên Ubuntu 14.04
2016-03-31
Cách nhập và xuất database OrientDB trên Ubuntu 14.04
2016-01-06
Cách thiết lập database từ xa để tối ưu hóa hiệu suất trang web với MySQL
2014-04-17
Cách kết nối Node.js với database MongoDB trên VPS
2013-10-09
Cách thiết lập database MongoDB có thể mở rộng
2013-02-26