ZTools pour Apache Zeppelin

Zeppelin est un ordinateur portable interactif que les ingénieurs de données adorent. Il sait comment travailler avec Spark et est idéal pour l'analyse de données interactive.



Le projet a récemment atteint la version 0.9.0-preview2 et se développe activement, mais, néanmoins, beaucoup de choses ne sont toujours pas implémentées et attendent dans les coulisses.



Une telle chose est une API pour obtenir plus d'informations sur ce qui se passe à l'intérieur du notebook. D'une part, il existe une API qui résout complÚtement les problÚmes de gestion des ordinateurs portables de haut niveau. Mais si vous voulez quelque chose de non trivial, de mauvaises nouvelles.





Ce problÚme a été rencontré par les développeurs de Big Data Tools , un plugin pour IntelliJ IDEA qui fournit une intégration avec Spark, Hadoop et permet d'éditer et d'exécuter des notebooks dans Zeppelin. La possibilité de créer et de supprimer des ordinateurs portables n'est pas suffisante pour fonctionner pleinement dans l'EDI. Vous devez décharger tout un wagon d'informations qui vous permettront de faire des choses comme la saisie semi-automatique intelligente.



, API Zeppelin. , GitHub. , . -, , Zeppelin. -, - — , - . , API .



ZTools — , Zeppelin, API. "" GitHub Apache License 2.0. 90% Scala, — Java.



( , Scala REPL, Zeppelin).



, ZTools, Variables View Big Data Tools. IntelliJ Ultimate Edition, , , . ZTools , , .



Big Data Tools, ZTools. :





, ? ?



, , , - .



. - sql.DataFrame, !





.



ZTools. , .



:



, Zeppelin .



. ( GitHub), ( ).



: , , . , . , , Zeppelin.



, mitmproxy Wireshark. , — .



- Zeppelin — "Spark Basic Features".



mitmproxy , Zeppelin API /api/notebook ( ).





, . , ? , WebSocket?



Wireshark :





, , , JSON . .



- . Big Data Tools, IntelliJ IDEA, :





, .



-, . , :



%spark
// It is generated code for integration with Big Data Tools plugin
// Please DO NOT edit it.
import org.jetbrains.ztools.spark.Tools

Tools.init($intp, 3, true)
println(Tools.getEnv.toJsonObject.toString)
println("----")
println(Tools.getCatalogProvider("spark").toJson)"


, . ZTools, , GitHub.



.



  • bank bankText.
  • .


, : , — .



, .





  • , Zeppelin ZTools: , ZTools, ( ). Big Data Tools.
  • Tools. ZTools.


: ZTools



ZTools GitHub



: "scala-repl" "spark".



:



%spark
// It is generated code for integration with Big Data Tools plugin
// Please DO NOT edit it.
import org.jetbrains.ztools.spark.Tools

Tools.init($intp, 3, true)
println(Tools.getEnv.toJsonObject.toString)
println("----")
println(Tools.getCatalogProvider("spark").toJson)"


, . Catalog.listTables(), Catalog.listTables(), JSON .



, . Tools, VariablesView, . .



, , :



  @Test
  def testSimpleVarsAndCollections(): Unit = {
    withRepl { intp =>
      intp.eval("val x = 1")
      val view = intp.getVariablesView()
      assertNotNull(view)
      var json = view.toJsonObject
      println(json.toString(2))
      val x = json.getJSONObject("x")
      assertEquals(2, x.keySet.size)
      assertEquals(1, x.getInt("value"))
      assertEquals("Int", x.getString("type"))
      assertEquals(1, json.keySet.size)
}


Scala .



, ( ), Scala, — scala.tools.nsc.interpreter.



 def withRepl[T](body: Repl => T): T = {
    // ...
    val iLoop = new ILoop(None, new JPrintWriter(Console.out, true))
    iLoop.intp = new IMain(iLoop.settings)
    // ...
  }


ILoop — , IMain — . IMain interpret(code). .



:



trait VariablesView {
  def toJson: String

  def toJsonObject: JSONObject

  def toJsonObject(path: String, deep: Int): JSONObject

  def variables(): List[String]

  def valueOfTerm(id: String): Option[Any]

  def registerTypeHandler(handler: TypeHandler): VariablesView

  def typeOfExpression(id: String): String
}


. . Scala, iMain: \



override def variables(): List[String] =
  iMain.definedSymbolList.filter { x => x.isGetter }.map(_.name.toString).distinct


JSON, " " — . toJsonObject() , .



-, — 100 — 400 . , ( Big Data Tools ) . , , - .



ZTools Tools, . $intp, sc, spark, sqlContext, z engine. , .





  • ZTools Zeppelin API;
  • , ;
  • Zeppelin, Scala — . REPL ZTools. ZTools, - ;
  • , Tools, : 400 , 100 JSON.


:



, ZTools IntelliJ IDEA . GitHub.



, Java, JavaScript (, TypeScript) Node.js. HTTP Axios — .



-, - , “Spark Basic Features” .



const notes = await <em>axios</em>.get(NOTE_LIST_URL);

let noteId: string = null;
for (let item: Object of notes.data.body) {
   if ( item.path.indexOf('Spark Basic Features') >= 0 ) {
       noteId = item.id;
       break;
   }
}


, :



const PAR_TEXT = `%spark
import org.jetbrains.ztools.spark.Tools
Tools.init($intp, 3, true)
println(Tools.getEnv.toJsonObject.toString)
println("----")
println(Tools.getCatalogProvider("spark").toJson)`;


:



const CREATE_PAR_URL = `${Z_URL}/api/notebook/${noteId}/paragraph`;
const par: Object = await axios.post(CREATE_PAR_URL, {
   title: 'temp',
   text: PAR_TEXT,
   index: 0
});


:



const RUN_PAR_URL = `${Z_URL}/api/notebook/run/${noteId}/${parId}`;
await axios.post(RUN_PAR_URL);
 :

const INFO_PAR_URL = `${Z_URL}/api/notebook/${noteId}/paragraph/${parId}`;
const { data } = await axios.get(INFO_PAR_URL);


:



const DEL_PAR_URL = `${Z_URL}/api/notebook/${noteId}/paragraph/${parId}`;
await axios.delete(DEL_PAR_URL);


JSON:



const [varInfoData, dbInfoData] = (data.body.results.msg[0].data)
   .replace('\nimport org.jetbrains.ztools.spark.Tools\n', '')
   .split('\n----\n');
const varInfo = JSON.parse(varInfoData);
const dbInfo = JSON.parse(dbInfoData);


:



for (const [key, {type}] of Object.entries(varInfo)) {
   console.log(`${key} : ${type}`);
}


:



for (const [key, database] of Object.entries(dbInfo.databases)) {
   console.log(`Database: ${database.name} (${database.description})`);
   for (const table of database.tables) {
       const columnsJoined = table.columns.map(val => `${val.name}/${val.dataType}`).join(', ');
       Logger.direct(`${table.name} : [${columnsJoined}]`);
   }
}


, , .



:



Zeppelin — Zeppelin, ZTools.



, , , . . .



, ZTools , , Maven JAR-.





ZTools , Gradle, JAR- Apache License 2.0.



Big Data Tools ZTools Zeppelin. — , .





  • ZTools Zeppelin API;
  • , — , Apache License 2.0;
  • — , ;
  • . " " Big Data Tools.



All Articles