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
>>>>
>>>
>

Reply via email to