SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
Integrating Non-Reactive 
Legacy Code - The Case of R 
! 
! 
! 
! 
! 
! 
Marek Kolodziej 
Machine Learning Engineer 
! 
! 
! 
! 
! 
! 
! 
SF Scala Meetup, Sep. 10, 2014
Reactive Recap
Reactive Recap 
Eve!nt-­‐driven 
-­‐ Asynchronous 
-­‐ Non-­‐blocking 
-­‐ Op4mized 
around 
Amdahl’s 
Law 
Scalable 
-­‐ Loca4on 
transparency 
(up 
and 
out) 
-­‐ Factor 
in 
unreliable 
network 
! 
Resilient 
-­‐ Failure 
isola4on 
(bulkhead 
paAern, 
etc.) 
-­‐ Clean 
service 
and 
failure 
handling 
separa4on 
(supervision) 
Responsive 
-­‐ Minimize 
latency 
-­‐ Deal 
with 
bursty 
traffic 
-­‐ Gracefully 
handle 
conges4on 
(backpressure/ac4ve 
pull 
by 
subscriber) 
< < 
07
The tough reality 
Not everything’s under your control 
Not 
everything’s 
an 
actor 
-­‐ Legacy 
Java/Scala 
code 
-­‐ Third-­‐Party 
Libraries 
Blo! cking 
calls 
-­‐ Database 
queries 
-­‐ Calls 
to 
services 
-­‐ Non-­‐threaded 
run4mes 
(R) 
! 
! 
!Long-­‐running 
jobs 
-­‐ Resource 
clean-­‐up 
in 
case 
network 
par44on 
occurs 
way 
before 
the 
4me-­‐out 
is 
reached 
-­‐ Timeouts 
vs. 
heartbeats 
! 
Not 
all 
failures 
are 
within 
th!e 
JVM 
-­‐ Can 
we 
revive 
them 
from 
within 
the 
JVM? 
! 
! 
< < 
07
Alpine’s R Operator 
< < 
07
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
For 
Alpine’s R Operator 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
The cases for and against R 
-­‐ 5,000+ 
sta4s4cal 
and 
machine 
learning 
libraries 
-­‐ “[Numeric] 
gold 
standard” 
implementa4ons 
-­‐ Operator 
would 
allow 
arbitrary 
processing 
in 
a 
“canned” 
applica4on 
-­‐ Data 
scien4sts 
already 
know 
the 
language 
-­‐ Support 
for 
client’s 
exis4ng 
code 
base 
(100s 
of 
scripts) 
-­‐ Very 
rapid 
prototyping 
-­‐ Focus 
on 
science 
instead 
of 
coding 
! 
< < 
07 
Against 
-­‐ Slow 
run4me 
(even 
with 
JIT) 
-­‐ Memory 
hogging 
(by-­‐copy 
seman4cs) 
-­‐ Very 
slow 
garbage 
collec4on 
-­‐ Single-­‐threaded 
run4me 
(even 
worse 
than 
Python 
and 
Ruby) 
-­‐ Na4ve 
libraries 
wriAen 
by 
people 
without 
much 
CS/ 
engineering 
background 
(segfaults, 
etc.) 
-­‐ Buggy 
libraries 
(infinite 
loops, 
etc.) 
-­‐ Run4me 
crashes 
-­‐ Terrible 
handling 
of 
big 
datasets
Lice! nsing 
Issues 
Challenges 
! 
! 
! 
! 
! 
! 
! 
! 
! 
-­‐ Need 
a 
cluster 
of 
R 
workers 
(mul4-­‐user, 
mul4-­‐operator 
concurrency 
given 
a 
single-­‐ 
threaded 
R 
run4me) 
! 
-­‐ REST 
is 
good 
for 
data 
but 
preAy 
bad 
for 
control 
(some 
structure 
would 
be 
nice) 
! 
-­‐ Sessions 
or 
backpressure 
! 
! 
-­‐ R 
is 
GPL 
-­‐ RServe 
is 
(L)GPL 
-­‐ Shipped 
soaware 
(GPL 
SaaS 
loophole 
doesn’t 
apply) 
Distributed 
compuHng 
< < 
07 
Fa!ult 
tolerance 
-­‐ R 
run4me 
failures 
-­‐ Network 
par44ons 
(R 
session 
clean-­‐up) 
! 
!
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
Licensing 
Issues 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
Solutions 
-­‐ Akka 
is 
Apache 
2.0 
-­‐ RServe 
is 
(L)GPL 
-­‐ Can 
open-­‐source 
the 
R-­‐Java 
server 
bridge 
-­‐ Communica4on 
to 
Alpine 
backend 
via 
(open-­‐source) 
message 
case 
classes 
Distributed 
compuHng 
-­‐ Akka’s 
loca4on 
transparency 
is 
ideal 
for 
distribu4ng 
work 
-­‐ Cluster 
API 
would 
have 
been 
preferred 
but 
Alpine 
uses 
Akka 
2.2.3 
due 
to 
Spark 
dependency 
-­‐ Structure 
and 
seman4cs 
due 
to 
message 
case 
classes 
-­‐ Rx 
streams 
would 
have 
been 
nice 
for 
backpressure, 
but 
we 
have 
an 
old 
Akka 
version 
(so 
sessions) 
! 
< < 
07 
Fault 
tolerance 
-­‐ Rserve 
forks 
R 
processes. 
Exc. 
handling 
of 
the 
Connec4on 
object 
lets 
you 
restart 
processes. 
-­‐ Akka’s 
heartbeat 
allows 
session 
clean-­‐up 
in 
case 
of 
network 
failure 
before 
4me-­‐ 
out 
(important 
if 
4me-­‐out 
is 
~1 
day). 
-­‐ Event 
bus 
lets 
you 
observe 
failure 
to 
connect 
to 
remote 
actor 
system. 
-­‐ No 
need 
for 
exactly 
once 
seman4cs 
(the 
user 
can 
re-­‐run 
the 
flow), 
but 
you 
have 
to 
know 
that 
the 
failure 
occurred. 
! 
! 
!
! 
! 
! 
! 
! 
! 
! 
! 
-­‐ Arguably 
the 
ugliest 
part 
of 
the 
solu4on 
(can 
be 
replaced 
with 
alterna4ves) 
-­‐ Worker 
actors 
blocked 
for 
long 
periods 
(hours). 
-­‐ Large 
data 
blocks 
are 
sent 
to 
the 
Akka 
R 
server 
(~ 
128 
MB). 
-­‐ No 
backpressure 
via 
Rx 
streams 
since 
it’s 
Akka 
2.3.2. 
-­‐ Custom 
router 
-­‐ 
refuses 
requests 
if 
all 
workers 
are 
busy. 
-­‐ Client 
needs 
to 
respond 
to 
request 
refusal 
by 
awai4ng 
a 
free 
worker 
message 
(reac4ve 
but 
inelegant). 
-­‐ BeAer 
solu4on 
-­‐ 
use 
reac4ve 
streams 
(we 
need 
to 
upgrade 
Akka) 
-­‐ Improvement: 
use 
Akka 
for 
control 
but 
REST 
for 
data 
movement 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
Sessions 
Solutions 
< < 
07
Future Improvements 
-­‐ Data 
movement 
via 
REST 
! 
-­‐ Replacement 
of 
sessions 
via 
reac4ve 
streams 
(Akka 
upgrade!) 
! 
-­‐ Kamon 
test 
drive 
for 
distributed 
actors 
(released 
~2 
weeks 
ago) 
! 
! 
! 
! 
< < 
07
Conclusions 
! 
! 
! 
! 
! 
! 
! 
! 
-­‐ Akka 
makes 
even 
non-­‐reac4ve 
distributed 
programming 
easier 
and 
more 
reliable 
! 
-­‐ If 
you 
can, 
use 
the 
latest 
Akka 
version 
because 
a 
lot 
of 
the 
earlier 
pain 
can 
be 
avoided: 
-­‐ 
clustering 
-­‐ 
persistence 
-­‐ 
reac4ve 
streams 
! 
-­‐ Large 
data 
movement 
via 
Akka 
is 
probably 
not 
an 
ideal 
use 
of 
the 
framework: 
-­‐ 
use 
REST 
(including 
Spray, 
Play, 
etc.) 
and 
HTTP 
chunking 
-­‐ 
move 
the 
data 
directly 
using 
NeAy, 
etc. 
! 
! 
! 
! 
! 
! 
! 
! 
< < 
07
Thank You !!! 
< < 
07
Miscellaneous 
! 
! 
! 
! 
! 
! 
! 
! 
-­‐ Alpine 
is 
hiring 
-­‐ 
machine 
learning 
engineers 
(Scala/Java) 
-­‐ 
data 
scien4sts 
(R/Python) 
-­‐ 
Front 
end 
developers 
(Ruby 
on 
Rails) 
! 
-­‐ 
ScalaCourses.com 
is 
looking 
for 
reviewers: 
-­‐ 
Scala 
(beginner/intermediate) 
-­‐ 
Akka 
-­‐ 
Play 
-­‐ 
Java 
Interop. 
-­‐ 
contact 
Michael 
Slinn: 
mslinn@scalacourses.com 
! 
! 
! 
! 
! 
! 
! 
< < 
07

Mais conteúdo relacionado

Mais procurados

Distributed Tests on Pulsar with Fallout - Pulsar Summit NA 2021
Distributed Tests on Pulsar with Fallout - Pulsar Summit NA 2021Distributed Tests on Pulsar with Fallout - Pulsar Summit NA 2021
Distributed Tests on Pulsar with Fallout - Pulsar Summit NA 2021StreamNative
 
Keeping Latency Low and Throughput High with Application-level Priority Manag...
Keeping Latency Low and Throughput High with Application-level Priority Manag...Keeping Latency Low and Throughput High with Application-level Priority Manag...
Keeping Latency Low and Throughput High with Application-level Priority Manag...ScyllaDB
 
WebLogic Stability; Detect and Analyse Stuck Threads
WebLogic Stability; Detect and Analyse Stuck ThreadsWebLogic Stability; Detect and Analyse Stuck Threads
WebLogic Stability; Detect and Analyse Stuck ThreadsMaarten Smeets
 
Spark Streaming with Kafka - Meetup Bangalore
Spark Streaming with Kafka - Meetup BangaloreSpark Streaming with Kafka - Meetup Bangalore
Spark Streaming with Kafka - Meetup BangaloreDibyendu Bhattacharya
 
Scala & Spark(1.6) in Performance Aspect for Scala Taiwan
Scala & Spark(1.6) in Performance Aspect for Scala TaiwanScala & Spark(1.6) in Performance Aspect for Scala Taiwan
Scala & Spark(1.6) in Performance Aspect for Scala TaiwanJimin Hsieh
 
Salvatore Sanfilippo – How Redis Cluster works, and why - NoSQL matters Barce...
Salvatore Sanfilippo – How Redis Cluster works, and why - NoSQL matters Barce...Salvatore Sanfilippo – How Redis Cluster works, and why - NoSQL matters Barce...
Salvatore Sanfilippo – How Redis Cluster works, and why - NoSQL matters Barce...NoSQLmatters
 
High-Performance Networking Using eBPF, XDP, and io_uring
High-Performance Networking Using eBPF, XDP, and io_uringHigh-Performance Networking Using eBPF, XDP, and io_uring
High-Performance Networking Using eBPF, XDP, and io_uringScyllaDB
 
Perforce Administration: Optimization, Scalability, Availability and Reliability
Perforce Administration: Optimization, Scalability, Availability and ReliabilityPerforce Administration: Optimization, Scalability, Availability and Reliability
Perforce Administration: Optimization, Scalability, Availability and ReliabilityPerforce
 
Reactive mistakes - ScalaDays Chicago 2017
Reactive mistakes -  ScalaDays Chicago 2017Reactive mistakes -  ScalaDays Chicago 2017
Reactive mistakes - ScalaDays Chicago 2017Petr Zapletal
 
Snabb Switch: Riding the HPC wave to simpler, better network appliances (FOSD...
Snabb Switch: Riding the HPC wave to simpler, better network appliances (FOSD...Snabb Switch: Riding the HPC wave to simpler, better network appliances (FOSD...
Snabb Switch: Riding the HPC wave to simpler, better network appliances (FOSD...Igalia
 
Functional? Reactive? Why?
Functional? Reactive? Why?Functional? Reactive? Why?
Functional? Reactive? Why?Aleksandr Tavgen
 
Performance Tuning - Memory leaks, Thread deadlocks, JDK tools
Performance Tuning -  Memory leaks, Thread deadlocks, JDK toolsPerformance Tuning -  Memory leaks, Thread deadlocks, JDK tools
Performance Tuning - Memory leaks, Thread deadlocks, JDK toolsHaribabu Nandyal Padmanaban
 
Scala io2013 : Our journey from UML/MDD to Scala macros
Scala io2013 : Our journey from UML/MDD to Scala macrosScala io2013 : Our journey from UML/MDD to Scala macros
Scala io2013 : Our journey from UML/MDD to Scala macrosebiznext
 
G1: To Infinity and Beyond
G1: To Infinity and BeyondG1: To Infinity and Beyond
G1: To Infinity and BeyondScyllaDB
 
Ceph Day Santa Clara: The Future of CephFS + Developing with Librados
Ceph Day Santa Clara: The Future of CephFS + Developing with LibradosCeph Day Santa Clara: The Future of CephFS + Developing with Librados
Ceph Day Santa Clara: The Future of CephFS + Developing with LibradosCeph Community
 
Low latency in java 8 by Peter Lawrey
Low latency in java 8 by Peter Lawrey Low latency in java 8 by Peter Lawrey
Low latency in java 8 by Peter Lawrey J On The Beach
 
Developing production OpenFlow controller with Trema
Developing production OpenFlow controller with TremaDeveloping production OpenFlow controller with Trema
Developing production OpenFlow controller with TremaYasunobu Chiba
 

Mais procurados (20)

Distributed Tests on Pulsar with Fallout - Pulsar Summit NA 2021
Distributed Tests on Pulsar with Fallout - Pulsar Summit NA 2021Distributed Tests on Pulsar with Fallout - Pulsar Summit NA 2021
Distributed Tests on Pulsar with Fallout - Pulsar Summit NA 2021
 
Keeping Latency Low and Throughput High with Application-level Priority Manag...
Keeping Latency Low and Throughput High with Application-level Priority Manag...Keeping Latency Low and Throughput High with Application-level Priority Manag...
Keeping Latency Low and Throughput High with Application-level Priority Manag...
 
WebLogic Stability; Detect and Analyse Stuck Threads
WebLogic Stability; Detect and Analyse Stuck ThreadsWebLogic Stability; Detect and Analyse Stuck Threads
WebLogic Stability; Detect and Analyse Stuck Threads
 
Spark Streaming with Kafka - Meetup Bangalore
Spark Streaming with Kafka - Meetup BangaloreSpark Streaming with Kafka - Meetup Bangalore
Spark Streaming with Kafka - Meetup Bangalore
 
Scala & Spark(1.6) in Performance Aspect for Scala Taiwan
Scala & Spark(1.6) in Performance Aspect for Scala TaiwanScala & Spark(1.6) in Performance Aspect for Scala Taiwan
Scala & Spark(1.6) in Performance Aspect for Scala Taiwan
 
Salvatore Sanfilippo – How Redis Cluster works, and why - NoSQL matters Barce...
Salvatore Sanfilippo – How Redis Cluster works, and why - NoSQL matters Barce...Salvatore Sanfilippo – How Redis Cluster works, and why - NoSQL matters Barce...
Salvatore Sanfilippo – How Redis Cluster works, and why - NoSQL matters Barce...
 
CPAN Training
CPAN TrainingCPAN Training
CPAN Training
 
Os Lamothe
Os LamotheOs Lamothe
Os Lamothe
 
High-Performance Networking Using eBPF, XDP, and io_uring
High-Performance Networking Using eBPF, XDP, and io_uringHigh-Performance Networking Using eBPF, XDP, and io_uring
High-Performance Networking Using eBPF, XDP, and io_uring
 
Perforce Administration: Optimization, Scalability, Availability and Reliability
Perforce Administration: Optimization, Scalability, Availability and ReliabilityPerforce Administration: Optimization, Scalability, Availability and Reliability
Perforce Administration: Optimization, Scalability, Availability and Reliability
 
Reactive mistakes - ScalaDays Chicago 2017
Reactive mistakes -  ScalaDays Chicago 2017Reactive mistakes -  ScalaDays Chicago 2017
Reactive mistakes - ScalaDays Chicago 2017
 
Snabb Switch: Riding the HPC wave to simpler, better network appliances (FOSD...
Snabb Switch: Riding the HPC wave to simpler, better network appliances (FOSD...Snabb Switch: Riding the HPC wave to simpler, better network appliances (FOSD...
Snabb Switch: Riding the HPC wave to simpler, better network appliances (FOSD...
 
Functional? Reactive? Why?
Functional? Reactive? Why?Functional? Reactive? Why?
Functional? Reactive? Why?
 
Performance Tuning - Memory leaks, Thread deadlocks, JDK tools
Performance Tuning -  Memory leaks, Thread deadlocks, JDK toolsPerformance Tuning -  Memory leaks, Thread deadlocks, JDK tools
Performance Tuning - Memory leaks, Thread deadlocks, JDK tools
 
Scala io2013 : Our journey from UML/MDD to Scala macros
Scala io2013 : Our journey from UML/MDD to Scala macrosScala io2013 : Our journey from UML/MDD to Scala macros
Scala io2013 : Our journey from UML/MDD to Scala macros
 
G1: To Infinity and Beyond
G1: To Infinity and BeyondG1: To Infinity and Beyond
G1: To Infinity and Beyond
 
Ceph Day Santa Clara: The Future of CephFS + Developing with Librados
Ceph Day Santa Clara: The Future of CephFS + Developing with LibradosCeph Day Santa Clara: The Future of CephFS + Developing with Librados
Ceph Day Santa Clara: The Future of CephFS + Developing with Librados
 
Low latency in java 8 by Peter Lawrey
Low latency in java 8 by Peter Lawrey Low latency in java 8 by Peter Lawrey
Low latency in java 8 by Peter Lawrey
 
Developing production OpenFlow controller with Trema
Developing production OpenFlow controller with TremaDeveloping production OpenFlow controller with Trema
Developing production OpenFlow controller with Trema
 
Introduction to the Archivematica API (September 2018)
Introduction to the Archivematica API (September 2018)Introduction to the Archivematica API (September 2018)
Introduction to the Archivematica API (September 2018)
 

Semelhante a Integrating R and the JVM Platform - Alpine Data Labs' R Execute Operator

Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache...
Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache...Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache...
Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache...Lightbend
 
Anton Moldovan "Building an efficient replication system for thousands of ter...
Anton Moldovan "Building an efficient replication system for thousands of ter...Anton Moldovan "Building an efficient replication system for thousands of ter...
Anton Moldovan "Building an efficient replication system for thousands of ter...Fwdays
 
OSMC 2010 | Monitoring mit Icinga by Icinga Team
OSMC 2010 | Monitoring mit Icinga by Icinga TeamOSMC 2010 | Monitoring mit Icinga by Icinga Team
OSMC 2010 | Monitoring mit Icinga by Icinga TeamNETWAYS
 
Actor-based concurrency in a modern Java Enterprise
Actor-based concurrency in a modern Java EnterpriseActor-based concurrency in a modern Java Enterprise
Actor-based concurrency in a modern Java EnterpriseAlexander Lukyanchikov
 
Lessons Learned: Using Spark and Microservices
Lessons Learned: Using Spark and MicroservicesLessons Learned: Using Spark and Microservices
Lessons Learned: Using Spark and MicroservicesAlexis Seigneurin
 
Llap: Locality is Dead
Llap: Locality is DeadLlap: Locality is Dead
Llap: Locality is Deadt3rmin4t0r
 
Sanger OpenStack presentation March 2017
Sanger OpenStack presentation March 2017Sanger OpenStack presentation March 2017
Sanger OpenStack presentation March 2017Dave Holland
 
3.2 Streaming and Messaging
3.2 Streaming and Messaging3.2 Streaming and Messaging
3.2 Streaming and Messaging振东 刘
 
Near Real time Indexing Kafka Messages to Apache Blur using Spark Streaming
Near Real time Indexing Kafka Messages to Apache Blur using Spark StreamingNear Real time Indexing Kafka Messages to Apache Blur using Spark Streaming
Near Real time Indexing Kafka Messages to Apache Blur using Spark StreamingDibyendu Bhattacharya
 
Quantifying Container Runtime Performance: OSCON 2017 Open Container Day
Quantifying Container Runtime Performance: OSCON 2017 Open Container DayQuantifying Container Runtime Performance: OSCON 2017 Open Container Day
Quantifying Container Runtime Performance: OSCON 2017 Open Container DayPhil Estes
 
Fault Tolerance in Spark: Lessons Learned from Production: Spark Summit East ...
Fault Tolerance in Spark: Lessons Learned from Production: Spark Summit East ...Fault Tolerance in Spark: Lessons Learned from Production: Spark Summit East ...
Fault Tolerance in Spark: Lessons Learned from Production: Spark Summit East ...Spark Summit
 
Porting a Streaming Pipeline from Scala to Rust
Porting a Streaming Pipeline from Scala to RustPorting a Streaming Pipeline from Scala to Rust
Porting a Streaming Pipeline from Scala to RustEvan Chan
 
Real time Analytics with Apache Kafka and Apache Spark
Real time Analytics with Apache Kafka and Apache SparkReal time Analytics with Apache Kafka and Apache Spark
Real time Analytics with Apache Kafka and Apache SparkRahul Jain
 
Apache samza past, present and future
Apache samza  past, present and futureApache samza  past, present and future
Apache samza past, present and futureEd Yakabosky
 
Stefano Rocco, Roberto Bentivoglio - Scala in increasingly demanding environm...
Stefano Rocco, Roberto Bentivoglio - Scala in increasingly demanding environm...Stefano Rocco, Roberto Bentivoglio - Scala in increasingly demanding environm...
Stefano Rocco, Roberto Bentivoglio - Scala in increasingly demanding environm...Scala Italy
 
LLAP: Locality is dead (in the cloud)
LLAP: Locality is dead (in the cloud)  LLAP: Locality is dead (in the cloud)
LLAP: Locality is dead (in the cloud) Future of Data Meetup
 
Trivadis TechEvent 2016 Apache Kafka - Scalable Massage Processing and more! ...
Trivadis TechEvent 2016 Apache Kafka - Scalable Massage Processing and more! ...Trivadis TechEvent 2016 Apache Kafka - Scalable Massage Processing and more! ...
Trivadis TechEvent 2016 Apache Kafka - Scalable Massage Processing and more! ...Trivadis
 
Samza portable runner for beam
Samza portable runner for beamSamza portable runner for beam
Samza portable runner for beamHai Lu
 
Cassandra Day SV 2014: Spark, Shark, and Apache Cassandra
Cassandra Day SV 2014: Spark, Shark, and Apache CassandraCassandra Day SV 2014: Spark, Shark, and Apache Cassandra
Cassandra Day SV 2014: Spark, Shark, and Apache CassandraDataStax Academy
 
Kafka Summit NYC 2017 Introduction to Kafka Streams with a Real-life Example
Kafka Summit NYC 2017 Introduction to Kafka Streams with a Real-life ExampleKafka Summit NYC 2017 Introduction to Kafka Streams with a Real-life Example
Kafka Summit NYC 2017 Introduction to Kafka Streams with a Real-life Exampleconfluent
 

Semelhante a Integrating R and the JVM Platform - Alpine Data Labs' R Execute Operator (20)

Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache...
Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache...Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache...
Build Real-Time Streaming ETL Pipelines With Akka Streams, Alpakka And Apache...
 
Anton Moldovan "Building an efficient replication system for thousands of ter...
Anton Moldovan "Building an efficient replication system for thousands of ter...Anton Moldovan "Building an efficient replication system for thousands of ter...
Anton Moldovan "Building an efficient replication system for thousands of ter...
 
OSMC 2010 | Monitoring mit Icinga by Icinga Team
OSMC 2010 | Monitoring mit Icinga by Icinga TeamOSMC 2010 | Monitoring mit Icinga by Icinga Team
OSMC 2010 | Monitoring mit Icinga by Icinga Team
 
Actor-based concurrency in a modern Java Enterprise
Actor-based concurrency in a modern Java EnterpriseActor-based concurrency in a modern Java Enterprise
Actor-based concurrency in a modern Java Enterprise
 
Lessons Learned: Using Spark and Microservices
Lessons Learned: Using Spark and MicroservicesLessons Learned: Using Spark and Microservices
Lessons Learned: Using Spark and Microservices
 
Llap: Locality is Dead
Llap: Locality is DeadLlap: Locality is Dead
Llap: Locality is Dead
 
Sanger OpenStack presentation March 2017
Sanger OpenStack presentation March 2017Sanger OpenStack presentation March 2017
Sanger OpenStack presentation March 2017
 
3.2 Streaming and Messaging
3.2 Streaming and Messaging3.2 Streaming and Messaging
3.2 Streaming and Messaging
 
Near Real time Indexing Kafka Messages to Apache Blur using Spark Streaming
Near Real time Indexing Kafka Messages to Apache Blur using Spark StreamingNear Real time Indexing Kafka Messages to Apache Blur using Spark Streaming
Near Real time Indexing Kafka Messages to Apache Blur using Spark Streaming
 
Quantifying Container Runtime Performance: OSCON 2017 Open Container Day
Quantifying Container Runtime Performance: OSCON 2017 Open Container DayQuantifying Container Runtime Performance: OSCON 2017 Open Container Day
Quantifying Container Runtime Performance: OSCON 2017 Open Container Day
 
Fault Tolerance in Spark: Lessons Learned from Production: Spark Summit East ...
Fault Tolerance in Spark: Lessons Learned from Production: Spark Summit East ...Fault Tolerance in Spark: Lessons Learned from Production: Spark Summit East ...
Fault Tolerance in Spark: Lessons Learned from Production: Spark Summit East ...
 
Porting a Streaming Pipeline from Scala to Rust
Porting a Streaming Pipeline from Scala to RustPorting a Streaming Pipeline from Scala to Rust
Porting a Streaming Pipeline from Scala to Rust
 
Real time Analytics with Apache Kafka and Apache Spark
Real time Analytics with Apache Kafka and Apache SparkReal time Analytics with Apache Kafka and Apache Spark
Real time Analytics with Apache Kafka and Apache Spark
 
Apache samza past, present and future
Apache samza  past, present and futureApache samza  past, present and future
Apache samza past, present and future
 
Stefano Rocco, Roberto Bentivoglio - Scala in increasingly demanding environm...
Stefano Rocco, Roberto Bentivoglio - Scala in increasingly demanding environm...Stefano Rocco, Roberto Bentivoglio - Scala in increasingly demanding environm...
Stefano Rocco, Roberto Bentivoglio - Scala in increasingly demanding environm...
 
LLAP: Locality is dead (in the cloud)
LLAP: Locality is dead (in the cloud)  LLAP: Locality is dead (in the cloud)
LLAP: Locality is dead (in the cloud)
 
Trivadis TechEvent 2016 Apache Kafka - Scalable Massage Processing and more! ...
Trivadis TechEvent 2016 Apache Kafka - Scalable Massage Processing and more! ...Trivadis TechEvent 2016 Apache Kafka - Scalable Massage Processing and more! ...
Trivadis TechEvent 2016 Apache Kafka - Scalable Massage Processing and more! ...
 
Samza portable runner for beam
Samza portable runner for beamSamza portable runner for beam
Samza portable runner for beam
 
Cassandra Day SV 2014: Spark, Shark, and Apache Cassandra
Cassandra Day SV 2014: Spark, Shark, and Apache CassandraCassandra Day SV 2014: Spark, Shark, and Apache Cassandra
Cassandra Day SV 2014: Spark, Shark, and Apache Cassandra
 
Kafka Summit NYC 2017 Introduction to Kafka Streams with a Real-life Example
Kafka Summit NYC 2017 Introduction to Kafka Streams with a Real-life ExampleKafka Summit NYC 2017 Introduction to Kafka Streams with a Real-life Example
Kafka Summit NYC 2017 Introduction to Kafka Streams with a Real-life Example
 

Mais de alpinedatalabs

Alpine innovation final v1.0
Alpine innovation final v1.0Alpine innovation final v1.0
Alpine innovation final v1.0alpinedatalabs
 
Predictive analytics from a to z
Predictive analytics from a to zPredictive analytics from a to z
Predictive analytics from a to zalpinedatalabs
 
Alpine Spark Implementation - Technical
Alpine Spark Implementation - TechnicalAlpine Spark Implementation - Technical
Alpine Spark Implementation - Technicalalpinedatalabs
 
Don't Gamble With Your Data
Don't Gamble With Your DataDon't Gamble With Your Data
Don't Gamble With Your Dataalpinedatalabs
 
Steven Hillion Presents, "Why Women are Better Data Scientists."
Steven Hillion Presents, "Why Women are Better Data Scientists."Steven Hillion Presents, "Why Women are Better Data Scientists."
Steven Hillion Presents, "Why Women are Better Data Scientists."alpinedatalabs
 
Strata Big Data Camp 2013
Strata Big Data Camp 2013Strata Big Data Camp 2013
Strata Big Data Camp 2013alpinedatalabs
 

Mais de alpinedatalabs (6)

Alpine innovation final v1.0
Alpine innovation final v1.0Alpine innovation final v1.0
Alpine innovation final v1.0
 
Predictive analytics from a to z
Predictive analytics from a to zPredictive analytics from a to z
Predictive analytics from a to z
 
Alpine Spark Implementation - Technical
Alpine Spark Implementation - TechnicalAlpine Spark Implementation - Technical
Alpine Spark Implementation - Technical
 
Don't Gamble With Your Data
Don't Gamble With Your DataDon't Gamble With Your Data
Don't Gamble With Your Data
 
Steven Hillion Presents, "Why Women are Better Data Scientists."
Steven Hillion Presents, "Why Women are Better Data Scientists."Steven Hillion Presents, "Why Women are Better Data Scientists."
Steven Hillion Presents, "Why Women are Better Data Scientists."
 
Strata Big Data Camp 2013
Strata Big Data Camp 2013Strata Big Data Camp 2013
Strata Big Data Camp 2013
 

Último

UNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its PerformanceUNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its Performancesivaprakash250
 
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete RecordCCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete RecordAsst.prof M.Gokilavani
 
Introduction and different types of Ethernet.pptx
Introduction and different types of Ethernet.pptxIntroduction and different types of Ethernet.pptx
Introduction and different types of Ethernet.pptxupamatechverse
 
Booking open Available Pune Call Girls Koregaon Park 6297143586 Call Hot Ind...
Booking open Available Pune Call Girls Koregaon Park  6297143586 Call Hot Ind...Booking open Available Pune Call Girls Koregaon Park  6297143586 Call Hot Ind...
Booking open Available Pune Call Girls Koregaon Park 6297143586 Call Hot Ind...Call Girls in Nagpur High Profile
 
SPICE PARK APR2024 ( 6,793 SPICE Models )
SPICE PARK APR2024 ( 6,793 SPICE Models )SPICE PARK APR2024 ( 6,793 SPICE Models )
SPICE PARK APR2024 ( 6,793 SPICE Models )Tsuyoshi Horigome
 
Coefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptxCoefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptxAsutosh Ranjan
 
247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt
247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt
247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).pptssuser5c9d4b1
 
Introduction to IEEE STANDARDS and its different types.pptx
Introduction to IEEE STANDARDS and its different types.pptxIntroduction to IEEE STANDARDS and its different types.pptx
Introduction to IEEE STANDARDS and its different types.pptxupamatechverse
 
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...ranjana rawat
 
OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...
OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...
OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...Soham Mondal
 
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINEMANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINESIVASHANKAR N
 
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur EscortsCall Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur High Profile
 
Processing & Properties of Floor and Wall Tiles.pptx
Processing & Properties of Floor and Wall Tiles.pptxProcessing & Properties of Floor and Wall Tiles.pptx
Processing & Properties of Floor and Wall Tiles.pptxpranjaldaimarysona
 
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Serviceranjana rawat
 
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130Suhani Kapoor
 
result management system report for college project
result management system report for college projectresult management system report for college project
result management system report for college projectTonystark477637
 
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escortsranjana rawat
 
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...Christo Ananth
 
APPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICS
APPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICSAPPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICS
APPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICSKurinjimalarL3
 

Último (20)

UNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its PerformanceUNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its Performance
 
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete RecordCCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
 
Introduction and different types of Ethernet.pptx
Introduction and different types of Ethernet.pptxIntroduction and different types of Ethernet.pptx
Introduction and different types of Ethernet.pptx
 
Booking open Available Pune Call Girls Koregaon Park 6297143586 Call Hot Ind...
Booking open Available Pune Call Girls Koregaon Park  6297143586 Call Hot Ind...Booking open Available Pune Call Girls Koregaon Park  6297143586 Call Hot Ind...
Booking open Available Pune Call Girls Koregaon Park 6297143586 Call Hot Ind...
 
SPICE PARK APR2024 ( 6,793 SPICE Models )
SPICE PARK APR2024 ( 6,793 SPICE Models )SPICE PARK APR2024 ( 6,793 SPICE Models )
SPICE PARK APR2024 ( 6,793 SPICE Models )
 
Coefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptxCoefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptx
 
247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt
247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt
247267395-1-Symmetric-and-distributed-shared-memory-architectures-ppt (1).ppt
 
Introduction to IEEE STANDARDS and its different types.pptx
Introduction to IEEE STANDARDS and its different types.pptxIntroduction to IEEE STANDARDS and its different types.pptx
Introduction to IEEE STANDARDS and its different types.pptx
 
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
 
OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...
OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...
OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...
 
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINEMANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
 
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur EscortsCall Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
 
Processing & Properties of Floor and Wall Tiles.pptx
Processing & Properties of Floor and Wall Tiles.pptxProcessing & Properties of Floor and Wall Tiles.pptx
Processing & Properties of Floor and Wall Tiles.pptx
 
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
 
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
 
result management system report for college project
result management system report for college projectresult management system report for college project
result management system report for college project
 
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
 
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
 
APPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICS
APPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICSAPPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICS
APPLICATIONS-AC/DC DRIVES-OPERATING CHARACTERISTICS
 
★ CALL US 9953330565 ( HOT Young Call Girls In Badarpur delhi NCR
★ CALL US 9953330565 ( HOT Young Call Girls In Badarpur delhi NCR★ CALL US 9953330565 ( HOT Young Call Girls In Badarpur delhi NCR
★ CALL US 9953330565 ( HOT Young Call Girls In Badarpur delhi NCR
 

Integrating R and the JVM Platform - Alpine Data Labs' R Execute Operator

  • 1. Integrating Non-Reactive Legacy Code - The Case of R ! ! ! ! ! ! Marek Kolodziej Machine Learning Engineer ! ! ! ! ! ! ! SF Scala Meetup, Sep. 10, 2014
  • 3. Reactive Recap Eve!nt-­‐driven -­‐ Asynchronous -­‐ Non-­‐blocking -­‐ Op4mized around Amdahl’s Law Scalable -­‐ Loca4on transparency (up and out) -­‐ Factor in unreliable network ! Resilient -­‐ Failure isola4on (bulkhead paAern, etc.) -­‐ Clean service and failure handling separa4on (supervision) Responsive -­‐ Minimize latency -­‐ Deal with bursty traffic -­‐ Gracefully handle conges4on (backpressure/ac4ve pull by subscriber) < < 07
  • 4.
  • 5. The tough reality Not everything’s under your control Not everything’s an actor -­‐ Legacy Java/Scala code -­‐ Third-­‐Party Libraries Blo! cking calls -­‐ Database queries -­‐ Calls to services -­‐ Non-­‐threaded run4mes (R) ! ! !Long-­‐running jobs -­‐ Resource clean-­‐up in case network par44on occurs way before the 4me-­‐out is reached -­‐ Timeouts vs. heartbeats ! Not all failures are within th!e JVM -­‐ Can we revive them from within the JVM? ! ! < < 07
  • 7. ! ! ! ! ! ! ! ! ! ! ! ! ! For Alpine’s R Operator ! ! ! ! ! ! ! ! ! ! ! ! ! ! The cases for and against R -­‐ 5,000+ sta4s4cal and machine learning libraries -­‐ “[Numeric] gold standard” implementa4ons -­‐ Operator would allow arbitrary processing in a “canned” applica4on -­‐ Data scien4sts already know the language -­‐ Support for client’s exis4ng code base (100s of scripts) -­‐ Very rapid prototyping -­‐ Focus on science instead of coding ! < < 07 Against -­‐ Slow run4me (even with JIT) -­‐ Memory hogging (by-­‐copy seman4cs) -­‐ Very slow garbage collec4on -­‐ Single-­‐threaded run4me (even worse than Python and Ruby) -­‐ Na4ve libraries wriAen by people without much CS/ engineering background (segfaults, etc.) -­‐ Buggy libraries (infinite loops, etc.) -­‐ Run4me crashes -­‐ Terrible handling of big datasets
  • 8. Lice! nsing Issues Challenges ! ! ! ! ! ! ! ! ! -­‐ Need a cluster of R workers (mul4-­‐user, mul4-­‐operator concurrency given a single-­‐ threaded R run4me) ! -­‐ REST is good for data but preAy bad for control (some structure would be nice) ! -­‐ Sessions or backpressure ! ! -­‐ R is GPL -­‐ RServe is (L)GPL -­‐ Shipped soaware (GPL SaaS loophole doesn’t apply) Distributed compuHng < < 07 Fa!ult tolerance -­‐ R run4me failures -­‐ Network par44ons (R session clean-­‐up) ! !
  • 9. ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! Licensing Issues ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! Solutions -­‐ Akka is Apache 2.0 -­‐ RServe is (L)GPL -­‐ Can open-­‐source the R-­‐Java server bridge -­‐ Communica4on to Alpine backend via (open-­‐source) message case classes Distributed compuHng -­‐ Akka’s loca4on transparency is ideal for distribu4ng work -­‐ Cluster API would have been preferred but Alpine uses Akka 2.2.3 due to Spark dependency -­‐ Structure and seman4cs due to message case classes -­‐ Rx streams would have been nice for backpressure, but we have an old Akka version (so sessions) ! < < 07 Fault tolerance -­‐ Rserve forks R processes. Exc. handling of the Connec4on object lets you restart processes. -­‐ Akka’s heartbeat allows session clean-­‐up in case of network failure before 4me-­‐ out (important if 4me-­‐out is ~1 day). -­‐ Event bus lets you observe failure to connect to remote actor system. -­‐ No need for exactly once seman4cs (the user can re-­‐run the flow), but you have to know that the failure occurred. ! ! !
  • 10. ! ! ! ! ! ! ! ! -­‐ Arguably the ugliest part of the solu4on (can be replaced with alterna4ves) -­‐ Worker actors blocked for long periods (hours). -­‐ Large data blocks are sent to the Akka R server (~ 128 MB). -­‐ No backpressure via Rx streams since it’s Akka 2.3.2. -­‐ Custom router -­‐ refuses requests if all workers are busy. -­‐ Client needs to respond to request refusal by awai4ng a free worker message (reac4ve but inelegant). -­‐ BeAer solu4on -­‐ use reac4ve streams (we need to upgrade Akka) -­‐ Improvement: use Akka for control but REST for data movement ! ! ! ! ! ! ! ! ! ! ! ! Sessions Solutions < < 07
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25. Future Improvements -­‐ Data movement via REST ! -­‐ Replacement of sessions via reac4ve streams (Akka upgrade!) ! -­‐ Kamon test drive for distributed actors (released ~2 weeks ago) ! ! ! ! < < 07
  • 26. Conclusions ! ! ! ! ! ! ! ! -­‐ Akka makes even non-­‐reac4ve distributed programming easier and more reliable ! -­‐ If you can, use the latest Akka version because a lot of the earlier pain can be avoided: -­‐ clustering -­‐ persistence -­‐ reac4ve streams ! -­‐ Large data movement via Akka is probably not an ideal use of the framework: -­‐ use REST (including Spray, Play, etc.) and HTTP chunking -­‐ move the data directly using NeAy, etc. ! ! ! ! ! ! ! ! < < 07
  • 27. Thank You !!! < < 07
  • 28. Miscellaneous ! ! ! ! ! ! ! ! -­‐ Alpine is hiring -­‐ machine learning engineers (Scala/Java) -­‐ data scien4sts (R/Python) -­‐ Front end developers (Ruby on Rails) ! -­‐ ScalaCourses.com is looking for reviewers: -­‐ Scala (beginner/intermediate) -­‐ Akka -­‐ Play -­‐ Java Interop. -­‐ contact Michael Slinn: mslinn@scalacourses.com ! ! ! ! ! ! ! < < 07