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

dòng ngang

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

wget http://mirror.downloadvn.com/apache/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.7.tgz

Sau đó tiến hành khai báo SPARK_HOME và PATH

export SPARK_HOME=/home/spark/

export PATH=$PATH:$SPARK_HOME/bin/

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:

yum install R R-devel libcurl-devel openssl-devel libxml2-devel

Nếu đã khai báo PATH cho spark ta có thể khởi động trực tiếp sparkR

sparkR –packages com.datastax.spark:spark-cassandra-connector_2.11:2.4.0 –conf spark.cassandra.connection.host=127.0.0.1

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:

https://spark-packages.org/package/datastax/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

vi cassandra-installation.sh

tạo file cassandra-installation.sh có nội dung như sau:

# Add cassandra repository

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

chmod +x cassandra-installation.sh

để chạy

./cassandra-installation.sh

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:

install.packages(“plumber”)

Và import vào chương trình:

library(plumber)

Để chạy code có API từ plumber, từ Spark ta dùng lệnh:

plumber::plumb(“plumber.R”)$run(port = 5762)

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’)])

}

0 replies


Leave a Reply

Your email address will not be published.