Hi, No I haven't because it doesn't appear under the interpreter drop down menu.
Thanks, Daniel On Thu, Apr 23, 2015 at 8:32 AM, moon soo Lee <[email protected]> wrote: > Hi, > > You have created profile setting for your presto interpreter in > 'interpreter' menu and bind it in your particular notebook. right? > If so, could you see any message in log file > ZEPPELIN_HOME/logs/zeppelin-interpreter-presto-*.log > ? > > Thanks! > moon > > > > On Thu, Apr 23, 2015 at 2:12 PM IT CTO <[email protected]> wrote: > >> Nice job, happy to see you here with the presto interperter. >> You should try posting to dev alias and not user >> Eran >> >> On יום ד׳, 22 באפר 2015, 14:28 Daniel Haviv < >> [email protected]> wrote: >> >>> Hi, >>> I wrote a simple Interpreter, basically just changing Hive's to Presto >>> but it doesn't get loaded for some reason on startup. >>> I can see it's getting picked up on the log: >>> zeppelin-root-hdname.todacell.com.log: INFO [2015-04-22 11:16:04,272] >>> ({main} InterpreterFactory.java[init]:112) - Reading >>> /tmp/zeppelin/incubator-zeppelin-master/interpreter/presto >>> >>> so I'm guessing it's something with my code (Can be seen in a readable >>> version here http://pastebin.com/1VqCMEgS) : >>> package org.apache.zeppelin.presto; >>> >>> import java.sql.*; >>> import java.util.List; >>> import java.util.Properties; >>> >>> import org.apache.zeppelin.interpreter.*; >>> import org.apache.commons.lang.StringUtils; >>> import org.slf4j.Logger; >>> import org.slf4j.LoggerFactory; >>> >>> import org.apache.zeppelin.interpreter.InterpreterResult.Code; >>> import org.apache.zeppelin.scheduler.Scheduler; >>> import org.apache.zeppelin.scheduler.SchedulerFactory; >>> >>> /** >>> * Presto interpreter for Zeppelin. >>> */ >>> public class PrestoInterpreter extends Interpreter { >>> Logger logger = LoggerFactory.getLogger(PrestoInterpreter.class); >>> int commandTimeOut = 600000; >>> >>> static final String PRESTOSERVER_URL = "presto.url"; >>> static final String PRESTOSERVER_USER = "presto.user"; >>> static final String PRESTOSERVER_PASSWORD = "presto.password"; >>> >>> static { >>> Interpreter.register( >>> "presto", >>> "presto", >>> PrestoInterpreter.class.getName(), >>> new InterpreterPropertyBuilder() >>> .add(PRESTOSERVER_URL, "jdbc:presto://localhost:8089", "The URL >>> for Presto") >>> .add(PRESTOSERVER_USER, "Presto", "The Presto user") >>> .add(PRESTOSERVER_PASSWORD, "", "The password for the Presto >>> user").build()); >>> } >>> >>> public PrestoInterpreter(Properties property) { >>> super(property); >>> } >>> >>> Connection jdbcConnection; >>> Exception exceptionOnConnect; >>> >>> //Test only method >>> public Connection getJdbcConnection() >>> throws SQLException { >>> String url = getProperty(PRESTOSERVER_URL); >>> String user = getProperty(PRESTOSERVER_USER); >>> String password = getProperty(PRESTOSERVER_PASSWORD); >>> >>> return DriverManager.getConnection(url, user, password); >>> } >>> >>> @Override >>> public void open() { >>> logger.info("Jdbc open connection called!"); >>> try { >>> String driverName = "org.apache.Presto.jdbc.PrestoDriver"; >>> Class.forName(driverName); >>> } catch (ClassNotFoundException e) { >>> logger.error("Can not open connection", e); >>> exceptionOnConnect = e; >>> return; >>> } >>> try { >>> jdbcConnection = getJdbcConnection(); >>> exceptionOnConnect = null; >>> logger.info("Successfully created Jdbc connection"); >>> } >>> catch (SQLException e) { >>> logger.error("Cannot open connection", e); >>> exceptionOnConnect = e; >>> } >>> } >>> >>> @Override >>> public void close() { >>> try { >>> if (jdbcConnection != null) { >>> jdbcConnection.close(); >>> } >>> } >>> catch (SQLException e) { >>> logger.error("Cannot close connection", e); >>> } >>> finally { >>> jdbcConnection = null; >>> exceptionOnConnect = null; >>> } >>> } >>> >>> Statement currentStatement; >>> private InterpreterResult executeSql(String sql) { >>> try { >>> if (exceptionOnConnect != null) { >>> return new InterpreterResult(Code.ERROR, >>> exceptionOnConnect.getMessage()); >>> } >>> currentStatement = jdbcConnection.createStatement(); >>> StringBuilder msg = null; >>> if (StringUtils.containsIgnoreCase(sql, "EXPLAIN ")) { >>> //return the explain as text, make this visual explain later >>> msg = new StringBuilder(); >>> } >>> else { >>> msg = new StringBuilder("%table "); >>> } >>> ResultSet res = currentStatement.executeQuery(sql); >>> try { >>> ResultSetMetaData md = res.getMetaData(); >>> for (int i = 1; i < md.getColumnCount() + 1; i++) { >>> if (i == 1) { >>> msg.append(md.getColumnName(i)); >>> } else { >>> msg.append("\t" + md.getColumnName(i)); >>> } >>> } >>> msg.append("\n"); >>> while (res.next()) { >>> for (int i = 1; i < md.getColumnCount() + 1; i++) { >>> msg.append(res.getString(i) + "\t"); >>> } >>> msg.append("\n"); >>> } >>> } >>> finally { >>> try { >>> res.close(); >>> currentStatement.close(); >>> } >>> finally { >>> currentStatement = null; >>> } >>> } >>> >>> InterpreterResult rett = new InterpreterResult(Code.SUCCESS, >>> msg.toString()); >>> return rett; >>> } >>> catch (SQLException ex) { >>> logger.error("Can not run " + sql, ex); >>> return new InterpreterResult(Code.ERROR, ex.getMessage()); >>> } >>> } >>> >>> @Override >>> public InterpreterResult interpret(String cmd, InterpreterContext >>> contextInterpreter) { >>> logger.info("Run SQL command '" + cmd + "'"); >>> return executeSql(cmd); >>> } >>> >>> @Override >>> public void cancel(InterpreterContext context) { >>> if (currentStatement != null) { >>> try { >>> currentStatement.cancel(); >>> } >>> catch (SQLException ex) { >>> } >>> finally { >>> currentStatement = null; >>> } >>> } >>> } >>> >>> @Override >>> public FormType getFormType() { >>> return FormType.SIMPLE; >>> } >>> >>> @Override >>> public int getProgress(InterpreterContext context) { >>> return 0; >>> } >>> >>> @Override >>> public Scheduler getScheduler() { >>> return SchedulerFactory.singleton().createOrGetFIFOScheduler( >>> PrestoInterpreter.class.getName() + this.hashCode()); >>> } >>> >>> @Override >>> public List<String> completion(String buf, int cursor) { >>> return null; >>> } >>> >>> } >>> >>> Thanks, >>> Daniel >>> >>
