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.
.
, : , â .
, .
- , 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-.
- : https://repo.labs.intellij.net/big-data-ide
- : org.jetbrains.ztools:ztools-spark-all:0.0.13
- JAR-: https://dl.bintray.com/jetbrains/zeppelin-dependencies/org/jetbrains/ztools/ztools-spark-all/0.0.13/ztools-spark-all-0.0.13.jar
ZTools , Gradle, JAR- Apache License 2.0.
Big Data Tools ZTools Zeppelin. â , .
- ZTools Zeppelin API;
- , â , Apache License 2.0;
- â , ;
- . " " Big Data Tools.