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
>