PredictionIO is completely useless without a Template yet we seem as a group
too focused on releasing PIO without regard for Templates. This IMO must
change. 90% of users will never touch the code of a template and only 1% will
actually create a template. These guesses come from list questions. If this is
true we need to switch our mindset to "templates first” not “pio first”. Before
any upgrade vote, every committer should make sure their favorite template
works with the new build. I will be doing so from now on.
We have one fairly significant problem that I see from a template supporter's
side. PIO has several new build directives that change dependencies like Spark
version and tools like Scala version. These are unknown to templates and there
is no PIO supported way to communicate these to the template's build.sbt. This
leaves us with templates that will not work with most combinations of PIO
builds. If we are lucky they may be updated to work with the *default* pio
config. But this did not happen when PIO-0.12.0 was released, only shortly
afterwards. This must change, the Apache templates at least must have some
support for PIO before release and here is one idea that might help...
How do we solve this?
1) .make-distribution modifies or creates a script that can be imported by the
templates build.sbt. This might be pio-env if we use `pio build` to build
templates because it is available to the template’s build.sbt, or something
else when we move to using sbt to build templates directly. This script defines
values used to build PIO.
2) update some or all of the Apache templates to use this mechanism to build
with the right scala version, etc. taken from the PIO build.
I had a user do this for the UR to support many different pio build directives,
and some that are new. The result was a build.sbt that includes such things as
val pioVersion = sys.env.getOrElse("PIO_VERSION","0.12.0-incubating”)
val scalaVersion = sys.env.getOrElse(“PIO_SCALA_VERSION”, “2.10.0”)
val elasticsearch1Version = sys.env.getOrElse("PIO_ELASTIC_VERSION","1.7.5")
val sparkVersion = sys.env.getOrElse("PIO_SPARK_VERSION","1.4.0”)
these are then used in the lib dependencies lists to pull in the right versions
of artifacts.
This in some form would allow templates to move along in lock step with changes
in the way pio is built on any given machine. Without something like this,
users even less expert at sbt than myself (hard to imagine) will have a
significant problem dumped on them.
Since this is only partially baked it may not be ready for a Jira and so
warrants discussion.