αα½ααααΈ α αΆα! αααααααααΎαααΉααααααΎααααααααααα½ααααααΉαααααΎαααΆαααααααΈαααΆα Apache Kafka αααααααΎ Spark Streaming α αΎααααααααααααααααΎαααΆααα ααΌαααααΆααα·ααααααααα AWS RDS α
α αΌαααΎααααααααΆααααΆαααα₯αααΆαααΆααααΆαααα½ααααααα±ααααΎαααΌαααΆααα·α αα ααααααΎαααΆαααααα·ααααα·ααΆαα αΌα "ααααΆαα" αα ααΌααΆααααΆααΆααΆααα’ααααααααΆα αααα’αΆα ααααΌαααΆαααααΎαααααΆαααααααααααααΆαααααΆααααΆααααΌαααΈααΆααααΌαα·ααααααααΎαα αα αααααΆααααααΆααΆα αααααααα α¬ααααααα α·ααααααααα»αααααΆααααααα·ααααα·ααΆαααα
ααΎααααΎααΌα ααααα ααΎααααΈα’αα»ααααααααΈαααααααα·αααααΎααααααααα·αα’αααααΆαα·αα»ααα - α’αΆααα αααααααΆαααΆαα! αα !
ααα ααααΈααααΆα
ααΆααΆααα·αααΆαα ααΆαααααΎαααΆααα·αααααααα½αα ααα½ααααααα»ααααααααΆαα·ααααααααΌαα±ααΆαα αααΎααααααΆααααααΎααααΆαααααα»αααααααααααααΎαα ααΆααα½ααααα αΌαααααΆααααααα·αααααα»ααα½ααααααΆααααΆααααααΊααΆαααααΆααααααΆαα Apache Kafka αα·α Spark Streaming ααα Kafka αααααΎαααααααΈααααααα ααααΆαα αΌα α αΎα Spark Streaming ααααΎαααΆααααα ααααααααΆαααΆααααααα α ααααααααααΆααααΆαααα½αα
ααΎααααΈαααααΎαααΆαα’αααααααααααα α»ααααααααα·ααΈ ααΎαααΉαααααΎα ααα»α αααα½ααα·αα·αααα ααΆαα½αααΉαααααααΆαααα αα αααααααααΆαααΈα Spark Streaming ααααΌαααΆααααααααααα·αααααααααααΆααααα ααΆααααΆααααααααΌααααααααα αααααααααα½ααα·αα·αααα α»αααααα α αΎαααααααΆαααααΆα‘αΎααα·αααΈααΈαααα
ααααΆααααααααααααααααααα’αα·αααααα
αααΆαααΆαα»αααααΆαααααΎα
Apache Kafka ααΊβααΆβααααααααβααααΎβααΆαβαααβααΆαβα ααβα αΆαβααααΆαβααΆαα αααααα·αααααααΆααααΆαααααΎααααΆααααΆααααα αααααΆα αα·αα’ααΈαααΊαα·αα ααΎααααΈαααααααΆααααΆαααΆααααααα·αααααα ααΆα Kafka ααααΌαααΆααααααΆαα»ααα ααΎααΆα αα·αα αααααα αααα»αα αααααα αααααααα Kafka ααααΌαααΆααααααΎαα‘αΎααα ααΎααααΌαααααααΆααααααααΎααααΆααααα ZooKeeper αααααααΈα Apache Spark - αααΆαααΆαα» Spark αααααΆααααααΎαααΆααα·ααααααααααααΈαα αααΌαα»α Spark Streaming ααααΌαααΆααααααΎαα‘αΎααααααααΎααααΆααααααΆααααααααααααΆαααΌα αααααααααΈααα·ααααααααααΌαααΆαααααααΆαααΆααΆααααα»ααααααααααα αααα·ααααααααΌα αα Spark Streaming αααα·ααααααααΈαααααααααααααααΆ α αΎααααα αΌαααΆαα αααα»ααααα ααααΌα αα αααα ααααααΈααααΌαααΆααααααΎααα α αααααααααααααΆααα αα ααΎαααα ααααααααααΈαα½αα αααα ααααααααΆαααααΈααααΌαααΆααααααΎα α αΎααα·ααααααααΆαα½ααααααα½αααΆααααα»αα αααααααααααααααΌαααΆααααα αΌααααα»ααααα ααααααααΆαα αα α α»ααααα ααααα αααααααα ααΆαααΌαααΆαααααα ααααααααΆααααα ααα αααα ααααααααααααΌαααΆααααααααααααΆαααΆαααααααααα α ααΆα ααααααααααΆα α;αααααα·ααΈ Apache Spark SQL - αα½ααααα αΌαααααΆααΌαααααΎαααΆαααααΆααααααααΆαα½αααΉαααΆαααααααααααα·ααΈαα»αααΆα Spark α αα·αααααααααααΆααα ααΆααααααααααΆααααααΆαα·αααααααααααΆααααααααΆααα αααααΊαααα»αααΆααααα½ααααααΆαααααααααααΆααΆααα’ααα Spark SQL ααΆααααααΆααααα αΌαααΈααααααα·αααααααααααΆααα ααΆααααααααααααααααααΆ α αΎααααααΆαααΆαα’αΆα ααααΆαααααααααΆααααααααΆααα ααΆα’αΆα ααΆαααααΆααααΆαααΆαααααα·αααααΆαααααΉαααααΆααααααααΌαααΆααααααααααααΆααα»ααααα α αΎααααααααααΌα DataFrame APIs ααααααAWS RDS ααΊααΆααΌαααααΆααα·ααααααααααΆαααααααααααΆαααΌαααααΆαααΎααααααααΆαααααααα ααααΆααααααα ααααααααααααα½αααΆαααα‘αΎα ααααα·ααααα·ααΆα αα·αααΆαααααΎααΆαααααααΆα α αΎαααααΌαααΆαααααααααααααααααΆααααα 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
ααααααααΎααααααΆαααααααΈαα½ααααααΆααααααααΆ ααααα·ααααα·ααΆαα
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic transaction
α αΌαααααΆααααΆαααααΆααααααααΆαα ααα½αααΆαααΆααααααααΌαααΆα αα·αααΆαα ααααααααΌαααΆααααααΎαα‘αΎαα
bin/kafka-topics.sh --describe --zookeeper localhost:2181
α
αΌαααΎαααΉααααααααΆααααΆαααΆαααααααα·ααα αα·αα’αααααααΎααααΆαααααααΆαααααααΆααααααααΆααααααΎαααααΈα ααααααΆααααα’α·αααααααα’αααΈαααααααα’αααα’αΆα
ααΆαααααααΆαααααΎ αα·αααα½αααΆαααααΌαααΆαααααααα
αααα»αα―αααΆαααααΌαααΆα -
ααΆααααααααααα’αααααα·α
α’αααααα·αααΉααααααΎααα·ααααααα ααααα - 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 α αΎαα
α»α
Next:
αααααΆααα α§ααΆα ααααααααΊαααααΆαααααααααα’ααααααααα»ααααα ααΎαααΉαααααΎαααΆαααΈαααα₯ααα·ααααα βαααΆαα αα
ααΆααβ (ααααΆααα₯ααα·ααααα)α
αααααΆαααα ααΎαααΆαααααααΆααΈααα
αααα»ααααα»α Free Tier α αΎααααααΆααααΈααα ααΎαααΉαααααΌαααΆααααααααΌααααααααααααααααα·ααΌαα§ααΆα αααααααααΆαα t2.micro - αααααΈααΆαααααααααα ααΆααΊα₯ααα·ααααα αα·ααααααααααααΆαααα·α
αα
ααΆαααααααΎαα
αααααΆααβααβααΏαβααααΆααβααααΆααβααΆααα αααααβααβα§ααΆα αααβααΌαααααΆαβαα·αααααα αααααβα’αααβααααΎβαα αα·αβααΆαααβαααααΆααβααααβααΆααα αααααΆαααααααα§ααΆα αααα myHabrTest α’αααααααΎααααΆααααα α αΆαα, ααΆααααααααΆααα habr12345 α αΎαα
α»α
ααΎαααΌαα»ααααααΆααα
αα ααααααααααΆααααΆααααΆαααΆαααααααααααα½ααα»αααααΌαα ααααααΆαααΆααααα½ααααααΆαααΈαααααΌαααααΆααα·ααααααααααααΎαααΈααΆααααα (ααααααΆαααααΎααααΆααααΆααΆααα) αα·αααααααΆαα αααα
ααααααααΎαααΆααααααααααΈαααααΆαααααα»ααα»ααααα·ααΆα VPC αααααΉαα’αα»ααααΆαα±ααα
αΌαααααΎααΆααααα
αα
ααΆαααααΆαααΈαααααΌαααααΆααα·ααααααααααααΎαααΆααααα
ααα 5432 (PostgreSQL)α
ααααα
αα»αααΌα AWS αα
αααα»ααααα’α½α
αααααα·ααΈαα»αααααΆα
ααααα‘αααα
ααΆαα VPC Dashboard -> αααα»ααα»ααααα·ααΆα -> αααααΎαααααααααα»ααα»ααααα·ααΆαα
ααΎααααααααααααααααΆαααααα»αααααα·αα»α - PostgreSQL αααααΆααΆααα·αααααΆαααα αΆαααΆ VPC αααα»αααααα½αααααΌαααΆαααααΆααααΆαα½α α αΎαα
α»α
αααΌαα»ααααααΎαα
αααααα αααΆαα Inbound αααααΆααα ααα 5432 αααααΆαααααα»ααααααΎααααααΎαααααΈ ααΌα αααα αΆααααα»αααΌαααΆαααΆααααααα α’ααααα·αα’αΆα αααααΆααα ααααααααααΆααα ααα»ααααααααΎαααΎα PostgreSQL ααΈαααααΈαααααΆααα α»α ααααααα
αα·ααΆααααΆαααΉαααΉα ααααα ::/0 ααΆααααααΆααααααΆαααα
ααΆα
αα
αΌααα
ααΆαααααΆαααΈαααααΈααααααα·αααΈ ααααα·ααα·αααΆαααααα»α ααα»ααααααΎααααΈαα·ααΆαα§ααΆα ααα ααΌαα’αα»ααααΆαα±αααααα½αααΎαααααΎαα·ααΈααΆααααααααα
ααΎααααα‘αααα
ααααααααααα·ααΈαα»ααααα·α αααααΎαααΎα "ααααααα
ααΆααααααααααααα·αααααα" α αΎαααααΎαααΎααα
αααα»αααααααααα»ααα»ααααα·ααΆα VPC -> ααααΎαααΎααααα»ααα»ααααα·ααΆα VPC αααααΆαααααΆαα -> PostgreSQL:
αααααΆαααα αααα»ααααααΎαααΌαααααΆααα·αααααα -> αααααααΌαααααΆααα·αααααα -> αααααααααα - habrDB.
ααΎαα’αΆα
αα»ααααΆαααΆααααααααααα
ααα ααΎααααααααΆααα·αααΆαααααα»ααα»α (αααααααααααΆαα»αααΆαααααα»ααα»α - 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 αααααααΎααααα»αα»ααΆα spark-streaming-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 αααααΆααααΆααααααΎαααΆαααααΆα αα·ααααααα·ααΈαααα»ααααααΆαααααααα
α’αααα’αΆα
αααααααααΌαααααααααααααα
αααα»αααααΆαααααααααα»ααα
αααα»αααΈαααΆααααα»αααΆααα·ααΆααααΆα’αααααααα αααα»ααααααΉααααα αΆααααααααααα’ααα α αΎααααα»ααααααααΉααααααΆααααΆααα·αααααααα»ααααααααΆαααΆααΈα’αααα’αΆααααααα α·ααααα»αααΆααααΆααα’ααα
αααα»αααΌαααΌαααα±ααα’αααααα½αααΆααααααα!
αααα»αα ααααΌαααΆααααΌαααΆααααααααΉαααααΎααΌαααααΆααα·αααααα PostgreSQL αααα»ααααα»α ααα»αααααααααΆαααΆααααααΆαααααααααα»αα
αααα AWS αααα»αααΆααααααα
α
α·αααααααΆααααΈααΌαααααΆααα·αααααααα
αααα αα
αααα»αα’ααααααααααΆααααΎαααααΆαααααα αααα»αααΉααααα αΆαααΈααααα’αα»ααααααααααααααΆααααΌααααααΆααα·αααααΆααΆαααΎαα
αααα»α AWS αααααααΎ AWS Kinesis αα·α AWS EMR α ααΆαααΆαααααααΆα!
ααααα: www.habr.com