...
- Checkout and setup the latest version of Apache Hive from the Subversion or Git source code repository. For more details, see Getting Started with Hive. From this point onwards, the path to the Hive root directory will be referred to as HIVE_HOMEHIVE_SRC_ROOT.
Note title Using a tarball source release If you are compiling against source code contained in the tarball release package then HIVE_SRC_ROOT refers to the 'src' subdirectory.
Warning title The ODBC driver is broken on trunk! Currently the C++ Thrift client library that the ODBC driver depends on will not build on trunk. This issue is being tracked in HIVE-4433. If you are using trunk check the status of this ticket before proceeding.
- Build the Hive client by running the following command from HIVE_SRC_HOMEROOT. This will compile and copy the libraries and header files to
HIVE_SRC_HOMEROOT/build/odbc/
. Please keep in mind that all paths should be fully specified (no relative paths). If you encounter an "undefined reference to vtables
" error, make sure that you have specified the absolute path for thrift.home.
You can optionally force Hive client to compile into a non-native bit architecture by specifying the additional parameter (assuming you have the proper compilation libraries):Code Block $ ant compile-cpp -Dthrift.home=<THRIFT_HOME>
You can verify the entire Hive compilation by running the Hive test suite from HIVE_SRC_HOMEROOT. Specifying the argument '-Dthrift.home=<THRIFT_HOME>' will enable the tests for the Hive client. If you do NOT specify thrift.home, the Hive client tests will not be run and will just return successful.Code Block $ ant compile-cpp -Dthrift.home=<THRIFT_HOME> -Dword.size=<32 or 64>
You can specifically execute the Hive client tests by running the above command fromCode Block $ ant test -Dthrift.home=<THRIFT_HOME>
HIVE_HOMESRC_ROOT/odbc/
. NOTE: Hive client tests require that a local Hive Server be operating on port 10000.
1.#3 To install the Hive client libraries onto your machine, run the following command fromHIVE_HOMESRC_ROOT/odbc/
. NOTE: The install path defaults to/usr/local
. While there is no current way to change this default directory from the ant build process, a manual install may be performed by skipping the command below and copying out the contents ofHIVE_HOMESRC_ROOT/build/odbc/lib
andHIVE_SRC_HOMEROOT/build/odbc/include
into their local file system counterparts.
NOTE: The compiled static library, libhiveclient.a, requires linking with stdc++ as well as thrift libraries to function properly.Code Block $ sudo ant install -Dthrift.home=<THRIFT_HOME>
NOTE: Currently, there is no way to specify non-system library and header directories to the unixODBC build process. Thus, the Hive client libraries and headers MUST be installed to a default system location in order for the unixODBC build process to detect these files. This issue may be remedied in the future.unixODBC API Wrapper Build/Setup
After you have built and installed the Hive client, you can now install the unixODBC API wrapper: - In the unixODBC root directory, run the following command:
If you encounter the the errors: "Code Block $ ./configure --enable-gui=no --prefix=<unixODBC_INSTALL_DIR>
redefinition of 'struct _hist_entry'
" or "previous declaration of 'add_history' was here
" then re-execute the configure with the following command:
To force the compilation of the unixODBC API wrapper into a non-native bit architecture, modify the CC and CXX environment variables to include the appropriate flags. For example:Code Block $ ./configure --enable-gui=no --enable-readline=no --prefix=<unixODBC_INSTALL_DIR>
1.#2 Compile the unixODBC API wrapper with the following:Code Block $ CC="gcc -m32" CXX="g++ -m32" ./configure --enable-gui=no --enable-readline=no --prefix=<unixODBC_INSTALL_DIR>
1.#3 If you want to completely install unixODBC and all related drivers:Code Block $ make
- Run the following from the unixODBC root directory:
a.#2 If your system complains aboutCode Block $ sudo make install
undefined symbols
during unixODBC testing (such as withisql
orodbcinst
) after installation, try runningldconfig
to update your dynamic linker's runtime libraries.
1.#4 If you only want to obtain the Hive ODBC driver shared object library: - After compilation, the driver will be located at
<unixODBC_BUILD_DIR>/Drivers/hive/.libs/libodbchive.so.1.0.0
. - This may be copied to any other location as desired. Keep in mind that the Hive ODBC driver has a dependency on the Hive client shared object library:
libhiveclient.so
andlibthrift.so.0
. - You can manually install the unixODBC API wrapper by doing the following:
Code Block $ cp <unixODBC_BUILD_DIR>/Drivers/hive/.libs/libodbchive.so.1.0.0 <SYSTEM_INSTALL_DIR> $ cd <SYSTEM_INSTALL_DIR> $ ln -s libodbchive.so.1.0.0 libodbchive.so $ ldconfig
Connecting the Driver to a Driver Manager
This portion assumes that you have already built and installed both the Hive client and the unixODBC API wrapper shared libraries on the current machine. To connect the Hive ODBC driver to a previously installed Driver Manager (such as the one provided by unixODBC or a separate application): - Locate the odbc.ini file associated with the Driver Manager (DM):
- If you are installing the driver on the system DM, then you can run the following command to print the locations of DM configuration files.
a.#2 If you are installing the driver on an application DM, then you have to help yourself on this oneCode Block $ odbcinst -j unixODBC 2.2.14 DRIVERS............: /usr/local/etc/odbcinst.ini SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources USER DATA SOURCES..: /home/ehwang/.odbc.ini SQLULEN Size.......: 8 SQLLEN Size........: 8 SQLSETPOSIROW Size.: 8
. Hint: try looking in the installation directory of your application.
- If you are installing the driver on the system DM, then you can run the following command to print the locations of DM configuration files.
- Keep in mind that an application's DM can exist simultaneously with the system DM and will likely use its own configuration files, such as odbc.ini.
- Also, note that some applications do not have their own DMs and simply use the system DM.
...