Thingsboard và những công nghệ liên quan – R
Tích hợp Cassandra và Spark sử dụng ngôn ngữ thống kê R
Trên hệ điều hành CentOS
Giới thiệu
Tổng quan về R
R là một công cụ rất mạnh cho học máy, thống kê và phân tích dữ liệu. Nó là một ngôn ngữ lập trình.
Ngôn ngữ R là mã nguồn mở nên ai trong chúng ta cũng có thể phân tích source code để hiểu được chính xác cách R vận hành. Bất kỳ ai cũng có thể thêm tính năng và fix bug mà không cần chờ nhà phát hành ra bản vá. Đồng thời, R có thể tích hợp được với ngôn ngữ khác (C,C++).
Spark là gì?
Apache Spark là một open source cluster computing framework được phát triển sơ khởi vào năm 2009.
Thành phần trung của Spark là Spark Core: cung cấp những chức năng cơ bản nhất của Spark như lập lịch cho các tác vụ, quản lý bộ nhớ, fault recovery, tương tác với các hệ thống lưu trữ…Đặc biệt, Spark Core cung cấp API để định nghĩa RDD (Resilient Distributed DataSet) là tập hợp của các item được phân tán trên các node của cluster và có thể được xử lý song song.
Spark có thể chạy trên nhiều loại Cluster Managers như Hadoop YARN, Apache Mesos hoặc trên chính cluster manager được cung cấp bởi Spark được gọi là Standalone Scheduler.
Cassandra là gì?
Cassandra là một quản trị hệ cơ sở dữ liệu phân tán mã nguồn mở được thiết kế để xử lý một khối lượng lớn dữ liệu dàn trải trên nhiều node mà vẫn đảm bảo tính sẵn sàng cao (Highly Availability), khả năng mở rộng hay thu giảm số node linh hoạt (Elastic Scalability) và chấp nhận một số lỗi (Fault Tolerant).
Đặc điểm của Cassandra:
- Tính phân tán và không tập trung (distributed and decentralized)
- Tính mềm dẻo (elastic scalability)
- High availability
- Fault tolerance
- Column oriented key-value store
Cách cài đặt
Giả sử như tất cả các package cơ bản như jdk, wget, git đã được cài đặt
Cài đặt Spark
Download spark trên trang chủ http://spark.apache.org/downloads.html
Sau đó tiến hành khai báo SPARK_HOME và PATH
Sau đó khởi động host master và slave của spark
./$SPARK_HOME/sbin/start-master.sh
./$SPARK_HOME/sbin/start-slave.sh “MASTER_URL”
“MASTER_URL” có thể được lấy bằng các truy cập localhost:8080 (trường hợp thingsboard đang chạy WebUI ở port 8080 thì port sẽ chuyển thành 8081
Cài đặt và khởi động sparkR
Chạy commandline:
Nếu đã khai báo PATH cho spark ta có thể khởi động trực tiếp sparkR
spark-cassandra-connector là package sử dụng để kết nối cassandra với sparkR (default port của cassandra là 9042)
Danh sách các spark-cassandra-connector:
Cài đặt các gói R cần thiết
install.packages(“devtools”)
devtools::install_github(‘apache/spark@v{SPARK_VERSION}’,
subdir=’R/pkg’)
install.packages(“sparklyr”)
install.packages(“dplyr”)
spark_install(version = “2.4.0”)
Cài đặt Cassandra
Sử dụng
tạo file cassandra-installation.sh có nội dung như sau:
sudo touch /etc/yum.repos.d/datastax.repo
echo ‘[datastax]’ | sudo tee –append /etc/yum.repos.d/datastax.repo > /dev/null
echo ‘name = DataStax Repo for Apache Cassandra’ | sudo tee –append /etc/yum.repos.d/datastax.repo > /dev/null
echo ‘baseurl = http://rpm.datastax.com/community’ | sudo tee –append /etc/yum.repos.d/datastax.repo > /dev/null
echo ‘enabled = 1’ | sudo tee –append /etc/yum.repos.d/datastax.repo > /dev/null
echo ‘gpgcheck = 0’ | sudo tee –append /etc/yum.repos.d/datastax.repo > /dev/null
# Cassandra installation
sudo yum install dsc30
# Tools installation
sudo yum install cassandra30-tools
# Start Cassandra
sudo service cassandra start
# Configure the database to start automatically when OS starts.
sudo chkconfig cassandra on
Sau đó sử dụng câu lệnh
để chạy
Load data frame từ Cassandra vào R
library(sparklyr)
library(dplyr)
sc <- sparkR.session(master = “local”)
dataframe <- read.df(path = NULL, source = “org.apache.spark.sql.cassandra”, keyspace = “thingsboard”, table = “ts_kv_cf”)
r_df <- as.data.frame(dataframe[, c(‘ts’,’long_v’)])
Cassandra được load vào SparkR dưới dạng SparkData Frame, để có thể sử dụng các thao tác tính toán phân tích trên R, ta phải add SparkDataFrame thành R’s DataFrame bằng lệnh as.data.frame
Cài đặt plumber để tạo REST API
Để Spark có thể giao tiếp với bên ngoài, ta sử dụng plumber tạo REST API cho spark.
Cài đặt thư viện plumber:
Và import vào chương trình:
Để chạy code có API từ plumber, từ Spark ta dùng lệnh:
Lưu ý rằng port sử dụng không được trùng với service nào đang chạy trên hệ thống
Code mẫu plumber.R:
library(plumber)
library(sparklyr)
library(dplyr)
library(dbplyr)
library(ggplot2)
sc <- sparkR.session(master = “local”)
dataframe <- read.df(path = NULL, source = “org.apache.spark.sql.cassandra”, keyspace = “thingsboard”, table = “ts_kv_cf”)
#* @apiTitle Predict API
#* Predict next value
#* $param result
#* @get /sum
function() {
r_df <- as.data.frame(dataframe[, c(‘ts’,’long_v’)])
sum(r_df[1:20,c(‘long_v’)])
}