【发布时间】:2016-04-10 06:20:06
【问题描述】:
我已经使用Spray 和Slick 成功实现了一个简单的Web 服务,它通过Spark ML 预测管道传递传入请求。在我尝试添加数据层之前,一切正常。我选择了 Slick,它似乎很受欢迎。
但是,我不能让它正常工作。我的大部分代码都基于Hello-Slick Activator Template。我像这样使用 DAO 对象:
object dataDAO {
val datum = TableQuery[Datum]
def dbInit = {
val db = Database.forConfig("h2mem1")
try {
Await.result(db.run(DBIO.seq(
datum.schema.create
)), Duration.Inf)
} finally db.close
}
def insertData(data: Data) = {
val db = Database.forConfig("h2mem1")
try {
Await.result(db.run(DBIO.seq(
datum += data,
datum.result.map(println)
)), Duration.Inf)
} finally db.close
}
}
case class Data(data1: String, data2: String)
class Datum(tag: Tag) extends Table[Data](tag, "DATUM") {
def data1 = column[String]("DATA_ONE", O.PrimaryKey)
def data2 = column[String]("DATA_TWO")
def * = (data1, data2) <> (Data.tupled, Data.unapply)
}
我在 Boot 对象中初始化我的数据库
object Boot extends App {
implicit val system = ActorSystem("raatl-demo")
Classifier.initializeData
PredictionDAO.dbInit
// More service initialization code ...
}
我尝试在完成服务请求之前向我的数据库添加一条记录
val predictionRoute = {
path("data") {
get {
parameter('q) { query =>
// do Spark stuff to get prediction
DataDAO.insertData(data)
respondWithMediaType(`application/json`) {
complete {
DataJson(data1, data2)
}
}
}
}
}
当我向我的服务发送请求时,我的应用程序崩溃
java.lang.OutOfMemoryError: PermGen 空间
我怀疑我错误地实现了 Slick API。从文档中很难分辨,因为它将所有操作都塞进一个 main 方法中。
最后我的conf和activator ui一样
h2mem1 = {
url = "jdbc:h2:mem:raatl"
driver = org.h2.Driver
connectionPool = disabled
keepAliveConnection = true
}
有没有人遇到过这种情况?我正在使用 Slick 3.1
【问题讨论】:
-
最简单的方法是在 Java8 上运行,因为 PermGen 已被弃用。
标签: scala apache-spark out-of-memory slick spray