You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@zeppelin.apache.org by Daniel Haviv <da...@veracity-group.com> on 2015/04/22 13:27:17 UTC

Custom Interpreter not loaded on startup

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

Re: Custom Interpreter not loaded on startup

Posted by Daniel Haviv <da...@veracity-group.com>.
It was indeed a typo in the configuration.

Thanks you!

On Sat, Apr 25, 2015 at 2:02 AM, moon soo Lee <mo...@apache.org> wrote:

> 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 <
> daniel.haviv@veracity-group.com> 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 <mo...@apache.org> 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 <go...@gmail.com> 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 <
>>>> daniel.haviv@veracity-group.com> 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
>>>>>
>>>>
>>

Re: Custom Interpreter not loaded on startup

Posted by moon soo Lee <mo...@apache.org>.
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 <
daniel.haviv@veracity-group.com> 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 <mo...@apache.org> 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 <go...@gmail.com> 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 <
>>> daniel.haviv@veracity-group.com> 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
>>>>
>>>
>

Re: Custom Interpreter not loaded on startup

Posted by Daniel Haviv <da...@veracity-group.com>.
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 <mo...@apache.org> 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 <go...@gmail.com> 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 <
>> daniel.haviv@veracity-group.com> 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
>>>
>>

Re: Custom Interpreter not loaded on startup

Posted by moon soo Lee <mo...@apache.org>.
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 <go...@gmail.com> 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 <
> daniel.haviv@veracity-group.com> 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
>>
>

Re: Custom Interpreter not loaded on startup

Posted by IT CTO <go...@gmail.com>.
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 <da...@veracity-group.com>
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
>