And have you added your interpreter classname to 'zeppelin.interpreters' property in conf/zeppelin-site.xml and/or
'ZEPPELIN_INTERPRETERS' conf var in zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java ? That'll make your interpreter available in 'Interpreter' menu. Thanks, moon On Thu, Apr 23, 2015 at 5:47 PM Daniel Haviv < [email protected]> wrote: > 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 >>>> >>> >
