in s2core/src/main/scala/org/apache/s2graph/core/storage/hbase/AsynchbaseStorage.scala [92:152]
def initLocalHBase(config: Config,
overwrite: Boolean = true): ExecutorService = {
import java.io.{File, IOException}
import java.net.Socket
lazy val hbaseExecutor = {
val executor = Executors.newSingleThreadExecutor()
Runtime.getRuntime.addShutdownHook(new Thread() {
override def run(): Unit = {
executor.shutdown()
}
})
val hbaseAvailable = try {
val (host, port) = config.getString("hbase.zookeeper.quorum").split(":") match {
case Array(h, p) => (h, p.toInt)
case Array(h) => (h, 2181)
}
val socket = new Socket(host, port)
socket.close()
logger.info(s"HBase is available.")
true
} catch {
case e: IOException =>
logger.info(s"HBase is not available.")
false
}
if (!hbaseAvailable) {
// start HBase
executor.submit(new Runnable {
override def run(): Unit = {
logger.info(s"HMaster starting...")
val ts = System.currentTimeMillis()
val cwd = new File(".").getAbsolutePath
if (overwrite) {
val dataDir = new File(s"$cwd/storage/s2graph")
FileUtils.deleteDirectory(dataDir)
}
System.setProperty("proc_master", "")
System.setProperty("hbase.log.dir", s"$cwd/storage/s2graph/hbase/")
System.setProperty("hbase.log.file", s"$cwd/storage/s2graph/hbase.log")
System.setProperty("hbase.tmp.dir", s"$cwd/storage/s2graph/hbase/")
System.setProperty("hbase.home.dir", "")
System.setProperty("hbase.id.str", "s2graph")
System.setProperty("hbase.root.logger", "INFO,RFA")
org.apache.hadoop.hbase.master.HMaster.main(Array[String]("start"))
logger.info(s"HMaster startup finished: ${System.currentTimeMillis() - ts}")
}
})
}
executor
}
hbaseExecutor
}