Should be confirmed but yes, dDrillExplorer most likely makes use of iodbc
only and not unixODBC.
Regarding the unixODBC stuff, my guess is that libodbcinst.so is not in
your LD_LIBRARY_PATH. But you most likely have libodbcinst.so.1.
So, please give it a try changing your .mapr.drillodbc.ini :
# SimbaDM / unixODBC
ODBCInstLib=libodbcinst.so.1
You should then be able to use isql :
isql "Sample MapR Drill DSN 64"
Result being :
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| SCHEMA_NAME
|
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| INFORMATION_SCHEMA
|
| cp.default
|
| dfs.default
|
| dfs.root
|
| dfs.tmp
|
| sys
|
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
SQLRowCount returns -1
6 rows fetched
To investigate dynamic linking, you can use the following :
strace isql "Sample MapR Drill DSN 64"
This show where the libraries are actually searched at execution time.
2016-08-31 12:50 GMT+02:00 Nicolas Paris <[email protected]>:
> Krystal, Sékine, thanks for your help. Pease find more informations :
>
> *$dpkg -s unixodbc*
> Package: unixodbc
> Status: install ok installed
> Priority: optional
> Section: database
> Installed-Size: 111
> Maintainer: Ubuntu Developers <[email protected]>
> Architecture: amd64
> Multi-Arch: foreign
> Version: 2.2.14p2-5ubuntu5
> Depends: libc6 (>= 2.14), libreadline6 (>= 6.0), odbcinst1debian2 (>=
> 2.2.11-3), libodbc1 (>= 2.2.14p2-3)
> Conflicts: unixodbc-bin (<< 2.2.4-1)
>
> *$locate libodbcinst*
> /usr/lib/x86_64-linux-gnu/libodbcinst.a
> /usr/lib/x86_64-linux-gnu/libodbcinst.so
> /usr/lib/x86_64-linux-gnu/libodbcinst.so.1
> /usr/lib/x86_64-linux-gnu/libodbcinst.so.1.0.0
>
> *$echo $LD_LIBRARY_PATH *
> /usr/local/lib:/usr/lib/:/opt/mapr/drillodbc/lib/64/:/usr/
> lib/x86_64-linux-gnu/
>
> *$head -100 /etc/mapr.drillodbc.ini*
> [Driver]
> DisableAsync=0
> DriverManagerEncoding=UTF-16
> ErrorMessagesPath=/opt/mapr/drillodbc/ErrorMessages
> LogLevel=2
> LogPath=/tmp/drilllog/
> SwapFilePath=/tmp
> # SimbaDM / unixODBC
> ODBCInstLib=libodbcinst.so
>
> *$sudo ldconfig -v | grep "odbc"*
> /sbin/ldconfig.real: Ne peut évaluer par stat /lib/i686-linux-gnu: Aucun
> fichier ou dossier de ce type
> /sbin/ldconfig.real: Ne peut évaluer par stat /usr/lib/i686-linux-gnu:
> Aucun fichier ou dossier de ce type
> /sbin/ldconfig.real: Chemin « /lib/x86_64-linux-gnu » donné plus d'une fois
> /sbin/ldconfig.real: Chemin « /usr/lib/x86_64-linux-gnu » donné plus d'une
> fois
> /sbin/ldconfig.real: /lib/i386-linux-gnu/ld-2.19.so is the dynamic linker,
> ignoring
>
> /sbin/ldconfig.real: /lib/x86_64-linux-gnu/ld-2.19.so is the dynamic
> linker, ignoring
>
> libodbccr.so.1 -> libodbccr.so.1.0.0
> libodbc.so.1 -> libodbc.so.1.0.0
> libodbcinst.so.1 -> libodbcinst.so.1.0.0
>
> *$/opt/mapr/drillodbc/DrillExplorer/DrillExplorer*
> Java Classpath:
> /opt/mapr/drillodbc/DrillExplorer/app/DrillExplorer.jar:libs/hadoop-
> common-0.23.9.jar:libs/jna.jar:libs/json-20141113.jar:
> resources/Version.txt:resources/images/cftable.ico:
> resources/images/cftable2.png:resources/images/csv.png:
> resources/images/database.ico:resources/images/database.png:
> resources/images/file.ico:resources/images/folder.ico:
> resources/images/json.png:resources/images/parquet.png:
> resources/images/table.ico:resources/images/tsv.png:
> resources/images/view.ico
> Exception in thread "JavaFX Application Thread" java.lang.RuntimeException:
> java.lang.reflect.InvocationTargetException
> at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1762)
> at
> javafx.fxml.FXMLLoader$ControllerMethodEventHandler.
> handle(FXMLLoader.java:1645)
> at
> com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(
> CompositeEventHandler.java:86)
> at
> com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(
> EventHandlerManager.java:238)
> at
> com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(
> EventHandlerManager.java:191)
> at
> com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(
> CompositeEventDispatcher.java:59)
> at
> com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(
> BasicEventDispatcher.java:58)
> at
> com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(
> EventDispatchChainImpl.java:114)
> at
> com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(
> BasicEventDispatcher.java:56)
> at
> com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(
> EventDispatchChainImpl.java:114)
> at
> com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(
> BasicEventDispatcher.java:56)
> at
> com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(
> EventDispatchChainImpl.java:114)
> at
> com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(
> BasicEventDispatcher.java:56)
> at
> com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(
> EventDispatchChainImpl.java:114)
> at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
> at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
> at javafx.event.Event.fireEvent(Event.java:198)
> at javafx.scene.Node.fireEvent(Node.java:8216)
> at javafx.scene.control.Button.fire(Button.java:185)
> at
> com.sun.javafx.scene.control.behavior.ButtonBehavior.
> mouseReleased(ButtonBehavior.java:182)
> at
> com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.
> handle(BehaviorSkinBase.java:96)
> at
> com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.
> handle(BehaviorSkinBase.java:89)
> at
> com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.
> handleBubblingEvent(CompositeEventHandler.java:218)
> at
> com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(
> CompositeEventHandler.java:80)
> at
> com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(
> EventHandlerManager.java:238)
> at
> com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(
> EventHandlerManager.java:191)
> at
> com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(
> CompositeEventDispatcher.java:59)
> at
> com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(
> BasicEventDispatcher.java:58)
> at
> com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(
> EventDispatchChainImpl.java:114)
> at
> com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(
> BasicEventDispatcher.java:56)
> at
> com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(
> EventDispatchChainImpl.java:114)
> at
> com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(
> BasicEventDispatcher.java:56)
> at
> com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(
> EventDispatchChainImpl.java:114)
> at
> com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(
> BasicEventDispatcher.java:56)
> at
> com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(
> EventDispatchChainImpl.java:114)
> at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
> at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
> at javafx.event.Event.fireEvent(Event.java:198)
> at javafx.scene.Scene$MouseHandler.process(Scene.java:3724)
> at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3452)
> at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1728)
> at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2461)
> at
> com.sun.javafx.tk.quantum.GlassViewEventHandler$
> MouseEventNotification.run(GlassViewEventHandler.java:348)
> at
> com.sun.javafx.tk.quantum.GlassViewEventHandler$
> MouseEventNotification.run(GlassViewEventHandler.java:273)
> at java.security.AccessController.doPrivileged(Native Method)
> at
> com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(
> GlassViewEventHandler.java:382)
> at com.sun.glass.ui.View.handleMouseEvent(View.java:553)
> at com.sun.glass.ui.View.notifyMouse(View.java:925)
> at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
> at
> com.sun.glass.ui.gtk.GtkApplication.lambda$null$45(
> GtkApplication.java:126)
> at com.sun.glass.ui.gtk.GtkApplication$$Lambda$43/
> 202720134.run(Unknown
> Source)
> at java.lang.Thread.run(Thread.java:745)
> Caused by: java.lang.reflect.InvocationTargetException
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
> 62)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(
> DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:483)
> at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
> at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(
> DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:483)
> at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
> at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1759)
> ... 51 more
> *Caused by: java.lang.UnsatisfiedLinkError: Unable to load library
> 'iodbc':
> Native library (linux-x86-64/libiodbc.so)* not found in resource path
> ([file:/opt/mapr/drillodbc/DrillExplorer/app/DrillExplorer.jar,
> file:/opt/mapr/drillodbc/DrillExplorer/app/libs/hadoop-common-0.23.9.jar,
> file:/opt/mapr/drillodbc/DrillExplorer/app/libs/jna.jar,
> file:/opt/mapr/drillodbc/DrillExplorer/app/libs/json-20141113.jar,
> file:/opt/mapr/drillodbc/DrillExplorer/app/resources/Version.txt,
> file:/opt/mapr/drillodbc/DrillExplorer/app/resources/images/cftable.ico,
> file:/opt/mapr/drillodbc/DrillExplorer/app/resources/images/cftable2.png,
> file:/opt/mapr/drillodbc/DrillExplorer/app/resources/images/csv.png,
> file:/opt/mapr/drillodbc/DrillExplorer/app/resources/images/database.ico,
> file:/opt/mapr/drillodbc/DrillExplorer/app/resources/images/database.png,
> file:/opt/mapr/drillodbc/DrillExplorer/app/resources/images/file.ico,
> file:/opt/mapr/drillodbc/DrillExplorer/app/resources/images/folder.ico,
> file:/opt/mapr/drillodbc/DrillExplorer/app/resources/images/json.png,
> file:/opt/mapr/drillodbc/DrillExplorer/app/resources/images/parquet.png,
> file:/opt/mapr/drillodbc/DrillExplorer/app/resources/images/table.ico,
> file:/opt/mapr/drillodbc/DrillExplorer/app/resources/images/tsv.png,
> file:/opt/mapr/drillodbc/DrillExplorer/app/resources/images/view.ico])
> at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:271)
> at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:398)
> at com.sun.jna.Library$Handler.<init>(Library.java:147)
> at com.sun.jna.Native.loadLibrary(Native.java:414)
> at com.sun.jna.Native.loadLibrary(Native.java:393)
> at com.simba.odbc.ODBCConnection$DrillODBC.<clinit>(Unknown Source)
> at com.simba.odbc.ODBCUtils.getDataSources(Unknown Source)
> at com.simba.drill.DRConnection.getDataSources(Unknown Source)
> at
> com.simba.schemaexplorer.ConnectionPaneController.populateDSNList(Unknown
> Source)
> at com.simba.schemaexplorer.SchemaExplorerController.connect(Unknown
> Source)
>
>
>
> Le mar. 30 août 2016 à 22:58, Sékine Coulibaly <[email protected]> a
> écrit :
>
> > Nicolas,
> >
> > Additionally to what Krystal pointed at, on Linux platforms you can try
> > this :
> > sudo ldconfig -v | grep "odbc"
> >
> > This will yield a non-empty result if dynamic linker can find the dynamic
> > library related to odbc. If nothing is returned, issuing the following
> > command will help refresh ldconfig's cache :
> > sudo ldconfig
> >
> > Sekine
> >
> > 2016-08-30 19:18 GMT+02:00 Krystal Nguyen <[email protected]>:
> >
> > > Hi Nicolas,
> > >
> > > ODBC should work with unixODBC driver manager. Does the
> > "libodbcinst.so.1"
> > > library file exists on your node and it's path specified in the
> > > "LD_LIBRARY_PATH" variable. I am using unixODBC-2.2.14 it is working
> > fine
> > > for me. I use the following setting in mapr.drillodbc.ini:
> > >
> > > # SimbaDM / unixODBC
> > > ODBCInstLib=libodbcinst.so
> > >
> > > Thanks,
> > > Krystal
> > >
> > > On Tue, Aug 30, 2016 at 10:07 AM, Nicolas Paris <[email protected]>
> > > wrote:
> > >
> > > > Hello,
> > > >
> > > > I am testing ODBC connexion thought Drill Explorer.
> > > > It works ok with iodbc installed.
> > > >
> > > > However I cannot make it working with unixODBC.
> > > > I get this error :
> > > > Unable to load library 'iodbc': Native library
> > > (linux-x86-64/libiodbc.so)
> > > >
> > > > I have specified in the mapr.drillodbc.ini to use unixODBC
> > > > ODBCInstLib=libodbcinst.so.1
> > > >
> > > > Does it mean iodbc is the only working client ?
> > > > Or does it mean Drill Explorer only works with iodbc ?
> > > >
> > > > Thanks by advance
> > > >
> > >
> >
>