From 3c9c6214332b68b01d6c7fa0148c50cbdaefada8 Mon Sep 17 00:00:00 2001 From: judy0131 Date: Tue, 7 Apr 2020 17:53:49 +0800 Subject: [PATCH] add ExecuteScala stop --- piflow-bundle/config.properties | 6 +- piflow-bundle/server.ip | 1 + .../resources/{ => flow/script}/scala.json | 3 +- .../src/main/resources/icon/script/scala.jpg | Bin 0 -> 34675 bytes .../piflow/bundle/script/ExecuteScala.scala | 67 ++++++++++++++++++ .../scala/cn/piflow/conf/util/MapUtil.scala | 1 + .../bundle/script/ExecuteScalaTest.scala | 58 +++++++++++++++ 7 files changed, 131 insertions(+), 5 deletions(-) create mode 100644 piflow-bundle/server.ip rename piflow-bundle/src/main/resources/{ => flow/script}/scala.json (72%) create mode 100644 piflow-bundle/src/main/resources/icon/script/scala.jpg create mode 100644 piflow-bundle/src/main/scala/cn/piflow/bundle/script/ExecuteScala.scala create mode 100644 piflow-bundle/src/test/scala/cn/piflow/bundle/script/ExecuteScalaTest.scala diff --git a/piflow-bundle/config.properties b/piflow-bundle/config.properties index 7dfb143..4c1da0c 100644 --- a/piflow-bundle/config.properties +++ b/piflow-bundle/config.properties @@ -2,12 +2,12 @@ spark.master=yarn spark.deploy.mode=cluster #hdfs default file system -fs.defaultFS=hdfs://192.168.3.138:8020 +fs.defaultFS=hdfs://10.0.88.13:9000 #yarn resourcemanager hostname -yarn.resourcemanager.hostname=192.168.3.139 +yarn.resourcemanager.hostname=10.0.88.13 #if you want to use hive, set hive metastore uris -hive.metastore.uris=thrift://192.168.3.140:9083 +hive.metastore.uris=thrift://10.0.88.13:9083 #show data in log, set 0 if you do not show the logs data.show=10 diff --git a/piflow-bundle/server.ip b/piflow-bundle/server.ip new file mode 100644 index 0000000..39633ba --- /dev/null +++ b/piflow-bundle/server.ip @@ -0,0 +1 @@ +server.ip=10.0.85.83 \ No newline at end of file diff --git a/piflow-bundle/src/main/resources/scala.json b/piflow-bundle/src/main/resources/flow/script/scala.json similarity index 72% rename from piflow-bundle/src/main/resources/scala.json rename to piflow-bundle/src/main/resources/flow/script/scala.json index 38ce2c0..05b3624 100644 --- a/piflow-bundle/src/main/resources/scala.json +++ b/piflow-bundle/src/main/resources/flow/script/scala.json @@ -19,8 +19,7 @@ "name":"ExecuteScala", "bundle":"cn.piflow.bundle.script.ExecuteScala", "properties":{ - "script":"import sys\nimport os\n\nimport numpy as np\nfrom scipy import linalg\nimport pandas as pd\n\nimport matplotlib\nmatplotlib.use('Agg')\n\n\ndef listFunction(dictInfo):\n\n return dictInfo", - "execFunction": "listFunction" + "script":"val t = 3 + 5 \n println(\" result = \" + t)" } } ], diff --git a/piflow-bundle/src/main/resources/icon/script/scala.jpg b/piflow-bundle/src/main/resources/icon/script/scala.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f7ade055626264f322f57f0eaf8e8361e3cb04d9 GIT binary patch literal 34675 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 None case Some(x:String) => x + case Some(x:Integer) => x case Some(x:List[String]) => x case Some(x:List[Map[String, String]]) => x case Some(x:Map[String, Any]) => x diff --git a/piflow-bundle/src/test/scala/cn/piflow/bundle/script/ExecuteScalaTest.scala b/piflow-bundle/src/test/scala/cn/piflow/bundle/script/ExecuteScalaTest.scala new file mode 100644 index 0000000..896e52f --- /dev/null +++ b/piflow-bundle/src/test/scala/cn/piflow/bundle/script/ExecuteScalaTest.scala @@ -0,0 +1,58 @@ +package cn.piflow.bundle.script + +import java.net.InetAddress + +import cn.piflow.Runner +import cn.piflow.conf.bean.FlowBean +import cn.piflow.conf.util.{FileUtil, OptionUtil} +import cn.piflow.util.{PropertyUtil, ServerIpUtil} +import org.apache.spark.sql.SparkSession +import org.h2.tools.Server +import org.junit.Test + +import scala.util.parsing.json.JSON + +class ExecuteScalaTest { + + @Test + def testFlow(): Unit ={ + + //parse flow json + val file = "src/main/resources/flow/script/scala.json" + val flowJsonStr = FileUtil.fileReader(file) + val map = OptionUtil.getAny(JSON.parseFull(flowJsonStr)).asInstanceOf[Map[String, Any]] + println(map) + + //create flow + val flowBean = FlowBean(map) + val flow = flowBean.constructFlow() + + + val ip = InetAddress.getLocalHost.getHostAddress + cn.piflow.util.FileUtil.writeFile("server.ip=" + ip, ServerIpUtil.getServerIpFile()) + val h2Server = Server.createTcpServer("-tcp", "-tcpAllowOthers", "-tcpPort","50001").start() + //execute flow + val spark = SparkSession.builder() + .master("local[12]") + .appName("hive") + .config("spark.driver.memory", "4g") + .config("spark.executor.memory", "8g") + .config("spark.cores.max", "8") + .config("hive.metastore.uris",PropertyUtil.getPropertyValue("hive.metastore.uris")) + .enableHiveSupport() + .getOrCreate() + + val process = Runner.create() + .bind(classOf[SparkSession].getName, spark) + .bind("checkpoint.path", "") + .bind("debug.path","") + .start(flow); + + process.awaitTermination(); + val pid = process.pid(); + println(pid + "!!!!!!!!!!!!!!!!!!!!!") + spark.close(); + } + + +}