Hugo de la Mora https://sg.com.mx/ en Ciberseguridad para CISOs https://sg.com.mx/buzz/ponencias/sg-virtual-conference-marzo-2023/ciberseguridad-para-cisos <span class="field field--name-title field--type-string field--label-hidden">Ciberseguridad para CISOs</span> <div class="field field--name-field-evento field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Evento</h3> <ul class='links field__items'> <li><a href="/buzz/evento-sg/sg-virtual-conference-marzo-2023" hreflang="zxx">SG Virtual Conference Marzo 2023</a></li> </ul> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/user/44582" lang="" about="/user/44582" typeof="schema:Person" property="schema:name" datatype="" class="username">Ivett Sanchez</a></span> <span class="field field--name-created field--type-created field--label-hidden">Wed, 05/31/2023 - 08:57</span> <div class="field field--name-field-autor field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Conferencista(s)</h3> <ul class='links field__items'> <li><a href="/author-speaker/hugo-la-mora" hreflang="und">Hugo de la Mora</a></li> </ul> </div> <div class="field field--name-field-tags field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/tags/seguridad" hreflang="und">Seguridad</a></li> </ul> </div> <div class="text-formatted field field--name-field-embedded-multimedia field--type-text-long field--label-hidden field__item"><p><iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/aqHvjUEC2XY" title="YouTube video player" width="560"></iframe></p> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Cómo manejar la seguridad en una empresa. Desde el enfoque de infraestructura (onpremise y nubes) software, pentest, datos, gestión (iso27001 y otros estándares) y forense. Aprender desde cero hasta nivel experto los pasos necesarios para cuidar de punta a punta la información.</p> </div> <div class="field field--name-field-start-date field--type-datetime field--label-above"> <div class="field__label">Fecha de sesión</div> <div class="field__item"><time datetime="2023-03-29T12:00:00Z" class="datetime">Wed, 03/29/2023 - 12:00</time> </div> </div> Wed, 31 May 2023 14:57:52 +0000 Ivett Sanchez 11514 at https://sg.com.mx Exportando Sistemas Relacionales a Sistemas Columnares Distribuidos https://sg.com.mx/revista/55/exportando-sistemas-relacionales-sistemas-columnares-distribuidos <span class="field field--name-title field--type-string field--label-hidden">Exportando Sistemas Relacionales a Sistemas Columnares Distribuidos</span> <div class="images-container clearfix"> <div class="image-preview clearfix"> <div class="image-wrapper clearfix"> <div class="field field--name-field-image field--type-image field--label-hidden field__item"> <img src="/sites/default/files/images/datos-fig1.png" width="502" height="236" alt="" loading="lazy" typeof="foaf:Image" /> </div> </div> </div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/user/1" lang="" about="/user/1" typeof="schema:Person" property="schema:name" datatype="" class="username">sg</a></span> <span class="field field--name-created field--type-created field--label-hidden">Mon, 08/21/2017 - 15:31</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/55" hreflang="und">SG #55</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/seccion-revista/gestion-datos" hreflang="und">Gestión de datos</a></li> </ul> </div> <div class="field field--name-field-autor field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Autor</h3> <ul class='links field__items'> <li><a href="/author-speaker/hugo-la-mora" hreflang="und">Hugo de la Mora</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>El manejo de información masiva se ha hecho cotidiano, y una estrategia común para analizar grandes cantidades de datos es moverla de las bases de datos relacionales tradicionales (RDBMS) hacia bases de datos columnares distribuidas.</p><p dir="ltr">En el presente artículo muestro los pasos necesarios para migrar información relacional a una infraestructura de Hive en Hadoop. La idea básica es importar grandes datos de un origen relacional como Microsoft SQL Server a un almacenamiento en Hadoop como Hive o HDFS, teniendo la posibilidad de analizar esa información a través de Hue.</p><h3 dir="ltr">Panorama</h3><p dir="ltr">Para esta labor utilizaremos Apache Sqoop [1], una herramienta precisamente creada para mover datos entre bases de datos estructuradas y Hadoop. Sqoop trabaja con tablas individuales, cada fila de una tabla se trata como un registro en HDFS. Todos los registros se almacenan como datos de texto en archivos de texto, en Hive o HBase (ver figura 1).</p><p dir="ltr"><img src="https://lh3.googleusercontent.com/rppAtPXM6A0yfFfQ60DFtcv5rEu-gGzjivIvHJXDb8OwXMY8QrLwsSDv8l_A3zEAB-_Rl3G-fDpaqBtHokxSU7WPq8mcGI9vmd8eMkx0cdbNGM51WB1M-7N2Mn44o-RfpOM76zfq5z9N7fy8TA" width="589" height="274" /></p><p dir="ltr"><em>Figura 1. Flujo de Sqoop</em></p><h3>Prerrequisitos</h3><p dir="ltr">Para el propósito de este tutorial voy a suponer que ya se tiene instalado y funcionando tanto un ambiente de SQL Server como otro de Hadoop. Si no tienes el de Hadoop, para propósito de aprendizaje puedes utilizar una máquina virtual de Cloudera Quickstart [2]. En tu ambiente de Hadoop necesitas tener instalado Sqoop. Checa si ya tienes, invocando el comando “sqoop” desde la línea de comandos. Si no lo tienes, lo más conveniente es instalarlo por medio del manejador de paquetes de tu sistema operativo (en el caso de OSX está disponible para Homebrew).</p><h3 dir="ltr">Preparando la conexión</h3><p dir="ltr">Nos conectaremos a SQL Server por medio de JDBC. Para que esto funcione primero necesitamos habilitar TCP/IP en nuestra instancia. Esto se hace desde el SQL Server Configuration Manager.</p><p dir="ltr">Posteriormente vamos a descargar el driver de JDBC de SQL Server en nuestro ambiente Hadoop. Este se obtiene del sitio web de Microsoft y al momento de escribir este artículo la versión más reciente se obtiene en <a href="http://swgu.ru/t3">http://swgu.ru/t3</a> . Dentro del paquete encontraremos una carpeta jre7 y otra jre8 y dentro de cada una hay un archivo .jar que corresponde al driver. Así que seleccionaremos el archivo que corresponda a la versión de java que estemos usando y lo copiaremos en /var/lib/sqoop . Si esta carpeta no existe, la creamos y le asignamos los permisos necesarios como se ve a continuación.</p><p class="code" dir="ltr">$ mkdir -p /var/lib/sqoop<br />$ chown sqoop:sqoop /var/lib/sqoop <br />$ chmod 755 /var/lib/sqoop<br />$ sudo cp sqljdbc_6.0/enu/jre8/sqljdbc42.jar /var/lib/sqoop/</p><h3 dir="ltr">Importando datos</h3><p dir="ltr">Para verificar que podemos conectarnos de nuestro ambiente Hadoop a SQL Server vamos a comenzar listando las bases de datos. Para ello utilizamos sqoop list-databases con los argumentos de conexión requeridos (en este ejemplo nuestro SQL Server está disponible en la ip 192.168.56.1 y exponiendo el puerto 1444, y tiene un usuario hadoopUser con contraseña hadoop… ).</p><p class="code" dir="ltr">$ sqoop list-databases --connect jdbc:sqlserver://192.168.56.1:1444 --username hadoopUser --password hadoop...</p><p dir="ltr">Con lo anterior obtendremos una lista de las bases de datos.</p><p dir="ltr">A continuación importamos la base de datos y tablas que queremos (en este caso la tabla employee de la base de datos sqoopDB).</p><p class="code" dir="ltr">$ sqoop import --connect "jdbc:sqlserver://192.168.56.1:1444;username=hadoopUser; password=hadoop...; database=sqoopDB" --table employee --hive-import</p><p dir="ltr">Por cierto, si quisieramos importar todas las tablas de la BD sin necesidad de especificarlas una por una utilizaríamos sqoop import-all-tables –connect “jdbc://sqlserver….” --hive-import</p><p dir="ltr">Si quieres revisar lo que se importó a Hadoop, puedes hacerlo por medio Hue, una interfaz gráfica web para navegar Hadoop.</p><h3 dir="ltr">Hagámoslo repetible</h3><p dir="ltr">Si quisieramos estar realizando esta tarea frecuentemente, lo más conveniente es &nbsp;crear un “job” en sqoop que simplemente podemos invocar. Para ello usamos sqoop job con el argumento --create y el resto de la información para conectarse a SQL Server.</p><p class="code" dir="ltr">$ sqoop job --create jobImpEmpl -- import --connect "jdbc:sqlserver://192.168.56.1:1444;username=hadoopUser;password=hadoop...;database=sqoopDB" --table employee --hive-import</p><p dir="ltr">Lo más probable es que no querramos importar todos los datos cada vez que ejecutamos la tarea, sino que solo querramos importar los datos nuevos o modificados. Para lograr esto usamos la opción --incremental e indicamos la columna con el timestamp a verificar.</p><p class="code" dir="ltr">$ sqoop job --create jobImpEmplInc -- import --connect "jdbc:sqlserver://192.168.56.1:1444;username=hadoopUser;password=hadoop...;database=sqoopDB" --table employee --incremental lastmodified -check-column creationdate --hive-import</p><p dir="ltr">Ya creamos los jobs, pero todavía no los ejecutamos. Para ejecutar un job utilizamos sqoop job --execute &lt;nombre-del-job&gt;. Para ver los jobs que tenemos definidos podemos usar sqoop job --list. Y si queremos consultar los detalles de algún job usamos sqoop job --show &lt;nombre-del-job&gt;.</p><h3 dir="ltr">Ejecución periódica automatizada</h3><p dir="ltr">Si deseamos estar importando datos de manera periódica y automatizada, lo más conveniente es programar la tarea por medio de Oozie, que es una herramienta del ecosistema Hadoop que permite gestionar workflows desde una interfaz web.</p><p dir="ltr">Oozie tiene un editor en el cual defines el workflow. Si ya tienes el comando de sqoop que deseas ejecutar simplemente puedes “pegarlo” en un campo de texto al crear tu workflow. Después de eso podemos crear “coordinadores” para calendarizar el envío de información al sistema HDFS (ver figura 2).</p><p dir="ltr"><img src="https://lh3.googleusercontent.com/DYYH_O1XfK_Rbb5F5HV2PrlK6uICsvrtEmdQMbvUG6waFw9A57lJXQUM7hnZKsn80hnxGAv7_s-y141zhpMVxgg8MYoJV5ZahO6nM-BkRNQSjHnKl75byG6mu39aKuKGCUpQI-oieUh3tnAMWg" width="320" height="384" /></p><p dir="ltr"><em>Figura 2. Coordinar workflows en Oozie</em></p><h3 dir="ltr">Conclusión</h3><p dir="ltr">Se ha mostrado de una forma sencilla la extracción de datos desde un popular ambiente de bases de datos relacionales hasta un sistema columnar como Hive.</p><p dir="ltr"><strong>Referencias</strong></p><ol><li><a href="http://sqoop.apache.org">http://sqoop.apache.org</a></li><li><a href="https://www.cloudera.com/developers/get-started-with-hadoop-tutorial.html">https://www.cloudera.com/developers/get-started-with-hadoop-tutorial.html</a></li></ol></div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p>El MSC Hugo Enrique De La Mora Carrillo (@hugodelamora) es Chief Information Security Officer en CONTPAQi. Anteriormente ha trabajado con sistemas distribuidos, big data, desarrollo para cloud y móvil.</p></div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Mon, 21 Aug 2017 20:31:18 +0000 sg 7736 at https://sg.com.mx https://sg.com.mx/revista/55/exportando-sistemas-relacionales-sistemas-columnares-distribuidos#comments