āļŠāļ§āļąāļŠāļāļĩāļŪāļąāļ! āļ§āļąāļāļāļĩāđāđāļĢāļēāļāļ°āļŠāļĢāđāļēāļāļĢāļ°āļāļāļāļĩāđāļāļ°āļāļĢāļ°āļĄāļ§āļĨāļāļĨāļŠāļāļĢāļĩāļĄāļāđāļāļāļ§āļēāļĄ Apache Kafka āđāļāļĒāđāļāđ Spark Streaming āđāļĨāļ°āđāļāļĩāļĒāļāļāļĨāļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāđāļāļĒāļąāļāļāļēāļāļāđāļāļĄāļđāļĨāļĢāļ°āļāļāļāļĨāļēāļ§āļāđ AWS RDS
āļĨāļāļāļāļīāļāļāļāļēāļāļēāļĢāļ§āđāļēāļŠāļāļēāļāļąāļāļŠāļīāļāđāļāļ·āđāļāļāļēāļāđāļŦāđāļāļāļģāļŦāļāļāđāļŦāđāđāļĢāļēāļĄāļĩāļŦāļāđāļēāļāļĩāđāđāļāļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāļļāļĢāļāļĢāļĢāļĄāļāļĩāđāđāļāđāļēāļĄāļē "āļāļąāļāļāļĩ" āđāļāļāļļāļāļŠāļēāļāļē āļāļķāđāļāļŠāļēāļĄāļēāļĢāļāļāļģāđāļāđāđāļāļ·āđāļāļ§āļąāļāļāļļāļāļĢāļ°āļŠāļāļāđāđāļāļāļēāļĢāļāļģāļāļ§āļāļāļģāđāļŦāļāđāļāļŠāļāļļāļĨāđāļāļīāļāđāļāļīāļāļŠāļģāļŦāļĢāļąāļāļāļĨāļąāļ āļāļĩāļāļāļģāļāļąāļ āļŦāļĢāļ·āļāļāļĨāļĨāļąāļāļāđāļāļēāļāļāļēāļĢāđāļāļīāļāļŠāļģāļŦāļĢāļąāļāļāļļāļĢāļāļĢāļĢāļĄ āļŊāļĨāļŊ āļāļąāļāļāļĩ
āļ§āļīāļāļĩāđāļāđāļāļĢāļāļĩāļāļĩāđāđāļāļĒāđāļĄāđāļāđāļāļāđāļāđāđāļ§āļāļĒāđāļĄāļāļāļĢāđāđāļĨāļ°āļāļēāļāļē - āļāđāļēāļāđāļŦāđāļĨāļ°āđāļāļĩāļĒāļ! āđāļ!

āļāļēāļĢāđāļāļ°āļāļģ
āđāļāđāļāļāļāļ§āđāļēāļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļāļĄāļđāļĨāļāļģāļāļ§āļāļĄāļēāļāđāļāļāđāļĢāļĩāļĒāļĨāđāļāļĄāđāđāļŦāđāđāļāļāļēāļŠāļĄāļēāļāļĄāļēāļĒāļŠāļģāļŦāļĢāļąāļāđāļāđāđāļāļĢāļ°āļāļāļŠāļĄāļąāļĒāđāļŦāļĄāđ āļŦāļāļķāđāļāđāļāļāļēāļĢāļāļŠāļĄāļāļŠāļēāļāļāļĩāđāđāļāđāļĢāļąāļāļāļ§āļēāļĄāļāļīāļĒāļĄāļĄāļēāļāļāļĩāđāļŠāļļāļāļŠāļģāļŦāļĢāļąāļāļŠāļīāđāļāļāļĩāđāļāļ·āļāļāļēāļĢāļāļ§āļāļāļđāđāļāļāļ Apache Kafka āđāļĨāļ° Spark Streaming āđāļāļĒāļāļĩāđ Kafka āļŠāļĢāđāļēāļāļŠāļāļĢāļĩāļĄāļāļāļāđāļāđāļāđāļāđāļāļāđāļāļāļ§āļēāļĄāļāļēāđāļāđāļē āđāļĨāļ° Spark Streaming āļāļĢāļ°āļĄāļ§āļĨāļāļĨāđāļāđāļāđāļāđāļāđāļŦāļĨāđāļēāļāļĩāđāđāļāļāđāļ§āļāđāļ§āļĨāļēāļāļĩāđāļāļģāļŦāļāļ
āđāļāļ·āđāļāđāļāļīāđāļĄāļāļ§āļēāļĄāļāļāļāļēāļāļāđāļāļāđāļāļāļīāļāļāļĨāļēāļāļāļāļāđāļāļāļāļĨāļīāđāļāļāļąāļ āđāļĢāļēāļāļ°āđāļāđāļāļļāļāļāļĢāļ§āļāļŠāļāļ āļāđāļ§āļĒāļāļĨāđāļāļāļĩāđ āđāļĄāļ·āđāļāđāļāđāļāļāļīāđāļ Spark Streaming āļāđāļāļāļāļēāļĢāļāļđāđāļāļ·āļāļāđāļāļĄāļđāļĨāļāļĩāđāļŠāļđāļāļŦāļēāļĒ āļāđāđāļāļĩāļĒāļāđāļāđāļāđāļāļāļāļĨāļąāļāđāļāļāļĩāđāļāļļāļāļāļĢāļ§āļāļŠāļāļāļŠāļļāļāļāđāļēāļĒāđāļĨāļ°āļāļģāđāļāļīāļāļāļēāļĢāļāļģāļāļ§āļāļāđāļāļāļēāļāļāļļāļāļāļąāđāļ
āļŠāļāļēāļāļąāļāļĒāļāļĢāļĢāļĄāļāļāļāļĢāļ°āļāļāļāļĩāđāļāļąāļāļāļēāđāļĨāđāļ§

āļŠāđāļ§āļāļāļĢāļ°āļāļāļāļāļĩāđāđāļāđ:
- āđāļāđāļāļĢāļ°āļāļāļŠāđāļāļāđāļāļāļ§āļēāļĄāđāļāļĒāđāļāļĢāđāđāļĨāļ°āļŠāļĄāļąāļāļĢāļŠāļĄāļēāļāļīāļāđāļāļāļāļĢāļ°āļāļēāļĒ āđāļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāđāļāđāļāđāļāļāļ§āļēāļĄāļāļąāđāļāļāļāļāđāļĨāļāđāđāļĨāļ°āļāļāļāđāļĨāļāđ āđāļāļ·āđāļāļāđāļāļāļāļąāļāļāđāļāļĄāļđāļĨāļŠāļđāļāļŦāļēāļĒ āļāđāļāļāļ§āļēāļĄ Kafka āļāļ°āļāļđāļāļāļąāļāđāļāđāļāđāļ§āđāđāļāļāļīāļŠāļāđāđāļĨāļ°āļāļģāļĨāļāļāđāļāļāļ āļēāļĒāđāļāļāļĨāļąāļŠāđāļāļāļĢāđ āļĢāļ°āļāļ Kafka āļŠāļĢāđāļēāļāļāļķāđāļāļāļēāļāļāļĢāļīāļāļēāļĢāļāļīāļāđāļāļĢāđāļāļāđ ZooKeeper;
- - āļāļāļāđāļāļĢāļ°āļāļāļ Spark āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļāļĄāļđāļĨāļŠāļāļĢāļĩāļĄāļĄāļīāđāļ āđāļĄāļāļđāļĨ Spark Streaming āļŠāļĢāđāļēāļāļāļķāđāļāđāļāļĒāđāļāđāļŠāļāļēāļāļąāļāļĒāļāļĢāļĢāļĄāđāļĄāđāļāļĢāđāļāļāļāđ āđāļāļĒāļāļĩāđāļŠāļāļĢāļĩāļĄāļāđāļāļĄāļđāļĨāļāļ°āļāļđāļāļāļĩāļāļ§āļēāļĄāļ§āđāļēāđāļāđāļāļĨāļģāļāļąāļāļāđāļāđāļāļ·āđāļāļāļāļāļāđāļāđāļāđāļāđāļāļāđāļāļĄāļđāļĨāļāļāļēāļāđāļĨāđāļ Spark Streaming āļāļģāļāđāļāļĄāļđāļĨāļāļēāļāđāļŦāļĨāđāļāļāđāļēāļāđ āđāļĨāļ°āļĢāļ§āļĄāđāļāđāļāđāļāđāļāđāļāļāļāļāļēāļāđāļĨāđāļ āđāļāđāļāđāļāļāđāļŦāļĄāđāļāļ°āļāļđāļāļŠāļĢāđāļēāļāļāļķāđāļāļāļēāļĄāļāđāļ§āļāđāļ§āļĨāļēāļāļāļāļī āđāļĄāļ·āđāļāđāļĢāļīāđāļĄāļāđāļāđāļāđāļĨāļ°āļāđāļ§āļāđāļ§āļĨāļē āļāļ°āļĄāļĩāļāļēāļĢāļŠāļĢāđāļēāļāđāļāđāļāđāļāđāļāđāļŦāļĄāđ āđāļĨāļ°āļāđāļāļĄāļđāļĨāđāļāđ āļāļĩāđāđāļāđāļĢāļąāļāļĢāļ°āļŦāļ§āđāļēāļāļāđāļ§āļāđāļ§āļĨāļēāļāļąāđāļāļāļ°āļĢāļ§āļĄāļāļĒāļđāđāđāļāđāļāđāļāđāļāđāļ āđāļĄāļ·āđāļāļŠāļīāđāļāļŠāļļāļāļāđāļ§āļāđāļ§āļĨāļē āļāļēāļĢāđāļāļīāļāđāļāļāļāļāđāļāđāļāđāļāđāļāļāļ°āļŦāļĒāļļāļāļĨāļ āļāļāļēāļāļāļāļāļāđāļ§āļāđāļ§āļĨāļēāļāļđāļāļāļģāļŦāļāļāđāļāļĒāļāļēāļĢāļēāļĄāļīāđāļāļāļĢāđāļāļĩāđāđāļĢāļĩāļĒāļāļ§āđāļēāļāđāļ§āļāđāļāļāļāđ
- - āļĢāļ§āļĄāļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāđāļāļīāļāļŠāļąāļĄāļāļąāļāļāđāđāļāđāļēāļāļąāļāļāļēāļĢāđāļāļĩāļĒāļāđāļāļĢāđāļāļĢāļĄāļāļąāļāļāđāļāļąāļ Spark āļāđāļāļĄāļđāļĨāļāļĩāđāļĄāļĩāđāļāļĢāļāļŠāļĢāđāļēāļāļŦāļĄāļēāļĒāļāļķāļāļāđāļāļĄāļđāļĨāļāļĩāđāļĄāļĩāļŠāļāļĩāļĄāļē āļāļķāđāļāļāđāļāļ·āļāļāļļāļāļāđāļāļāđāļāļĩāļĒāļ§āļŠāļģāļŦāļĢāļąāļāļĢāļ°āđāļāļĩāļĒāļāļāļąāđāļāļŦāļĄāļ Spark SQL āļĢāļāļāļĢāļąāļāļāļīāļāļāļļāļāļāļēāļāđāļŦāļĨāđāļāļāđāļāļĄāļđāļĨāļāļĩāđāļĄāļĩāđāļāļĢāļāļŠāļĢāđāļēāļāļāļĩāđāļŦāļĨāļēāļāļŦāļĨāļēāļĒ āđāļĨāļ°āļāđāļ§āļĒāļāļ§āļēāļĄāļāļĢāđāļāļĄāđāļāđāļāļēāļāļāļāļāļāđāļāļĄāļđāļĨāļŠāļāļĩāļĄāļē āļāļģāđāļŦāđāļŠāļēāļĄāļēāļĢāļāļāļķāļāļāđāļāļĄāļđāļĨāđāļāļāļēāļ°āļāļīāļĨāļāđāļāļąāļāļāļķāļāļāļĩāđāļāļģāđāļāđāļāđāļāđāļāļĒāđāļēāļāļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ āđāļĨāļ°āļĒāļąāļāļĄāļĩ DataFrame API āļāļĩāļāļāđāļ§āļĒ
- āđāļāđāļāļāļēāļāļāđāļāļĄāļđāļĨāđāļāļīāļāļŠāļąāļĄāļāļąāļāļāđāļāļāļāļĨāļēāļ§āļāđāļāļĩāđāļĄāļĩāļĢāļēāļāļēāđāļĄāđāđāļāļāļāļąāļ āļāļķāđāļāđāļāđāļāļāļĢāļīāļāļēāļĢāļāļāđāļ§āđāļāļāļĩāđāļāļģāđāļŦāđāļāļēāļĢāļāļąāđāļāļāđāļē āļāļēāļĢāļāļģāđāļāļīāļāļāļēāļĢ āđāļĨāļ°āļāļēāļĢāļāļĢāļąāļāļāļāļēāļāļāđāļēāļĒāļāļķāđāļ āđāļĨāļ°āļāļĢāļīāļŦāļēāļĢāļāļąāļāļāļēāļĢāđāļāļĒ Amazon āđāļāļĒāļāļĢāļ
āļāļēāļĢāļāļīāļāļāļąāđāļāđāļĨāļ°āđāļāđāļāļēāļāđāļāļīāļĢāđāļāđāļ§āļāļĢāđ Kafka
āļāđāļāļāļāļĩāđāļāļ°āđāļāđ Kafka āđāļāļĒāļāļĢāļ āļāļļāļāļāđāļāļāļāļĢāļ§āļāļŠāļāļāđāļŦāđāđāļāđāđāļāļ§āđāļēāļāļļāļāļĄāļĩ Java āđāļāļĢāļēāļ°... JVM āđāļāđāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāļģāļāļēāļ:
sudo apt-get update
sudo apt-get install default-jre
java -version
āļĄāļēāļŠāļĢāđāļēāļāļāļđāđāđāļāđāđāļŦāļĄāđāđāļāļ·āđāļāļāļģāļāļēāļāļāļąāļ Kafka:
sudo useradd kafka -m
sudo passwd kafka
sudo adduser kafka sudo
āļāļēāļāļāļąāđāļāļāļēāļ§āļāđāđāļŦāļĨāļāļāļēāļĢāđāļāļāļāđāļēāļĒāļāļēāļāđāļ§āđāļāđāļāļāđ Apache Kafka āļāļĒāđāļēāļāđāļāđāļāļāļēāļāļāļēāļĢ:
wget -P /YOUR_PATH "http://apache-mirror.rbc.ru/pub/apache/kafka/2.2.0/kafka_2.12-2.2.0.tgz"āļāļĨāļēāļĒāđāļāļĨāđāđāļāđāļāļāļēāļ§āļĢāļāļĩāđāļāļēāļ§āļāđāđāļŦāļĨāļ:
tar -xvzf /YOUR_PATH/kafka_2.12-2.2.0.tgz
ln -s /YOUR_PATH/kafka_2.12-2.2.0 kafka
āļāļąāđāļāļāļāļāļāđāļāđāļāđāļāđāļāļāļēāļāđāļĨāļ·āļāļ āļāļ§āļēāļĄāļāļĢāļīāļāļāđāļāļ·āļāļāļēāļĢāļāļąāđāļāļāđāļēāđāļĢāļīāđāļĄāļāđāļāđāļĄāđāļāļāļļāļāļēāļāđāļŦāđāļāļļāļāđāļāđāļāļļāļāļŠāļĄāļāļąāļāļīāļāļąāđāļāļŦāļĄāļāļāļāļ Apache Kafka āđāļāđāļāļĒāđāļēāļāđāļāđāļĄāļāļĩāđ āđāļāđāļ āļĨāļāļŦāļąāļ§āļāđāļ āļŦāļĄāļ§āļāļŦāļĄāļđāđ āļāļĨāļļāđāļĄāļāļĩāđāļŠāļēāļĄāļēāļĢāļāđāļāļĒāđāļāļĢāđāļāđāļāļāļ§āļēāļĄāđāļāđ āļŦāļēāļāļāđāļāļāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļ āđāļŦāđāđāļāđāđāļāđāļāļĨāđāļāļēāļĢāļāļģāļŦāļāļāļāđāļē:
vim ~/kafka/config/server.propertiesāđāļāļīāđāļĄāļŠāļīāđāļāļāđāļāđāļāļāļĩāđāļāļĩāđāļŠāđāļ§āļāļāđāļēāļĒāļāļāļāđāļāļĨāđ:
delete.topic.enable = trueāļāđāļāļāļāļĩāđāļāļ°āđāļĢāļīāđāļĄāđāļāļīāļĢāđāļāđāļ§āļāļĢāđ Kafka āļāļļāļāļāđāļāļāđāļĢāļīāđāļĄāđāļāļīāļĢāđāļāđāļ§āļāļĢāđ ZooKeeper āđāļĢāļēāļāļ°āđāļāđāļŠāļāļĢāļīāļāļāđāđāļŠāļĢāļīāļĄāļāļĩāđāļĄāļēāļāļĢāđāļāļĄāļāļąāļāļāļēāļĢāļāļĢāļ°āļāļēāļĒ Kafka:
Cd ~/kafka
bin/zookeeper-server-start.sh config/zookeeper.properties
āļŦāļĨāļąāļāļāļēāļāļāļĩāđ ZooKeeper āđāļĢāļīāđāļĄāļāđāļāđāļāđāļŠāļģāđāļĢāđāļ āđāļŦāđāđāļāļīāļāđāļāļīāļĢāđāļāđāļ§āļāļĢāđ Kafka āđāļāđāļāļāļĢāđāļĄāļīāļāļąāļĨāļāļ·āđāļ:
bin/kafka-server-start.sh config/server.propertiesāļĄāļēāļŠāļĢāđāļēāļāļŦāļąāļ§āļāđāļāđāļŦāļĄāđāļāļĩāđāđāļĢāļĩāļĒāļāļ§āđāļē Transaction:
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic transactionāļāļĢāļ§āļāļŠāļāļāđāļŦāđāđāļāđāđāļāļ§āđāļēāđāļāđāļŠāļĢāđāļēāļāļŦāļąāļ§āļāđāļāļāļĩāđāļĄāļĩāļāļēāļĢāđāļāļīāļāļąāļāđāļĨāļ°āļāļēāļĢāļāļģāļĨāļāļāļāļēāļĄāļāļģāļāļ§āļāļāļĩāđāļāđāļāļāļāļēāļĢāđāļĨāđāļ§:
bin/kafka-topics.sh --describe --zookeeper localhost:2181 
āļāļĨāļēāļāļāđāļ§āļāđāļ§āļĨāļēāđāļŦāđāļāļāļēāļĢāļāļāļŠāļāļāļāļđāđāļāļĨāļīāļāđāļĨāļ°āļāļđāđāļāļĢāļīāđāļ āļāļŠāļģāļŦāļĢāļąāļāļŦāļąāļ§āļāđāļāļāļĩāđāļŠāļĢāđāļēāļāļāļķāđāļāđāļŦāļĄāđ āļĢāļēāļĒāļĨāļ°āđāļāļĩāļĒāļāđāļāļīāđāļĄāđāļāļīāļĄāđāļāļĩāđāļĒāļ§āļāļąāļāļ§āļīāļāļĩāļāļāļŠāļāļāļāļēāļĢāļŠāđāļāđāļĨāļ°āļĢāļąāļāļāđāļāļāļ§āļēāļĄāļĢāļ°āļāļļāđāļ§āđāđāļāđāļāļāļŠāļēāļĢāļāļĒāđāļēāļāđāļāđāļāļāļēāļāļāļēāļĢ - . āđāļĢāļēāļĄāļēāļāđāļāļāļąāļāļāļĩāđāļāļēāļĢāđāļāļĩāļĒāļāđāļāļĢāļāļīāļ§āđāļāļāļĢāđāđāļ Python āđāļāļĒāđāļāđ KafkaProducer API
āļāļēāļĢāđāļāļĩāļĒāļāļāļāļāļāļđāđāļāļĨāļīāļ
āļāļđāđāļāļĨāļīāļāļāļ°āļŠāļĢāđāļēāļāļāđāļāļĄāļđāļĨāđāļāļāļŠāļļāđāļĄ - 100 āļāđāļāļāļ§āļēāļĄāļāļļāļāļ§āļīāļāļēāļāļĩ āđāļāļĒāļāļēāļĢāļŠāļļāđāļĄāļāđāļāļĄāļđāļĨāđāļĢāļēāļŦāļĄāļēāļĒāļāļķāļāļāļāļāļēāļāļļāļāļĢāļĄāļāļĩāđāļāļĢāļ°āļāļāļāļāđāļ§āļĒāļŠāļēāļĄāļāđāļāļ:
- āļŠāļēāļāļē â āļāļ·āđāļāļāļļāļāļāļēāļĒāļāļāļāļŠāļāļēāļāļąāļāļŠāļīāļāđāļāļ·āđāļ
- āđāļāļīāļāļāļĢāļē â āļŠāļāļļāļĨāđāļāļīāļāļāļāļāļāļēāļĢāļāļģāļāļļāļĢāļāļĢāļĢāļĄ
- āļĢāļēāļāļē â āļāļģāļāļ§āļāļāļļāļĢāļāļĢāļĢāļĄ āļāļģāļāļ§āļāđāļāļīāļāļāļ°āđāļāđāļāļāļģāļāļ§āļāļāļ§āļāļŦāļēāļāđāļāđāļāļāļēāļĢāļāļ·āđāļāļŠāļāļļāļĨāđāļāļīāļāđāļāļĒāļāļāļēāļāļēāļĢ āđāļĨāļ°āđāļāđāļāļāļģāļāļ§āļāļĨāļāļŦāļēāļāđāļāđāļāļāļēāļĢāļāļēāļĒ
āļĢāļŦāļąāļŠāļŠāļģāļŦāļĢāļąāļāļāļđāđāļāļĨāļīāļāļĄāļĩāļĨāļąāļāļĐāļāļ°āļāļąāļāļāļĩāđ:
from numpy.random import choice, randint
def get_random_value():
new_dict = {}
branch_list = ['Kazan', 'SPB', 'Novosibirsk', 'Surgut']
currency_list = ['RUB', 'USD', 'EUR', 'GBP']
new_dict['branch'] = choice(branch_list)
new_dict['currency'] = choice(currency_list)
new_dict['amount'] = randint(-100, 100)
return new_dict
āļāđāļāđāļāđāļāļĒāđāļāđāļ§āļīāļāļĩāļāļēāļĢāļŠāđāļ āđāļĢāļēāļāļ°āļŠāđāļāļāđāļāļāļ§āļēāļĄāđāļāļĒāļąāļāđāļāļīāļĢāđāļāđāļ§āļāļĢāđāđāļāļĒāļąāļāļŦāļąāļ§āļāđāļāļāļĩāđāđāļĢāļēāļāđāļāļāļāļēāļĢ āđāļāļĢāļđāļāđāļāļ JSON:
from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers=['localhost:9092'],
value_serializer=lambda x:dumps(x).encode('utf-8'),
compression_type='gzip')
my_topic = 'transaction'
data = get_random_value()
try:
future = producer.send(topic = my_topic, value = data)
record_metadata = future.get(timeout=10)
print('--> The message has been sent to a topic:
{}, partition: {}, offset: {}'
.format(record_metadata.topic,
record_metadata.partition,
record_metadata.offset ))
except Exception as e:
print('--> It seems an Error occurred: {}'.format(e))
finally:
producer.flush()
āđāļĄāļ·āđāļāļĢāļąāļāļŠāļāļĢāļīāļāļāđ āđāļĢāļēāđāļāđāļĢāļąāļāļāđāļāļāļ§āļēāļĄāļāđāļāđāļāļāļĩāđāđāļāđāļāļāļĢāđāļĄāļīāļāļąāļĨ:

āļāļķāđāļāļŦāļĄāļēāļĒāļāļ§āļēāļĄāļ§āđāļēāļāļļāļāļāļĒāđāļēāļāļāļģāļāļēāļāđāļāđāļāļēāļĄāļāļĩāđāđāļĢāļēāļāđāļāļāļāļēāļĢ - āļāļđāđāļāļĨāļīāļāļŠāļĢāđāļēāļāđāļĨāļ°āļŠāđāļāļāđāļāļāļ§āļēāļĄāđāļāļĒāļąāļāļŦāļąāļ§āļāđāļāļāļĩāđāđāļĢāļēāļāđāļāļāļāļēāļĢ
āļāļąāđāļāļāļāļāļāđāļāđāļāļāļ·āļāļāļēāļĢāļāļīāļāļāļąāđāļ Spark āđāļĨāļ°āļāļĢāļ°āļĄāļ§āļĨāļāļĨāļŠāļāļĢāļĩāļĄāļāđāļāļāļ§āļēāļĄāļāļĩāđ
āļāļēāļĢāļāļīāļāļāļąāđāļ Apache Spark
Apache Spark āđāļāđāļāđāļāļĨāļāļāļāļĢāđāļĄāļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāļĨāļąāļŠāđāļāļāļĢāđāļāļĩāđāđāļāđāļāļŠāļēāļāļĨāđāļĨāļ°āļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļŠāļđāļ
Spark āļāļģāļāļēāļāđāļāđāļāļĩāļāļ§āđāļēāļāļēāļĢāđāļāđāļāļēāļāđāļĄāđāļāļĨ MapReduce āļĒāļāļāļāļīāļĒāļĄ āđāļāļāļāļ°āļāļĩāđāļĢāļāļāļĢāļąāļāļāļĢāļ°āđāļ āļāļāļēāļĢāļāļģāļāļ§āļāļāļĩāđāļŦāļĨāļēāļāļŦāļĨāļēāļĒ āļĢāļ§āļĄāļāļķāļāļāļēāļĢāļŠāļ·āļāļāđāļāđāļāļīāļāđāļāđāļāļāļāđāļĨāļ°āļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļŠāļāļĢāļĩāļĄ āļāļ§āļēāļĄāđāļĢāđāļ§āļĄāļĩāļāļāļāļēāļāļŠāļģāļāļąāļāđāļāļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļāļĄāļđāļĨāļāļģāļāļ§āļāļĄāļēāļ āđāļāļ·āđāļāļāļāļēāļāđāļāđāļāļāļ§āļēāļĄāđāļĢāđāļ§āļāļĩāđāļāđāļ§āļĒāđāļŦāđāļāļļāļāļāļģāļāļēāļāđāļāļāđāļāđāļāļāļāđāļāđāđāļāļĒāđāļĄāđāļāđāļāļāđāļŠāļĩāļĒāđāļ§āļĨāļēāļĢāļāđāļāđāļāļāļēāļāļĩāļŦāļĢāļ·āļāđāļāđāļāļāļąāđāļ§āđāļĄāļ āļāļļāļāđāļāđāļāļāļĩāđāđāļŦāļāđāļāļĩāđāļŠāļļāļāļāļĢāļ°āļāļēāļĢāļŦāļāļķāđāļāļāļāļ Spark āļāļĩāđāļāļģāđāļŦāđāļĄāļąāļāđāļĢāđāļ§āļĄāļēāļāļāļ·āļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāđāļāļāļēāļĢāļāļģāļāļ§āļāđāļāļŦāļāđāļ§āļĒāļāļ§āļēāļĄāļāļģ
āđāļāļĢāļĄāđāļ§āļīāļĢāđāļāļāļĩāđāđāļāļĩāļĒāļāļāđāļ§āļĒāļ āļēāļĐāļē Scala āļāļąāļāļāļąāđāļāļāļļāļāļāđāļāļāļāļīāļāļāļąāđāļāļāđāļāļ:
sudo apt-get install scalaāļāļēāļ§āļāđāđāļŦāļĨāļāļāļēāļĢāđāļāļāļāđāļēāļĒ Spark āļāļēāļāđāļ§āđāļāđāļāļāđāļāļĒāđāļēāļāđāļāđāļāļāļēāļāļāļēāļĢ:
wget "http://mirror.linux-ia64.org/apache/spark/spark-2.4.2/spark-2.4.2-bin-hadoop2.7.tgz"āđāļāļ°āđāļāļĨāđāđāļāđāļāļāļēāļ§āļĢ:
sudo tar xvf spark-2.4.2/spark-2.4.2-bin-hadoop2.7.tgz -C /usr/local/sparkāđāļāļīāđāļĄāđāļŠāđāļāļāļēāļāđāļāļĒāļąāļ Spark āđāļāļĒāļąāļāđāļāļĨāđ bash:
vim ~/.bashrcāđāļāļīāđāļĄāļāļĢāļĢāļāļąāļāļāđāļāđāļāļāļĩāđāļāđāļēāļāļāļąāļ§āđāļāđāđāļ:
SPARK_HOME=/usr/local/spark
export PATH=$SPARK_HOME/bin:$PATH
āļĢāļąāļāļāļģāļŠāļąāđāļāļāđāļēāļāļĨāđāļēāļāļŦāļĨāļąāļāļāļēāļāļāļģāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļ bashrc:
source ~/.bashrcāļāļēāļĢāļāļĢāļąāļāđāļāđ AWS PostgreSQL
āļŠāļīāđāļāļāļĩāđāđāļŦāļĨāļ·āļāļāļĒāļđāđāļāļ·āļāļāļēāļĢāļāļĢāļąāļāđāļāđāļāļēāļāļāđāļāļĄāļđāļĨāļāļķāđāļāđāļĢāļēāļāļ°āļāļąāļāđāļŦāļĨāļāļāđāļāļĄāļđāļĨāļāļĩāđāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāļēāļāļŠāļāļĢāļĩāļĄ āļŠāļģāļŦāļĢāļąāļāļŠāļīāđāļāļāļĩāđ āđāļĢāļēāļāļ°āđāļāđāļāļĢāļīāļāļēāļĢ AWS RDS
āđāļāļāļĩāđāļāļāļāđāļāļĨ AWS -> AWS RDS -> āļāļēāļāļāđāļāļĄāļđāļĨ -> āļŠāļĢāđāļēāļāļāļēāļāļāđāļāļĄāļđāļĨ:

āđāļĨāļ·āļāļ PostgreSQL āđāļĨāđāļ§āļāļĨāļīāļāļāļąāļāđāļ:

āđāļāļĢāļēāļ° āļāļąāļ§āļāļĒāđāļēāļāļāļĩāđāļĄāļĩāļ§āļąāļāļāļļāļāļĢāļ°āļŠāļāļāđāđāļāļ·āđāļāļāļēāļĢāļĻāļķāļāļĐāļēāđāļāđāļēāļāļąāđāļ āđāļĢāļēāļāļ°āđāļāđāđāļāļīāļĢāđāļāđāļ§āļāļĢāđāļāļĢāļĩ "āļāļąāđāļāļāđāļģ" (Free Tier):

āļāđāļāđāļ āđāļĢāļēāļāļģāđāļāļĢāļ·āđāļāļāļŦāļĄāļēāļĒāđāļāļāļĨāđāļāļ Free Tier āđāļĨāļ°āļŦāļĨāļąāļāļāļēāļāļāļąāđāļāđāļĢāļēāļāļ°āđāļāđāļĢāļąāļāļāļīāļāļŠāđāļāļāļāđāļāļāļāļāļĨāļēāļŠ t2.micro āđāļāļĒāļāļąāļāđāļāļĄāļąāļāļī - āđāļĄāđāļ§āđāļēāļāļ°āļāđāļāļāđāļ āđāļāđāļāđāļāļĢāļĩāđāļĨāļ°āļāđāļāļāļāđāļēāļāđāļŦāļĄāļēāļ°āļŠāļĄāļāļąāļāļāļēāļāļāļāļāđāļĢāļē:

āļāļąāļāļĄāļēāļāļ·āļāļŠāļīāđāļāļāļĩāđāļŠāļģāļāļąāļāļĄāļēāļ: āļāļ·āđāļāļāļāļāļāļīāļāļŠāđāļāļāļāđāļāļēāļāļāđāļāļĄāļđāļĨ āļāļ·āđāļāļāļđāđāđāļāđāļŦāļĨāļąāļ āđāļĨāļ°āļĢāļŦāļąāļŠāļāđāļēāļāļāļāļāđāļāļē āļāļąāđāļāļāļ·āđāļāļāļīāļāļŠāđāļāļāļāđ: myHabrTest āļāļđāđāđāļāđāļŦāļĨāļąāļ: āđāļŪāļ, āļĢāļŦāļąāļŠāļāđāļēāļ: āļŪāļēāđāļāļāļĢāđ12345 āđāļĨāļ°āļāļĨāļīāļāļāļĩāđāļāļļāđāļĄāļāļąāļāđāļ:

āđāļāļŦāļāđāļēāļāļąāļāđāļ āļĄāļĩāļāļēāļĢāļēāļĄāļīāđāļāļāļĢāđāļāļĩāđāļĢāļąāļāļāļīāļāļāļāļāđāļāļāļēāļĢāđāļāđāļēāļāļķāļāđāļāļīāļĢāđāļāđāļ§āļāļĢāđāļāļēāļāļāđāļāļĄāļđāļĨāļāļāļāđāļĢāļēāļāļēāļāļ āļēāļĒāļāļāļ (āļāļēāļĢāđāļāđāļēāļāļķāļāđāļāļāļŠāļēāļāļēāļĢāļāļ°) āđāļĨāļ°āļāļ§āļēāļĄāļāļĢāđāļāļĄāđāļāđāļāļēāļāļāļāļāļāļāļĢāđāļ:

āļĄāļēāļŠāļĢāđāļēāļāļāļēāļĢāļāļąāđāļāļāđāļēāđāļŦāļĄāđāļŠāļģāļŦāļĢāļąāļāļāļĨāļļāđāļĄāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒ VPC āļāļķāđāļāļāļ°āļāļāļļāļāļēāļāđāļŦāđāļ āļēāļĒāļāļāļāđāļāđāļēāļāļķāļāđāļāļīāļĢāđāļāđāļ§āļāļĢāđāļāļēāļāļāđāļāļĄāļđāļĨāļāļāļāđāļĢāļēāļāđāļēāļāļāļāļĢāđāļ 5432 (PostgreSQL)
āđāļāļāļĩāđāļāļāļāđāļāļĨ AWS āđāļāļŦāļāđāļēāļāđāļēāļāđāļāļĢāļēāļ§āđāđāļāļāļĢāđāđāļĒāļāļāđāļēāļāļŦāļēāļāđāļāļāļĩāđ VPC Dashboard -> āļāļĨāļļāđāļĄāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒ -> āļŠāļĢāđāļēāļāļāļĨāļļāđāļĄāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒ:

āđāļĢāļēāļāļąāđāļāļāļ·āđāļāđāļŦāđāļāļąāļāļāļĨāļļāđāļĄāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒ - PostgreSQL āļāļķāđāļāđāļāđāļāļāļģāļāļāļīāļāļēāļĒāļĢāļ°āļāļļāļ§āđāļē VPC āđāļāļāļĩāđāļāļĨāļļāđāļĄāļāļĩāđāļāļ§āļĢāđāļāļ·āđāļāļĄāđāļĒāļāļāļąāļāđāļĨāļ°āļāļĨāļīāļāļāļļāđāļĄāļŠāļĢāđāļēāļ:

āļāļĢāļāļāļāļāļāļēāđāļāđāļēāļŠāļģāļŦāļĢāļąāļāļāļāļĢāđāļ 5432 āļŠāļģāļŦāļĢāļąāļāļāļĨāļļāđāļĄāļāļĩāđāļŠāļĢāđāļēāļāļāļķāđāļāđāļŦāļĄāđ āļāļąāļāļ āļēāļāļāđāļēāļāļĨāđāļēāļ āļāļļāļāđāļĄāđāļŠāļēāļĄāļēāļĢāļāļĢāļ°āļāļļāļāļāļĢāđāļāļāđāļ§āļĒāļāļāđāļāļāđāļāđ āđāļāđāđāļĨāļ·āļāļ PostgreSQL āļāļēāļāļĢāļēāļĒāļāļēāļĢāđāļāļāđāļĨāļ·āđāļāļāļĨāļāļāļĢāļ°āđāļ āļ
āļāļđāļāļāļĒāđāļēāļāđāļāļĢāđāļāļāļĢāļąāļ āļāđāļē ::/0 āļŦāļĄāļēāļĒāļāļķāļāļāļ§āļēāļĄāļāļĢāđāļāļĄāđāļāđāļāļēāļāļāļāļāļāļēāļĢāļĢāļąāļāļŠāđāļāļāđāļāļĄāļđāļĨāļāļēāđāļāđāļēāđāļāļĒāļąāļāđāļāļīāļĢāđāļāđāļ§āļāļĢāđāļāļēāļāļāļąāđāļ§āļāļļāļāļĄāļļāļĄāđāļĨāļ āļāļķāđāļāļāļēāļĄāļŦāļĨāļąāļāļāļąāļāļāļąāļāļīāļāļąāđāļāđāļĄāđāđāļāđāļāļāļ§āļēāļĄāļāļĢāļīāļāļāļąāđāļāļŦāļĄāļ āđāļāđāđāļāļ·āđāļāļ§āļīāđāļāļĢāļēāļ°āļŦāđāļāļąāļ§āļāļĒāđāļēāļ āđāļŦāđāđāļĢāļēāļāļāļļāļāļēāļāđāļŦāđāđāļĢāļēāđāļāđāđāļāļ§āļāļēāļāļāļĩāđ:

āđāļĢāļēāļāļĨāļąāļāđāļāļāļĩāđāļŦāļāđāļēāđāļāļĢāļēāļ§āđāđāļāļāļĢāđ āđāļāļĒāļāļĩāđāđāļĢāļēāđāļāļīāļ âāļāļģāļŦāļāļāļāļēāļĢāļāļąāđāļāļāđāļēāļāļąāđāļāļŠāļđāļâ āđāļ§āđ āđāļĨāļ°āđāļĨāļ·āļāļāđāļāļŠāđāļ§āļāļāļĨāļļāđāļĄāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒ VPC -> āđāļĨāļ·āļāļāļāļĨāļļāđāļĄāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒ VPC āļāļĩāđāļĄāļĩāļāļĒāļđāđ -> PostgreSQL:

āļāļąāļāđāļāđāļāļāļąāļ§āđāļĨāļ·āļāļāļāļēāļāļāđāļāļĄāļđāļĨ -> āļāļ·āđāļāļāļēāļāļāđāļāļĄāļđāļĨ -> āļāļąāđāļāļāļ·āđāļ - āļŪāļēāđāļāļāļĢāđāļāļĩāļāļĩ.
āđāļĢāļēāļŠāļēāļĄāļēāļĢāļāļāļāļāļēāļĢāļēāļĄāļīāđāļāļāļĢāđāļāļĩāđāđāļŦāļĨāļ·āļāđāļ§āđāđāļāđ āļĒāļāđāļ§āđāļāļāļēāļĢāļāļīāļāđāļāđāļāļēāļāļāļēāļĢāļŠāļģāļĢāļāļāļāđāļāļĄāļđāļĨ (āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāđāļāļāđāļāļĄāļđāļĨāļŠāļģāļĢāļāļ - 0 āļ§āļąāļ) āļāļēāļĢāļāļĢāļ§āļāļŠāļāļ āđāļĨāļ°āļāđāļāļĄāļđāļĨāđāļāļīāļāļĨāļķāļāļāđāļēāļāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ āļāļēāļĄāļāđāļēāđāļĢāļīāđāļĄāļāđāļ āļāļĨāļīāļāļāļĩāđāļāļļāđāļĄ āļŠāļĢāđāļēāļāļāļēāļāļāđāļāļĄāļđāļĨ:

āļāļąāļ§āļāļąāļāļāļēāļĢāđāļāļĢāļ
āļāļąāđāļāļāļāļāļŠāļļāļāļāđāļēāļĒāļāļ·āļāļāļēāļĢāļāļąāļāļāļēāļāļēāļ Spark āļāļķāđāļāļāļ°āļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļāļĄāļđāļĨāđāļŦāļĄāđāļāļĩāđāļĄāļēāļāļēāļ Kafka āļāļļāļ āđ āļŠāļāļāļ§āļīāļāļēāļāļĩ āđāļĨāļ°āļāđāļāļāļāļĨāļĨāļąāļāļāđāļĨāļāđāļāļāļēāļāļāđāļāļĄāļđāļĨ
āļāļēāļĄāļāļĩāđāļĢāļ°āļāļļāđāļ§āđāļāđāļēāļāļāđāļ āļāļļāļāļāļĢāļ§āļāļŠāļāļāđāļāđāļāļāļĨāđāļāļŦāļĨāļąāļāđāļ SparkStreaming āļāļĩāđāļāđāļāļāļāļģāļŦāļāļāļāđāļēāđāļāļ·āđāļāđāļŦāđāđāļāđāđāļāļ§āđāļēāļāļāļāļēāļāļāđāļāļāđāļāļāļīāļāļāļĨāļēāļ āđāļĢāļēāļāļ°āđāļāđāļāļļāļāļāļĢāļ§āļāļŠāļāļ āđāļĨāļ°āļŦāļēāļāļāļąāđāļāļāļāļāļĨāđāļĄāđāļŦāļĨāļ§ āđāļĄāļāļđāļĨ Spark Streaming āļāļ°āļāđāļāļāļāļĨāļąāļāđāļāļĒāļąāļāļāļļāļāļāļĢāļ§āļāļŠāļāļāļŠāļļāļāļāđāļēāļĒāđāļĨāļ°āļāļģāđāļāļīāļāļāļēāļĢāļāļģāļāļ§āļāļāđāļāļāļēāļāļāļąāđāļāđāļāļ·āđāļāļāļđāđāļāļ·āļāļāđāļāļĄāļđāļĨāļāļĩāđāļŠāļđāļāļŦāļēāļĒ
āļāļļāļāļāļĢāļ§āļāļŠāļāļāļŠāļēāļĄāļēāļĢāļāđāļāļīāļāđāļāđāļāļēāļāđāļāđāđāļāļĒāļāļēāļĢāļāļąāđāļāļāđāļēāđāļāđāļĢāđāļāļāļāļĢāļĩāļāļāļĢāļ°āļāļāđāļāļĨāđāļāļĩāđāļāļāļāļēāļāļāđāļāļāđāļāļāļīāļāļāļĨāļēāļāđāļĨāļ°āđāļāļ·āđāļāļāļ·āļāđāļāđ (āđāļāđāļ HDFS, S3 āļŊāļĨāļŊ) āļāļķāđāļāļāđāļāļĄāļđāļĨāļāļļāļāļāļĢāļ§āļāļŠāļāļāļāļ°āļāļđāļāđāļāđāļāđāļ§āđ āļāļģāđāļāđāđāļāļĒāđāļāđāļāļąāļ§āļāļĒāđāļēāļāđāļāđāļ:
streamingContext.checkpoint(checkpointDirectory)āđāļāļāļąāļ§āļāļĒāđāļēāļāļāļāļāđāļĢāļē āđāļĢāļēāļāļ°āđāļāđāļ§āļīāļāļĩāļāļēāļĢāļāđāļāđāļāļāļĩāđ āļāļĨāđāļēāļ§āļāļ·āļ āļŦāļēāļāļĄāļĩ checkpointDirectory āļāļĒāļđāđāđāļĨāđāļ§ āļāļĢāļīāļāļāļāļ°āļāļđāļāļŠāļĢāđāļēāļāļāļķāđāļāđāļŦāļĄāđāļāļēāļāļāđāļāļĄāļđāļĨāļāļļāļāļāļĢāļ§āļāļŠāļāļ āļŦāļēāļāđāļĄāđāļĄāļĩāđāļāđāļĢāđāļāļāļāļĢāļĩ (āđāļāđāļ āļāļģāđāļāļīāļāļāļēāļĢāđāļāđāļāļāļĢāļąāđāļāđāļĢāļ) āļāļąāļāļāļąāđāļ functionToCreateContext āļāļ°āļāļđāļāđāļĢāļĩāļĒāļāđāļāļ·āđāļāļŠāļĢāđāļēāļāļāļĢāļīāļāļāđāļŦāļĄāđāđāļĨāļ°āļāļģāļŦāļāļāļāđāļē DStreams:
from pyspark.streaming import StreamingContext
context = StreamingContext.getOrCreate(checkpointDirectory, functionToCreateContext)
āđāļĢāļēāļŠāļĢāđāļēāļāļāļāļāđāļāđāļāļāđ DirectStream āđāļāļ·āđāļāđāļāļ·āđāļāļĄāļāđāļāļāļąāļāļŦāļąāļ§āļāđāļ âāļāļļāļĢāļāļĢāļĢāļĄâ āđāļāļĒāđāļāđāļ§āļīāļāļĩ createDirectStream āļāļāļāđāļĨāļāļĢāļēāļĢāļĩ KafkaUtils:
from pyspark.streaming.kafka import KafkaUtils
sc = SparkContext(conf=conf)
ssc = StreamingContext(sc, 2)
broker_list = 'localhost:9092'
topic = 'transaction'
directKafkaStream = KafkaUtils.createDirectStream(ssc,
[topic],
{"metadata.broker.list": broker_list})
āđāļĒāļāļ§āļīāđāļāļĢāļēāļ°āļŦāđāļāđāļāļĄāļđāļĨāļāļĩāđāđāļāđāļēāļĄāļēāđāļāļĢāļđāļāđāļāļ JSON:
rowRdd = rdd.map(lambda w: Row(branch=w['branch'],
currency=w['currency'],
amount=w['amount']))
testDataFrame = spark.createDataFrame(rowRdd)
testDataFrame.createOrReplaceTempView("treasury_stream")
āđāļĄāļ·āđāļāđāļāđ Spark SQL āđāļĢāļēāļāļ°āļāļąāļāļāļĨāļļāđāļĄāļāļĒāđāļēāļāļāđāļēāļĒāđāļĨāļ°āđāļŠāļāļāļāļĨāļĨāļąāļāļāđāđāļāļāļāļāđāļāļĨ:
select
from_unixtime(unix_timestamp()) as curr_time,
t.branch as branch_name,
t.currency as currency_code,
sum(amount) as batch_value
from treasury_stream t
group by
t.branch,
t.currency
āļĢāļąāļāļāđāļāļāļ§āļēāļĄāļāđāļāļŦāļēāđāļĨāļ°āđāļĢāļĩāļĒāļāđāļāđāļāđāļēāļ Spark SQL:
sql_query = get_sql_query()
testResultDataFrame = spark.sql(sql_query)
testResultDataFrame.show(n=5)
āļāļēāļāļāļąāđāļāđāļĢāļēāļāļ°āļāļąāļāļāļķāļāļāđāļāļĄāļđāļĨāļāļĩāđāļĢāļ§āļāļĢāļ§āļĄāđāļ§āđāļĨāļāđāļāļāļēāļĢāļēāļāđāļ AWS RDS āđāļāļāļēāļĢāļāļąāļāļāļķāļāļāļĨāļāļēāļĢāļĢāļ§āļĄāļĨāļāđāļāļāļēāļĢāļēāļāļāļēāļāļāđāļāļĄāļđāļĨ āđāļĢāļēāļāļ°āđāļāđāļ§āļīāļāļĩāļāļēāļĢāđāļāļĩāļĒāļāļāļāļāļ§āļąāļāļāļļ DataFrame:
testResultDataFrame.write
.format("jdbc")
.mode("append")
.option("driver", 'org.postgresql.Driver')
.option("url","jdbc:postgresql://myhabrtest.ciny8bykwxeg.us-east-1.rds.amazonaws.com:5432/habrDB")
.option("dbtable", "transaction_flow")
.option("user", "habr")
.option("password", "habr12345")
.save()
āļāļģāđāļĄāđāļāļĩāđāļāļģāđāļāļĩāđāļĒāļ§āļāļąāļāļāļēāļĢāļāļąāđāļāļāđāļēāļāļēāļĢāđāļāļ·āđāļāļĄāļāđāļāļāļąāļ AWS RDS āđāļĢāļēāļŠāļĢāđāļēāļāļāļđāđāđāļāđāđāļĨāļ°āļĢāļŦāļąāļŠāļāđāļēāļāđāļāļāļąāđāļāļāļāļ âāļāļĢāļąāļāđāļāđ AWS PostgreSQLâ āļāļļāļāļāļ§āļĢāđāļāđ Endpoint āđāļāđāļ URL āđāļāļīāļĢāđāļāđāļ§āļāļĢāđāļāļēāļāļāđāļāļĄāļđāļĨ āļāļķāđāļāļāļ°āđāļŠāļāļāđāļāļŠāđāļ§āļāļāļēāļĢāđāļāļ·āđāļāļĄāļāđāļāđāļĨāļ°āļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒ:
āđāļāļ·āđāļāđāļāļ·āđāļāļĄāļāđāļ Spark āđāļĨāļ° Kafka āđāļāđāļāļĒāđāļēāļāļāļđāļāļāđāļāļ āļāļļāļāļāļ§āļĢāļĢāļąāļāļāļēāļāļāđāļēāļ smark-submit āđāļāļĒāđāļāđāļŠāļīāđāļāļāļĢāļ°āļāļīāļĐāļāđ āļāļļāļāļāļĢāļ°āļāļēāļĒāļŠāļāļĢāļĩāļĄāļĄāļīāđāļ-kafka-0-8_2.11. āļāļāļāļāļēāļāļāļĩāđ āđāļĢāļēāļĒāļąāļāđāļāđāļŠāļīāđāļāļāļĢāļ°āļāļīāļĐāļāđāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāđāļāđāļāļāļāļāļąāļāļāļēāļāļāđāļāļĄāļđāļĨ PostgreSQL āđāļāļĒāđāļĢāļēāļāļ°āļāđāļēāļĒāđāļāļāļāđāļāļĄāļđāļĨāđāļŦāļĨāđāļēāļāļąāđāļāļāđāļēāļ --packages
āđāļāļ·āđāļāļāļ§āļēāļĄāļĒāļ·āļāļŦāļĒāļļāđāļāļāļāļāļŠāļāļĢāļīāļāļāđāđāļĢāļēāļāļ°āļĢāļ§āļĄāļāļ·āđāļāļāļāļāđāļāļīāļĢāđāļāđāļ§āļāļĢāđāļāđāļāļāļ§āļēāļĄāđāļĨāļ°āļŦāļąāļ§āļāđāļāļāļĩāđāđāļĢāļēāļāđāļāļāļāļēāļĢāļĢāļąāļāļāđāļāļĄāļđāļĨāđāļāđāļāļāļēāļĢāļēāļĄāļīāđāļāļāļĢāđāļāļīāļāļāļļāļ
āļāļķāļāđāļ§āļĨāļēāļāļĩāđāļāļ°āđāļāļīāļāļāļąāļ§āđāļĨāļ°āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļāļģāļāļēāļāļāļāļāļĢāļ°āļāļ:
spark-submit
--packages org.apache.spark:spark-streaming-kafka-0-8_2.11:2.0.2,
org.postgresql:postgresql:9.4.1207
spark_job.py localhost:9092 transaction
āļāļļāļāļāļĒāđāļēāļāđāļāđāļāļĨ! āļāļąāļāļāļĩāđāļāļļāļāđāļŦāđāļāđāļāļ āļēāļāļāđāļēāļāļĨāđāļēāļ āđāļāļāļāļ°āļāļĩāđāđāļāļāļāļĨāļīāđāļāļāļąāļāļāļģāļĨāļąāļāļāļģāļāļēāļ āļāļĨāļĨāļąāļāļāđāļāļēāļĢāļĢāļ§āļĄāđāļŦāļĄāđāļāļ°āļāļđāļāļŠāđāļāļāļāļāļāļļāļāđ 2 āļ§āļīāļāļēāļāļĩ āđāļāļ·āđāļāļāļāļēāļāđāļĢāļēāļāļąāđāļāļāđāļēāļāđāļ§āļāđāļ§āļĨāļēāđāļāļāļāđāđāļāđāļ 2 āļ§āļīāļāļēāļāļĩāđāļĄāļ·āđāļāđāļĢāļēāļŠāļĢāđāļēāļāļāļāļāđāļāđāļāļāđ StreamingContext:

āļāđāļāđāļ āđāļĢāļēāļāļģāđāļāļāļŠāļāļāļāļēāļĄāļāđāļēāļĒāđ āđāļāļāļēāļāļāđāļāļĄāļđāļĨāđāļāļ·āđāļāļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļĄāļĩāļāļĒāļđāđāļāļāļāļāļąāļāļāļķāļāđāļāļāļēāļĢāļēāļ āļāļļāļĢāļāļĢāļĢāļĄ_āđāļŦāļĨ:

āļāđāļāļŠāļĢāļļāļ
āļāļāļāļ§āļēāļĄāļāļĩāđāļāļĨāđāļēāļ§āļāļķāļāļāļąāļ§āļāļĒāđāļēāļāļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļŠāļāļĢāļĩāļĄāļāđāļāļĄāļđāļĨāđāļāļĒāđāļāđ Spark Streaming āļĢāđāļ§āļĄāļāļąāļ Apache Kafka āđāļĨāļ° PostgreSQL āļāđāļ§āļĒāļāļēāļĢāđāļāļīāļāđāļāļāļāļāļāđāļāļĄāļđāļĨāļāļēāļāđāļŦāļĨāđāļāļāđāļēāļāđ āļāļķāļāđāļāđāļāđāļĢāļ·āđāļāļāļĒāļēāļāļāļĩāđāļāļ°āļāļĢāļ°āđāļĄāļīāļāļāđāļēāļŠāļđāļāđāļāđāļāļāļēāļāļāļāļīāļāļąāļāļīāļāļāļ Spark Streaming āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļŠāļĢāđāļēāļāđāļāļāļāļĨāļīāđāļāļāļąāļāļŠāļāļĢāļĩāļĄāļĄāļīāđāļāđāļĨāļ°āđāļĢāļĩāļĒāļĨāđāļāļĄāđ
āļāļļāļāļŠāļēāļĄāļēāļĢāļāļāđāļāļŦāļēāļāļāļĢāđāļŠāđāļāđāļāđāļāļāđāļāđāļĄāđāļāđāđāļāļāļ·āđāļāļāļĩāđāđāļāđāļāļāđāļāļĄāļđāļĨāļāļāļāļāļąāļāļāļĩāđ .
āļāļąāļāļĒāļīāļāļāļĩāļāļĩāđāļāļ°āļŦāļēāļĢāļ·āļāđāļāļĩāđāļĒāļ§āļāļąāļāļāļāļāļ§āļēāļĄāļāļĩāđ āļāļąāļāļŦāļ§āļąāļāļ§āđāļēāļāļ°āđāļāđāļĢāļąāļāļāļ§āļēāļĄāļāļīāļāđāļŦāđāļāļāļāļāļāļļāļ āđāļĨāļ°āļāļąāļāļāđāļŦāļ§āļąāļāļ§āđāļēāļāļ°āđāļāđāļĢāļąāļāļāļģāļ§āļīāļāļēāļĢāļāđāļāļĩāđāļŠāļĢāđāļēāļāļŠāļĢāļĢāļāđāļāļēāļāļāļđāđāļāđāļēāļāļāļĩāđāļŦāđāļ§āļāđāļĒāļāļļāļāļāļ
āļāļąāļāļāļāđāļŦāđāļāļļāļāļāļĢāļ°āļŠāļāļāļ§āļēāļĄāļŠāļģāđāļĢāđāļ!
ps āđāļāļāļāļāđāļĢāļāļĄāļĩāđāļāļāļāļ°āđāļāđāļāļēāļāļāđāļāļĄāļđāļĨ PostgreSQL āđāļāđāļāļĢāļ·āđāļāļ āđāļāđāđāļāļ·āđāļāļāļāļēāļāļāļąāļāļāļāļ AWS āļāļąāļāļāļķāļāļāļąāļāļŠāļīāļāđāļāļĒāđāļēāļĒāļāļēāļāļāđāļāļĄāļđāļĨāđāļāļĒāļąāļāļāļĨāļēāļ§āļāđ āđāļāļāļāļāļ§āļēāļĄāļāļąāļāđāļāđāļāļŦāļąāļ§āļāđāļāļāļĩāđ āļāļąāļāļāļ°āđāļŠāļāļāļ§āļīāļāļĩāđāļāđāļāļēāļāļĢāļ°āļāļāļāļąāđāļāļŦāļĄāļāļāļĩāđāļāļāļīāļāļēāļĒāđāļ§āđāļāđāļēāļāļāđāļāđāļ AWS āđāļāļĒāđāļāđ AWS Kinesis āđāļĨāļ° AWS EMR āļāļīāļāļāļēāļĄāļāđāļēāļ§!
āļāļĩāđāļĄāļē: will.com

