Consultando Impala y Hive desde Oracle usando un gateway heterogeneo ODBC
Introducción
En estos días la propagación de tecnologías big data a través de las organizaciones se ha convertido en un hecho irrefutable. El problema de integración con sistemas heredados debe ser abordado de alguna manera. Existen varias formas de conectar por ejemplo Oracle u otros sabores de RDBMS con los ecosistemas de big data, métodos como conectores dedicados, ETL, y algunos otros personalizados. El siguiente articulo vamos a demostrar un método simple para conectar y consultar desde una base de datos Oracle directamente hacia Apache Hive y Cloudera Impala utilizando un gateway heterogéneo ODBC. Los gateway heterogéneos fueron desarrollados por Oracle para dirigir y traducir la conectividad directa desde bases de datos non-Oracle hacia bases de datos Oracle. Existen gateways especializados sujetos a licencias y el ODBC genérico que es gratis. El gateway heterogéneo ODBC es un gateway genérico que puede ser utilizado prácticamente con cualquier fuente de datos que provea una funcionalidad de driver ODBC.
Apache Hive es un framework de data warehouse construido sobre Hadoop utilizado principalmente para análisis de datos. Utiliza un lenguaje de consultas llamado HiveQL. Todas las consultas son transformadas en jobs Mapreduce y ejecutados después en Hadoop. Carece de soporte de transacciones y posee varias limitaciones. Para más información sobre Hive puedes visitar https://hive.apache.org.
Cloudera Impala es un framework más elaborado, que ha comenzado a obtener un mayor apoyo y aceptación por mas y más proveedores como Amazon, Oracle, MapR y otros. Es implementado como un Motor de consulta de procesamiento paralelo masivo con compatibilidad con SQL ANSI, ofreciendo baja latencia eliminando las operaciones de Mapreduce. También tiene soporte para diferentes formatos de archivo. Para conocer más sobre Impala puedes visitar
http://www.cloudera.com/documentation/enterprise/latest/topics/impala.html.
Apache Hive es un framework de data warehouse construido sobre Hadoop utilizado principalmente para análisis de datos. Utiliza un lenguaje de consultas llamado HiveQL. Todas las consultas son transformadas en jobs Mapreduce y ejecutados después en Hadoop. Carece de soporte de transacciones y posee varias limitaciones. Para más información sobre Hive puedes visitar https://hive.apache.org.
Cloudera Impala es un framework más elaborado, que ha comenzado a obtener un mayor apoyo y aceptación por mas y más proveedores como Amazon, Oracle, MapR y otros. Es implementado como un Motor de consulta de procesamiento paralelo masivo con compatibilidad con SQL ANSI, ofreciendo baja latencia eliminando las operaciones de Mapreduce. También tiene soporte para diferentes formatos de archivo. Para conocer más sobre Impala puedes visitar
http://www.cloudera.com/documentation/enterprise/latest/topics/impala.html.
Preparación del ambiente
Oracle server
Sistema Operativo: Oracle Virtual Box corriendo OEL 6.5
Database server: Oracle Enterprise Edition Ver. 12.1.0.2.0
Hostname: Node1
IP address: 192.168.1.20
Database server: Oracle Enterprise Edition Ver. 12.1.0.2.0
Hostname: Node1
IP address: 192.168.1.20
Cloudera QuickStart
Sistema Operativo: Oracle Virtual Box corriendo CentOS 6.7
Cloudera version: 5.7
Hostname: Cloudera
IP address: 192.168.1.88
Para la instalación del ambiente de Cloudera utilizaremos una imagen de Cloudera Quickstart que puede ser descargada desde http://www.cloudera.com/downloads/quickstart_vms/5-7.html. Las tablas Hive utilizadas en este articulo son creadas de acuerdo al tutorial de Cloudera que podemos encontrar aquí http://www.cloudera.com/developers/get-started-with-hadoop-tutorial/exercise-1.html.
Cloudera version: 5.7
Hostname: Cloudera
IP address: 192.168.1.88
Para la instalación del ambiente de Cloudera utilizaremos una imagen de Cloudera Quickstart que puede ser descargada desde http://www.cloudera.com/downloads/quickstart_vms/5-7.html. Las tablas Hive utilizadas en este articulo son creadas de acuerdo al tutorial de Cloudera que podemos encontrar aquí http://www.cloudera.com/developers/get-started-with-hadoop-tutorial/exercise-1.html.
Instalando driver ODBC de Cloudera Hive e Impala
Como prerrequisito para instalar el driver ODBC de Cloudera Hive e Impala necesitamos instalar unixODBC o iODBC. Hemos optado por unixODBC como se muestra:
[root@node1 etc]# yum install unixODBC Loaded plugins: refresh-packagekit, security .......................................................................................................... Setting up Install Process Resolving Dependencies --> Running transaction check --> Package unixODBC.x86_64 0:2.2.14-14.el6 will be installed --> Finished Dependency ResolutionDependencies Resolved ==================================================================Package Arch Version Repository Size ================================================================== Installing: unixODBC x86_64 2.2.14-14.el6 ol6_latest 377 kTransaction Summary ================================================================== Install 1 Package(s)Total download size: 377 k Installed size: 1.1 M Is this ok [y/N]: y Downloading Packages: unixODBC-2.2.14-14.el6.x86_64.rpm …....................................................................................... A continuación, descarga el driver ODBC de Cloudera Hive desde la siguiente dirección: http://www.cloudera.com/downloads/connectors/hive/odbc/2-5-12.html
Como usuario root ejecuta el siguiente comando para instalar el driver ODBC de Cloudera Hive descargado en el paso anterior:
[root@node1 kit]# rpm -Uhv ClouderaHiveODBC-2.5.19.1004-1.el6.x86_64.rpm Preparing... ########################################### [100%] 1:ClouderaHiveODBC ########################################### [100%] [root@node1 kit]#
Descarga el driver ODBC de Cloudera Impala desde la siguiente dirección:
http://www.cloudera.com/downloads/connectors/impala/odbc/2-5-22.html
http://www.cloudera.com/downloads/connectors/impala/odbc/2-5-22.html
Como usuario root ejecuta el siguiente comando para instalar el driver ODBC de Cloudera Impala descargado en el paso anterior:
[root@node1 kit]# rpm -Uhv ClouderaImpalaODBC-2.5.33.1004-1.el6.x86_64.rpm Preparing... ###################### [100%] 1:ClouderaImpalaODBC ###################### [100%] [root@node1 kit]#
Configurando el driver ODBC de Clouder Hive
El directorio de instalación del driver estará ubicado en /opt/cloudera/hiveodbc. En el directorio /opt/cloudera/hiveodbc/Setup encontraremos una configuración de ejemplo que podemos utilizar con algunas modificaciones para realizar nuestra instalación. Crea el directorio /usr/local/odbc como usuario root, este directorio será utilizado como ubicación del archivo odbcinst.ini:
[root@node1 ~]# mkdir -p /usr/local/odbc
[root@node1 ~]# mkdir -p /usr/local/odbc
Copia el archive odbc.ini en el directorio /home/oracle como se muestra:
[root@node1 Setup]# cp odbc.ini /home/oracle
A continuación, copia el archive cloudera.hiveodbc.ini desde el directorio /opt/cloudera/hiveodbc/lib/64 hacia el directorio /etc como se muestra:
[root@node1 64]# cp cloudera.hiveodbc.ini /etc
A continuación, configuraremos las variables de ambiente para el driver ODBC de Cloudera Hive. Abre el archivo /home/oracle/.bash_profile con algún editor de texto (nosotros utilizaremos vi) y añade las líneas siguientes (marcadas con negrita) como se muestra:
[root@node1 Setup]# cp odbc.ini /home/oracle
A continuación, copia el archive cloudera.hiveodbc.ini desde el directorio /opt/cloudera/hiveodbc/lib/64 hacia el directorio /etc como se muestra:
[root@node1 64]# cp cloudera.hiveodbc.ini /etc
A continuación, configuraremos las variables de ambiente para el driver ODBC de Cloudera Hive. Abre el archivo /home/oracle/.bash_profile con algún editor de texto (nosotros utilizaremos vi) y añade las líneas siguientes (marcadas con negrita) como se muestra:
[oracle@node1 ~]$ vi .bash_profile
# .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
export ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1
export ORACLE_SID=ORCL
export ODBCINI=~/odbc.ini
export ODBCSYSINI=/usr/local/odbc
export CLOUDERAHIVEINI=/etc/cloudera.hiveodbc.ini
PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$LIBRARY_PATH:$ORACLE_HOME/lib
export ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1
export ORACLE_SID=ORCL
export ODBCINI=~/odbc.ini
export ODBCSYSINI=/usr/local/odbc
export CLOUDERAHIVEINI=/etc/cloudera.hiveodbc.ini
PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$LIBRARY_PATH:$ORACLE_HOME/lib
Guarda los cambios en el archivo y ejecuta el comando source para establecer las variables definidas:
[oracle@node1 ~]$ source .bash_profile
[oracle@node1 ~]$ source .bash_profile
El archivo odbc.ini copiado en /home/oracle contiene dos ejemplos para configuraciones de nombres de fuentes de datos (Data Source Names DSN) para versiones de driver de 32 y 64 bits. Todos los parámetros son explicados con comentarios en los archivos de ejemplo, los comentarios han sido omitidos en la siguiente lista. Para más información sobre estos parámetros puedes ver la guía completa en la siguiente dirección http://www.cloudera.com/documentation/other/connectors/hive-odbc/latest.html.
Cambiaremos solo el valor de host, port y el valor de UID para el driver de 64 bits [Cloudera ODBC Driver for Apache Hive (64-bit) DSN] y renombraremos el data source a HIVEDSN como se muestra:
[HiveDSN]
Description = Cloudera ODBC Driver for Apache Hive (64-bit) DSN
Driver = /opt/cloudera/hiveodbc/lib/64/libclouderahiveodbc64.so
HOST = 192.168.1.88
PORT = 10000
Schema = default
ServiceDiscoveryMode = 0
ZKNamespace =
HiveServerType = 2
AuthMech = 2
ThriftTransport = 1
UseNativeQuery = 0
KrbHostFQDN = [Hive Server 2 Host FQDN]
KrbServiceName = [Hive Server 2 Kerberos service name]
KrbRealm = [Hive Server 2 Kerberos realm]
SSL = 0
TwoWaySSL = 0
ClientCert =
ClientPrivateKey =
ClientPrivateKeyPassword =
UID=cloudera
Description = Cloudera ODBC Driver for Apache Hive (64-bit) DSN
Driver = /opt/cloudera/hiveodbc/lib/64/libclouderahiveodbc64.so
HOST = 192.168.1.88
PORT = 10000
Schema = default
ServiceDiscoveryMode = 0
ZKNamespace =
HiveServerType = 2
AuthMech = 2
ThriftTransport = 1
UseNativeQuery = 0
KrbHostFQDN = [Hive Server 2 Host FQDN]
KrbServiceName = [Hive Server 2 Kerberos service name]
KrbRealm = [Hive Server 2 Kerberos realm]
SSL = 0
TwoWaySSL = 0
ClientCert =
ClientPrivateKey =
ClientPrivateKeyPassword =
UID=cloudera
A continuación, probamos que la conexión sea exitosa:
[oracle@node1 ~]$ isql -v hivedsn +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL>
Lista las tablas y ejecuta una consulta para contar los valores sobre la tabla orders para asegúrate de que todo esté funcionando correctamente:
SQL> show tables; +-----------------------------------+ |tab_name | +-----------------------------------+ | categories | | customers | | departments | | order_items | | orders | | products | +-----------------------------------+ SQLRowCount returns -1 6 rows fetched SQL> select count(*) from orders; +---------------------+ | EXPR_1 | +---------------------+ | 68883 | +---------------------+ SQLRowCount returns -1 1 rows fetched
Configuración de gateway transparente ODBC para el driver ODBC de Cloudera Hive
Dentro del directorio $ORACLE_HOME/hs/admin hemos creado un archive de parámetros llamado initHIVEDSN.ora (hemos utilizado el archive dg4odbc.ini como plantilla) con el siguiente contenido:
[oracle@node1 admin]$ vi initHIVEDSN.ora
# This is a sample agent init file that contains the HS parameters that are
# needed for the Database Gateway for ODBC
HS_FDS_CONNECT_INFO = "HIVEDSN"
HS_FDS_TRACE_LEVEL = 0
HS_FDS_SHAREABLE_NAME = /opt/cloudera/hiveodbc/lib/64/libclouderahiveodbc64.so
#
# ODBC specific environment variables
#
set ODBCINI=/home/oracle/odbc.ini
# This is a sample agent init file that contains the HS parameters that are
# needed for the Database Gateway for ODBC
HS_FDS_CONNECT_INFO = "HIVEDSN"
HS_FDS_TRACE_LEVEL = 0
HS_FDS_SHAREABLE_NAME = /opt/cloudera/hiveodbc/lib/64/libclouderahiveodbc64.so
#
# ODBC specific environment variables
#
set ODBCINI=/home/oracle/odbc.ini
Nota: el nombre del archive init debe ser init<valor de HS_FDS_CONNECT_INFO>.ora de otra manera la conexión fallara.
Configuracion del Listener
Edita el archivo listener.ora como se muestra a continuación:
[oracle@node1 admin]$ vi /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
# listener.ora Network Configuration File: /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (PROGRAM = dg4odbc) (ARGS = ENVS=LD_LIBRARY_PATH=/opt/cloudera/hiveodbc/lib/64/libclouderahiveodbc64.so) (SID_NAME = HIVEDSN) (ORACLE_HOME = /u01/app/oracle/product/12.1.0/dbhome_1) ) )
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = node1)(PORT = 1521)) ) (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )ADR_BASE_LISTENER = /u01/app/oracle
Agrega un servicio de red llamado HIVEDSN en el archivo tnsnames.ora como se muestra:
HIVEDSN = (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=node1)(PORT=1521)) (CONNECT_DATA=(SID=HIVEDSN)) (HS=OK) )
Refresca la configuración del listener con el comando reload:
[oracle@node1 admin]$ lsnrctl reload
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 20-JUN-2016 08:05:57
Copyright (c) 1991, 2014, Oracle. All rights reserved.
Copyright (c) 1991, 2014, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=node1)(PORT=1521)))
The command completed successfully
[oracle@node1 admin]$
The command completed successfully
[oracle@node1 admin]$
Verifica la disponibilidad de los servicios creados:
[oracle@node1 admin]$ lsnrctl status
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 20-JUN-2016 08:06:32
Copyright (c) 1991, 2014, Oracle. All rights reserved.
Copyright (c) 1991, 2014, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=node1)(PORT=1521)))
STATUS of the LISTENER
-----------------------------------------------------------------------------------------------------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 12.1.0.2.0 - Production
Start Date 19-JUN-2016 08:04:43
Uptime 1 days 0 hr. 1 min. 49 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/node1/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=node1)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=node1)(PORT=5500))
(Security=(my_wallet_directory=/u01/app/oracle/product/12.1.0/dbhome_1/admin/ORCL/xdb_wallet))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "HIVEDSN" has 1 instance(s).
Instance "HIVEDSN", status UNKNOWN, has 1 handler(s) for this service...
Service "ORCL" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
Service "ORCLXDB" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
The command completed successfully
Mediante el comando tnsping verifica la disponibilidad del servicio HIVEDSN como se muestra:
STATUS of the LISTENER
-----------------------------------------------------------------------------------------------------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 12.1.0.2.0 - Production
Start Date 19-JUN-2016 08:04:43
Uptime 1 days 0 hr. 1 min. 49 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/node1/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=node1)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=node1)(PORT=5500))
(Security=(my_wallet_directory=/u01/app/oracle/product/12.1.0/dbhome_1/admin/ORCL/xdb_wallet))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "HIVEDSN" has 1 instance(s).
Instance "HIVEDSN", status UNKNOWN, has 1 handler(s) for this service...
Service "ORCL" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
Service "ORCLXDB" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
The command completed successfully
Mediante el comando tnsping verifica la disponibilidad del servicio HIVEDSN como se muestra:
[oracle@node1 admin]$ tnsping HIVEDSN
TNS Ping Utility for Linux: Version 12.1.0.2.0 - Production on 20-JUN-2016 08:07:56
Copyright (c) 1997, 2014, Oracle. All rights reserved.
Copyright (c) 1997, 2014, Oracle. All rights reserved.
Used parameter files:
/u01/app/oracle/product/12.1.0/dbhome_1/network/admin/sqlnet.ora
/u01/app/oracle/product/12.1.0/dbhome_1/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=node1)(PORT=1521)) (CONNECT_DATA=(SID=HIVEDSN)) (HS=OK))
OK (10 msec)
Dentro de la base de datos, crea un Database Link público con las siguientes características:
Attempting to contact (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=node1)(PORT=1521)) (CONNECT_DATA=(SID=HIVEDSN)) (HS=OK))
OK (10 msec)
Dentro de la base de datos, crea un Database Link público con las siguientes características:
[oracle@node1 admin]$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Mon Jun 20 08:09:35 2016
Copyright (c) 1982, 2014, Oracle. All rights reserved.
SQL*Plus: Release 12.1.0.2.0 Production on Mon Jun 20 08:09:35 2016
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
SQL> create public database link hivedsn connect to cloudera identified by cloudera using 'HIVEDSN';
Database link created.
Database link created.
A continuación, realiza una prueba mediante una consulta para verificar el estado del Database Link:
SQL> select * from customers@hivedsn;
select * from customers@hivedsn
*
ERROR at line 1:
ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
[Cloudera][ODBC] (11560) Unable to locate SQLGetPrivateProfileString function.
{HY000,NativeErr = 11560}
ORA-02063: preceding 2 lines from HIVEDSN
select * from customers@hivedsn
*
ERROR at line 1:
ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
[Cloudera][ODBC] (11560) Unable to locate SQLGetPrivateProfileString function.
{HY000,NativeErr = 11560}
ORA-02063: preceding 2 lines from HIVEDSN
La función SQLGetPrivateProfileString está contenida y debe exportada desde la librería compartida libodbcinst.so. Por lo que, para resolver este inconveniente necesitamos agregar el path completo (marcado con negrita) dentro del archivo de configuración del driver /etc/cloudera.hiveodbc.ini como se muestra a continuación:
[Driver]
ODBCInstLib=/usr/lib64/libodbcinst.so
ErrorMessagesPath=/opt/cloudera/hiveodbc/ErrorMessages/
LogLevel=0
LogPath=
SwapFilePath=/tmp
Además, si el driver de Hive ODBC no está enlazado con libodbcinst.so podemos agregar la variable de ambiente LD_PRELOAD al archivo .bash_profile o simplemente crear la variable mediante un comando export:
ODBCInstLib=/usr/lib64/libodbcinst.so
ErrorMessagesPath=/opt/cloudera/hiveodbc/ErrorMessages/
LogLevel=0
LogPath=
SwapFilePath=/tmp
Además, si el driver de Hive ODBC no está enlazado con libodbcinst.so podemos agregar la variable de ambiente LD_PRELOAD al archivo .bash_profile o simplemente crear la variable mediante un comando export:
[oracle@node1 ~]$ export LD_PRELOAD=/usr/lib64/libodbcinst.so
Verifiquemos ahora si libodbcinst.so está cargado:
[oracle@node1 ~]$ ldd /opt/cloudera/impalaodbc/lib/64/libclouderaimpalaodbc64.so
linux-vdso.so.1 => (0x00007fffad5ff000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fd1af2b2000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd1af094000)
libsasl2.so.2 => /usr/lib64/libsasl2.so.2 (0x00007fd1aee7a000)
librt.so.1 => /lib64/librt.so.1 (0x00007fd1aec72000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fd1aea57000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007fd1ae854000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fd1ae54e000)
libm.so.6 => /lib64/libm.so.6 (0x00007fd1ae2c9000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fd1ae0b3000)
libc.so.6 => /lib64/libc.so.6 (0x00007fd1add20000)
/lib64/ld-linux-x86-64.so.2 (0x00000033a1a00000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fd1adae8000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007fd1ad886000)
linux-vdso.so.1 => (0x00007fffad5ff000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fd1af2b2000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd1af094000)
libsasl2.so.2 => /usr/lib64/libsasl2.so.2 (0x00007fd1aee7a000)
librt.so.1 => /lib64/librt.so.1 (0x00007fd1aec72000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fd1aea57000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007fd1ae854000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fd1ae54e000)
libm.so.6 => /lib64/libm.so.6 (0x00007fd1ae2c9000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fd1ae0b3000)
libc.so.6 => /lib64/libc.so.6 (0x00007fd1add20000)
/lib64/ld-linux-x86-64.so.2 (0x00000033a1a00000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fd1adae8000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007fd1ad886000)
Vuelve a refrescar el listener, conéctate nuevamente a la base de datos y vuelve a ejecutar la prueba del select:
[oracle@node1 admin]$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Mon Jun 20 08:23:36 2016
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
SQL> select * from customers@hivedsn;
select * from customers@hivedsn
*
ERROR at line 1:
ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
[Cloudera][ODBC] (11470) Transactions are not supported. {HYC00,NativeErr =
11470}
ORA-02063: preceding 2 lines from HIVEDSN
select * from customers@hivedsn
*
ERROR at line 1:
ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
[Cloudera][ODBC] (11470) Transactions are not supported. {HYC00,NativeErr =
11470}
ORA-02063: preceding 2 lines from HIVEDSN
Este error se debe a que Hive es un almacén de datos no transaccional, por lo que nuestras operaciones deben ejecutarse en modo de lectura y non-logging. Podemos modificar el comportamiento utilizando el parámetro HS_TRANSACTION_MODEL con el valor READ_ONLY_AUTOCOMMIT. Para más información sobre parámetros: https://docs.oracle.com/database/121/ODBCU/feature.htm#ODBCU763.
Modifica el archivo de parámetros initHIVEDSN.ora y agrega el parámetro HS_TRANSACTION_MODEL como se muestra:
Modifica el archivo de parámetros initHIVEDSN.ora y agrega el parámetro HS_TRANSACTION_MODEL como se muestra:
# This is a sample agent init file that contains the HS parameters that are
# needed for the Database Gateway for ODBC
HS_FDS_CONNECT_INFO = "HIVEDSN"
HS_FDS_TRACE_LEVEL = 0
HS_FDS_SHAREABLE_NAME = /opt/cloudera/hiveodbc/lib/64/libclouderahiveodbc64.so
HS_TRANSACTION_MODEL=READ_ONLY_AUTOCOMMIT
#
# ODBC specific environment variables
#
set ODBCINI=/home/oracle/odbc.ini
# needed for the Database Gateway for ODBC
HS_FDS_CONNECT_INFO = "HIVEDSN"
HS_FDS_TRACE_LEVEL = 0
HS_FDS_SHAREABLE_NAME = /opt/cloudera/hiveodbc/lib/64/libclouderahiveodbc64.so
HS_TRANSACTION_MODEL=READ_ONLY_AUTOCOMMIT
#
# ODBC specific environment variables
#
set ODBCINI=/home/oracle/odbc.ini
Guarda los cambios, conéctate de nuevo y reintenta ejecutar la sentencia:
SQL> select * from customers@hivedsn
-------------------------------------------------------------------------------------------
1530 David Smith XXXXXXXXX XXXXXXXXX
-------------------------------------------------------------------------------------------
1530 David Smith XXXXXXXXX XXXXXXXXX
La conexión y petición de datos ahora debe funcionar correctamente.
Configurando el driver ODBC de Cloudera Impala
El directorio de instalación del driver estará ubicado en /opt/cloudera/impalaodbc. En el directorio /opt/cloudera/impalaodbc/Setup podremos encontrar un ejemplo de archivo de configuración que puede ser usado con algunas modificaciones para realizar nuestra instalación.
Crea el directorio como usuario root /usr/local/odbc como se muestra:
[root@node1 ~]# mkdir -p /usr/local/odbc
Crea el directorio como usuario root /usr/local/odbc como se muestra:
[root@node1 ~]# mkdir -p /usr/local/odbc
Este directorio será usado como ubicación del archivo odbcinst.ini.
Copia el archive odbc.ini en el directorio /home/oracle como se muestra:
[root@node1 Setup]# cp odbc.ini /home/oracle
A continuación, copia el archive cloudera.impalaodbc.ini desde /opt/cloudera/hiveodbc/lib/64
[root@node1 64]# cp cloudera.impalaodbc.ini /etc
Copia el archive odbc.ini en el directorio /home/oracle como se muestra:
[root@node1 Setup]# cp odbc.ini /home/oracle
A continuación, copia el archive cloudera.impalaodbc.ini desde /opt/cloudera/hiveodbc/lib/64
[root@node1 64]# cp cloudera.impalaodbc.ini /etc
Después, configuraremos las variables de ambiente para el driver ODBC de Clooudera. Modifica el archive .bash_profile para agregar las siguientes variables como se muestra:
[oracle@node1 ~]$ vi .bash_profile
# .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
export ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1
export ORACLE_SID=ORCL
export ODBCINI=~/odbc.ini
export ODBCSYSINI=/usr/local/odbc
export SIMBAINI=/etc/cloudera.impalaodbc.ini
PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$LIBRARY_PATH:$ORACLE_HOME/lib
export ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1
export ORACLE_SID=ORCL
export ODBCINI=~/odbc.ini
export ODBCSYSINI=/usr/local/odbc
export SIMBAINI=/etc/cloudera.impalaodbc.ini
PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$LIBRARY_PATH:$ORACLE_HOME/lib
Utiliza el comando source para cargar los cambios realizados:
[oracle@node1 ~]$ source .bash_profile
Similar al driver de Hive, el archivo odbc.ini en el directorio /home/oracle contiene dos ejemplos para configuración de DSN para 32 y 64 bits. En nuestro caso vamos a utilizar la versión de 64 bits. Todos los parámetros son explicados con comentarios en el archivo de ejemplo. Para más información sobre los parámetros puedes consultar el manual de configuración e instalación del driver ubicado en http://www.cloudera.com/documentation/other/connectors/impala-odbc/2-5-22.html. Vamos a cambiar solamente los valores de host, port, y renombraremos el data source a IMPLDSN como se muestra:
[ImplDSN]
# Description: DSN Description.
# This key is not necessary and is only to give a description of the data source.
Description=Cloudera ODBC Driver for Impala (64-bit) DSN
# Driver: The location where the ODBC driver is installed to.
Driver=/opt/cloudera/impalaodbc/lib/64/libclouderaimpalaodbc64.so
HOST=192.168.1.88
PORT=21050
Database=default
AuthMech=0
# This key is not necessary and is only to give a description of the data source.
Description=Cloudera ODBC Driver for Impala (64-bit) DSN
# Driver: The location where the ODBC driver is installed to.
Driver=/opt/cloudera/impalaodbc/lib/64/libclouderaimpalaodbc64.so
HOST=192.168.1.88
PORT=21050
Database=default
AuthMech=0
Verifica la conexion con el siguiente comando:
[oracle@node1 ~]$ isql -v ImplDSN +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+< SQL>
SQL> show tables; +-----------------------------------+ |tab_name | +-----------------------------------+ | categories | | customers | | departments | | order_items | | orders | | products | +-----------------------------------+ SQLRowCount returns -1 6 rows fetched
SQL> select count(*) from orders; +---------------------+ | EXPR_1 | +---------------------+ | 68883 | +---------------------+ SQLRowCount returns -1 1 rows fetched
Configuración de gateway transparente ODBC para el driver ODBC de Cloudera Impala
Dentro del directorio $ORACLE_HOME/hs/admin vamos a crear un archivo de parámetros llamado initIMPLDSN.ora (utilizamos el archivo dg4odbc.ini como plantilla) con el siguiente contenido:
[oracle@node1 admin]$ vi initHIVEDSN.ora
# This is a sample agent init file that contains the HS parameters that are
# needed for the Database Gateway for ODBC
HS_FDS_CONNECT_INFO = "IMPLDSN"
HS_FDS_TRACE_LEVEL = 0
HS_FDS_SHAREABLE_NAME = /opt/cloudera/hiveodbc/lib/64/libclouderahiveodbc64.so
HS_TRANSACTION_MODEL=READ_ONLY_AUTOCOMMIT
#
# ODBC specific environment variables
#
set ODBCINI=/home/oracle/odbc.ini
# This is a sample agent init file that contains the HS parameters that are
# needed for the Database Gateway for ODBC
HS_FDS_CONNECT_INFO = "IMPLDSN"
HS_FDS_TRACE_LEVEL = 0
HS_FDS_SHAREABLE_NAME = /opt/cloudera/hiveodbc/lib/64/libclouderahiveodbc64.so
HS_TRANSACTION_MODEL=READ_ONLY_AUTOCOMMIT
#
# ODBC specific environment variables
#
set ODBCINI=/home/oracle/odbc.ini
Nota: el nombre del archivo init debe ser init<valor de HS_FDS_CONNECT_INFO>.ora, de otra manera la conexión fallara.
Agrega la ruta delibodbcinst.so en el archivo de configuración /etc/cloudera.impalaodbc.ini como se muestra:
[Driver]
ODBCInstLib=/usr/lib64/libodbcinst.so
ErrorMessagesPath=/opt/cloudera/impalaodbc/ErrorMessages/
LogLevel=0
LogPath=
SwapFilePath=/tmp
ODBCInstLib=/usr/lib64/libodbcinst.so
ErrorMessagesPath=/opt/cloudera/impalaodbc/ErrorMessages/
LogLevel=0
LogPath=
SwapFilePath=/tmp
Configuración del Listener
Modifica el archivo listener.ora y agrega el siguiente contenido:
[oracle@node1 admin]$ vi /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
# listener.ora Network Configuration File: /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (PROGRAM = dg4odbc) (ARGS = ENVS=LD_LIBRARY_PATH=/opt/cloudera/impalaodbc/lib/64/libclouderaimpalaodbc64.so) (SID_NAME = IMPLDSN) (ORACLE_HOME = /u01/app/oracle/product/12.1.0/dbhome_1) ) )
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = node1)(PORT = 1521)) ) (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )
ADR_BASE_LISTENER = /u01/app/oracle
Agregar un servicio de red en el archivo tnsnames.ora como se muestra:
IMPLDSN = (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=node1)(PORT=1521)) (CONNECT_DATA=(SID=IMPLDSN)) (HS=OK) )
Refresca la configuración del listener:
[oracle@node1 admin]$ lsnrctl reload
[oracle@node1 admin]$ lsnrctl reload
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 20-JUN-2016 08:05:57
Copyright (c) 1991, 2014, Oracle. All rights reserved.
Copyright (c) 1991, 2014, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=node1)(PORT=1521)))
The command completed successfully
[oracle@node1 admin]$
The command completed successfully
[oracle@node1 admin]$
Verifica la disponibilidad de los servicios:
[oracle@node1 admin]$ lsnrctl status
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 20-JUN-2016 08:06:32
Copyright (c) 1991, 2014, Oracle. All rights reserved.
Copyright (c) 1991, 2014, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=node1)(PORT=1521)))
STATUS of the LISTENER
------------------------------------------------------------------------------------------------------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 12.1.0.2.0 - Production
Start Date 19-JUN-2016 08:04:43
Uptime 1 days 0 hr. 1 min. 49 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/node1/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=node1)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=node1)(PORT=5500))
(Security=(my_wallet_directory=/u01/app/oracle/product/12.1.0/dbhome_1/admin/ORCL/xdb_wallet))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "IMPLDSN" has 1 instance(s).
Instance "IMPLDSN", status UNKNOWN, has 1 handler(s) for this service...
Service "ORCL" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
Service "ORCLXDB" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
The command completed successfully
Mediante el comando tnsping verifica la disponibilidad como se muestra:
STATUS of the LISTENER
------------------------------------------------------------------------------------------------------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 12.1.0.2.0 - Production
Start Date 19-JUN-2016 08:04:43
Uptime 1 days 0 hr. 1 min. 49 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/node1/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=node1)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=node1)(PORT=5500))
(Security=(my_wallet_directory=/u01/app/oracle/product/12.1.0/dbhome_1/admin/ORCL/xdb_wallet))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "IMPLDSN" has 1 instance(s).
Instance "IMPLDSN", status UNKNOWN, has 1 handler(s) for this service...
Service "ORCL" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
Service "ORCLXDB" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
The command completed successfully
Mediante el comando tnsping verifica la disponibilidad como se muestra:
[oracle@node1 admin]$ tnsping IMPLDSN
TNS Ping Utility for Linux: Version 12.1.0.2.0 - Production on 20-JUN-2016 08:07:56
Copyright (c) 1997, 2014, Oracle. All rights reserved.
TNS Ping Utility for Linux: Version 12.1.0.2.0 - Production on 20-JUN-2016 08:07:56
Copyright (c) 1997, 2014, Oracle. All rights reserved.
Used parameter files:
/u01/app/oracle/product/12.1.0/dbhome_1/network/admin/sqlnet.ora
/u01/app/oracle/product/12.1.0/dbhome_1/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=node1)(PORT=1521)) (CONNECT_DATA=(SID=IMPLDSN)) (HS=OK))
OK (10 msec)
Crea un Database Link publicó para establecer una conexión desde Oracle:
[oracle@node1 admin]$ sqlplus / as sysdba
Attempting to contact (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=node1)(PORT=1521)) (CONNECT_DATA=(SID=IMPLDSN)) (HS=OK))
OK (10 msec)
Crea un Database Link publicó para establecer una conexión desde Oracle:
[oracle@node1 admin]$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Mon Jun 20 08:09:35 2016
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
SQL> create public database link impldsn connect to cloudera identified by cloudera using 'IMPLDSN';
Database link created.
Database link created.
Prueba el Database Link como la siguiente consulta:
SQL> select * from customers@impldsn
-----------------------------------------------------------------------------------
1530 David Smith XXXXXXXXX XXXXXXXXX
-----------------------------------------------------------------------------------
1530 David Smith XXXXXXXXX XXXXXXXXX
La conexión y petición de datos desde Cloudera Impala funciona correctamente.
Observaciones
Siempre que sea posible utiliza Impala antes que Hive debido a las varias limitaciones en velocidad y sintaxis de esta última. Es posible tener severas diferencias de sintaxis en la forma de consultar datos desde Hive o Impala directamente desde Oracle. Si se deben ejecutar consultas complejas es mejor crear una vista local en Hive o Impala y acceder a esta directamente. Otro beneficio es que esto aprovechara las optimizaciones en consultas en el lado de Impala o Hive.
Un ejemplo, si tratas de ejecutar la siguiente consulta, obtendrás una alerta indicando que la sentencia count dentro de la consulta no es una característica soportada:
SQL> l
1 select c."category_name", count("order_item_quantity") as count
2 from order_items@impaladsn oi
3 inner join products@impaladsn p on oi."order_item_product_id" = p."product_id"
4 inner join categories@impaladsn c on c."category_id" = p."product_category_id"
5 group by c."category_name"
6* order by count("order_item_quantity") desc
SQL> /
select c."category_name", count("order_item_quantity") as count
*
ERROR at line 1:
ORA-02070: database IMPALADSN does not support in this context
Un ejemplo, si tratas de ejecutar la siguiente consulta, obtendrás una alerta indicando que la sentencia count dentro de la consulta no es una característica soportada:
SQL> l
1 select c."category_name", count("order_item_quantity") as count
2 from order_items@impaladsn oi
3 inner join products@impaladsn p on oi."order_item_product_id" = p."product_id"
4 inner join categories@impaladsn c on c."category_id" = p."product_category_id"
5 group by c."category_name"
6* order by count("order_item_quantity") desc
SQL> /
select c."category_name", count("order_item_quantity") as count
*
ERROR at line 1:
ORA-02070: database IMPALADSN does not support in this context
Para resolver este problema, crea una vista dentro de Impala:
[cloudera@quickstart Desktop]$ impala-shell Starting Impala Shell without Kerberos authentication Connected to quickstart.cloudera:21000 Server version: impalad version 2.5.0-cdh5.7.0 RELEASE (build ad3f5adabedf56fe6bd9eea39147c067cc552703) *********************************************************************************** Welcome to the Impala shell. Copyright (c) 2015 Cloudera, Inc. All rights reserved. (Impala Shell v2.5.0-cdh5.7.0 (ad3f5ad) built on Wed Mar 23 11:33:33 PDT 2016) After running a query, type SUMMARY to see a summary of where time was spent. *********************************************************************************** [quickstart.cloudera:21000] > create view summaryvw as -- Most popular product categories > select c.category_name, count(order_item_quantity) as count > from order_items oi > inner join products p on oi.order_item_product_id = p.product_id > inner join categories c on c.category_id = p.product_category_id > group by c.category_name > order by count desc > limit 10; Query: create view summaryvw as -- Most popular product categories select c.category_name, count(order_item_quantity) as count from order_items oi inner join products p on oi.order_item_product_id = p.product_id inner join categories c on c.category_id = p.product_category_id group by c.category_name order by count desc limit 10
Vuelve a ejecutar la consulta, esta vez a través de la vista sumaryvw creada:
1* select * from summaryvw@impaladsn
SQL> /
SQL> /
category_name count -------------------------------------------------------------------------------- ---------- Cleats 24551 Men's Footwear 22246 Women's Apparel 21035 Indoor/Outdoor Games 19298 Fishing 17325 Water Sports 15540 Camping & Hiking 13729 Cardio Equipment 12487 Shop By Sport 10984 Electronics 3156
10 rows selected.
Conclusión
En este artículo hemos demostrado como utilizar los drivers ODBC de Cloudera Hive e Impala para conectarnos desde una base de datos Oracle utilizando un gateway heterogéneo ODBC. Este enfoque puede ser de mucha ayuda cuando queremos recuperar pequeñas cantidades de datos utilizando consultas relativamente simples y necesitamos establecer la conexión de manera rápida. También, el método puede ser utilizado para archivar o realizar backups de datos sensibles desde Hive o Impala.
Y V Ravi Kumar, es un Oracle ACE y Oracle Certified Master (OCM) con 17 años de experiencia en BFSI vertical. También es OCP en Oracle 8i, 9i, 10g, 11g y 12c, posee certificaciones en GoldenGate, RAC, Performance Tuning y Oracle Exadata. Constantemente motiva a muchos DBA’s y ayuda a la comunidad Oracle publicando sus consejos/ideas/sugerencias/soluciones en su blog personal. Ha escrito más de 40 artículos sobre Oracle Exadata, Oracle RAC y Oracle GoldenGate para OTN en español, portugués e inglés y 17 artículos para TOAD World, 2 artículos para OKOUG, 3 artículos para OTech Magazine y 2 artículos para Redgate. Es un conferencista Oracle frecuente en @OTN, AIOUG, Sangam y IOUG.
Adrian Neagu, tiene más de 15 años de experiencia como administrador de base de datos, formando una experiencia en varios sistemas RDBMS. Tiene experiencia en muchas áreas como industria financiera, industria farmacéutica, telecomunicaciones y aviación. Es un Oracle Certified Master 10g and 11g, Oracle Certified Professional 9i, 10g, and 11g, Cloudera Certified Administrator de Apache Hadoop, IBM DB2 Certified Administrator versión 8.1.2 y 9, IBM DB2 9 Advanced Certified Administrator 9, y Sun Certified System Administrator Solaris 10. Es un experto en varias áreas de administración de base de datos, BigData y sistemas operativos incluyendo tuneo de alto desempeño, alta disponibilidad, replicación, backup y recuperación.
Julio Ayapan, Ingeniero en Ciencias y Sistemas, Administrador de base de datos Oracle con más de 4 años de experiencia en proyectos de infraestructura, Bases de Datos Oracle 10g, 11g y 12c sobre Linux y Solaris. Posee la certificación “Oracle Certified Professional 11g y 12c”. Ha sido Conferencista en OTN Tour Latinoamericano 2016 en Guatemala. Es parte de la junta directiva del Grupo de Usuarios Oracle de Guatemala (GOUG). Actualmente es Consultor de Bases de datos Oracle en Nuvola Consulting Group (www.nuvolacg.com). Publica artículos frecuentemente en su blog http://oraclehomegt.blogspot.com. Twitter @jayapangt.
Este artículo ha sido revisado por el equipo de productos Oracle y se encuentra en cumplimiento de las normas y prácticas para el uso de los productos Oracle.
Comentarios
Publicar un comentario