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