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