{"id":1692,"date":"2018-03-16T12:19:13","date_gmt":"2018-03-16T11:19:13","guid":{"rendered":"http:\/\/blogs.encamina.com\/por-una-nube-sostenible\/?p=1692"},"modified":"2018-03-16T12:26:36","modified_gmt":"2018-03-16T11:26:36","slug":"high-performance-computing-hpc-basics-empezando-usar-azure-batch","status":"publish","type":"post","link":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\/","title":{"rendered":"High Performance Computing (HPC) Basics: Empezando a usar Azure Batch"},"content":{"rendered":"<h1><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1717\" src=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2018\/03\/High-perfpormance-Computing.jpg\" alt=\"\" width=\"904\" height=\"473\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2018\/03\/High-perfpormance-Computing.jpg 904w, https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2018\/03\/High-perfpormance-Computing-300x157.jpg 300w, https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2018\/03\/High-perfpormance-Computing-768x402.jpg 768w\" sizes=\"auto, (max-width: 904px) 100vw, 904px\" \/><\/h1>\n<p>Uno de los elementos claves en una soluci\u00f3n de <strong>HPC<\/strong> (<em>High Performance Computing<\/em>) en Azure es Azure Batch. Azure Batch es un servicio de Azure que nos permite, de forma sencilla, crear y administrar un conjunto de nodos de proceso (agrupados en lo que se llamar\u00e1 un <strong>Pool<\/strong>).<\/p>\n<p><!--more--><\/p>\n<p>Un pool nos permitir\u00e1 ejecutar de forma paralela y distribuida, una serie de Jobs (o trabajos). \u00c9stos Jobs, estar\u00e1n compuestos a su vez por un n\u00famero variable de Tasks (o tareas), las cuales ser\u00e1n realmente las que lleven el programa, elemento o algoritmo a ejecutar.<\/p>\n<h1><span class=\"ez-toc-section\" id=\"Batch_Pool\"><\/span>Batch Pool<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>El elemento central en <strong>Azure Batch<\/strong> es el <strong>Pool<\/strong>, o grupo. Dicho <strong>Pool<\/strong> estar\u00e1 compuesto de una serie de nodos de proceso, en los cuales se ejecutar\u00e1n las tareas de nuestros trabajos. Dichos nodos de proceso pueden ser de dos tipos: dedicados o de prioridad baja. Estos \u00faltimos son nodos con un coste mucho menor, pero que no nos garantizan la disponibilidad, y por tanto no tendremos garant\u00eda del tiempo en el que se va a ejecutar el trabajo.<\/p>\n<p>Para crear un <strong>Pool<\/strong>, tendremos los siguientes par\u00e1metros o configuraciones:<\/p>\n<ul>\n<li>poolId: Identificador del Pool.<\/li>\n<li>targetDedicatedComputeNodes: N\u00famero de nodos dedicados.<\/li>\n<li>targetLowPriorityComputeNodes: N\u00famero de nodos de baja prioridad.<\/li>\n<li>virtualMachineSize: Tama\u00f1o de la m\u00e1quina virtual.<\/li>\n<li>cloudServiceConfiguration\/virtualMachineConfiguration: Configuraci\u00f3n est\u00e1ndar (SO) o plantilla (gen\u00e9ricas de Azure o una nuestra personalizada) de la m\u00e1quina virtual a usar.<\/li>\n<\/ul>\n<p>A su vez, estos nodos pueden escalar, ya sea manualmente (con el m\u00e9todo <em>.Resize<\/em>\u00a0en .NET), o configurando un grupo habilitado para el <em>escalado autom\u00e1tico<\/em>. Para ello, se omitir\u00edan los par\u00e1metros del n\u00famero de nodos, y se configurar\u00eda el <em>autoescalado<\/em> de la siguiente forma:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\npool.AutoScaleEnabled = true;\r\npool.AutoScaleFormula = &quot;$TargetDedicatedNodes = (time().weekday == 1 ? 5:1);&quot;;\r\npool.AutoScaleEvaluationInterval = TimeSpan.FromMinutes(30);\r\n<\/pre>\n<p>Los intervalos de escalado m\u00ednimo y m\u00e1ximo son cinco minutos y 168 horas, respectivamente.<br \/>\nAqu\u00ed podemos ver un ejemplo de una creaci\u00f3n simple de un <strong>Pool<\/strong>:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\npool = batchClient.PoolOperations.CreatePool(\r\n            poolId: poolId,\r\n            targetDedicatedComputeNodes: 3, \r\n            virtualMachineSize: &quot;small&quot;,\r\n            cloudServiceConfiguration: new CloudServiceConfiguration(osFamily: &quot;4&quot;));\r\nawait pool.CommitAsync();\r\n<\/pre>\n<h1><span class=\"ez-toc-section\" id=\"Batch_Job\"><\/span>Batch Job<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>Una vez tengamos al menos un <strong>Pool<\/strong> creado y disponible en nuestro servicio de Azure Batch, lo siguiente ser\u00e1 crear nuestro <strong>Job<\/strong>.<\/p>\n<p>Como hemos contado anteriormente, un <strong>Job<\/strong>, o un trabajo de Batch, es una agrupaci\u00f3n l\u00f3gica de una o varias tareas (Tasks). Dicho <strong>Job<\/strong> lleva incluido en s\u00ed mismo algunas propiedades comunes para todas sus tareas, como por ejemplo el identificador del <strong>Job<\/strong>, el <strong>Pool<\/strong> en el que se va a ejecutar, y la prioridad del <strong>Job<\/strong>.<\/p>\n<p>Un ejemplo de creaci\u00f3n de un <strong>Job<\/strong> ser\u00eda el siguiente:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\ntry\r\n{\r\n    CloudJob job = batchClient.JobOperations.CreateJob();\r\n    job.Id = JobId;\r\n    job.PoolInformation = new PoolInformation { PoolId = PoolId };\r\n    job.Commit(); \r\n}\r\n...\r\n<\/pre>\n<h1><span class=\"ez-toc-section\" id=\"Batch_Task\"><\/span>Batch Task<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>Seguidamente, y como elemento de m\u00e1s bajo nivel, tenemos el elemento tarea, o <strong>Task<\/strong>. Estas tareas, ser\u00e1n cada uno de los elementos individuales que va a ejecutar el <strong>Job<\/strong>, sus unidades de c\u00e1lculo individuales. Las tareas se asignan a un nodo para su ejecuci\u00f3n o se ponen en cola hasta que quede libre uno.\u00a0Es decir, una tarea ejecuta una o m\u00e1s rutinas en un nodo de proceso para llevar a cabo el trabajo necesario.<\/p>\n<p>Para crear una tarea, podemos especificar los siguientes elementos:<\/p>\n<ul>\n<li>La l\u00ednea de comandos de la tarea: L\u00ednea de comandos concreta (cmd) que ejecutar\u00e1 la tarea en el nodo de proceso.<\/li>\n<li>Archivos de recursos que contiene los datos que se van a procesar. Se copian autom\u00e1ticamente desde el Blob Storage en el que est\u00e9n.<\/li>\n<li>Variables de entorno que requiera la aplicaci\u00f3n.<\/li>\n<li>Restricciones para la tarea. Por ejemplo: tiempo m\u00e1ximo, n\u00famero de reintentos\u2026<\/li>\n<li>Paquetes de aplicaci\u00f3n a desplegar en el nodo que se va a ejecutar la tarea. Para desplegar nuestro c\u00f3digo de aplicaci\u00f3n personalizado.<\/li>\n<li>Referencia a la imagen del contendor Docker, si fuera necesario.<\/li>\n<\/ul>\n<p>Un ejemplo de c\u00f3mo generar una serie de tareas y a\u00f1adirlas a un <strong>Job<\/strong> ser\u00eda el siguiente:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nfor (int i = 0; i &lt; inputFiles.Count; i++)\r\n{\r\n    string taskId = String.Format(&quot;Task{0}&quot;, i);\r\n    string inputFilename = inputFiles&#x5B;i].FilePath;\r\n    string taskCommandLine = String.Format(&quot;cmd \/c type {0}&quot;, inputFilename);\r\n\r\n    CloudTask task = new CloudTask(taskId, taskCommandLine);\r\n    task.ResourceFiles = new List&lt;ResourceFile&gt; { inputFiles&#x5B;i] };\r\n    tasks.Add(task);\r\n}\r\n\r\nbatchClient.JobOperations.AddTask(JobId, tasks);\r\n<\/pre>\n<h1><span class=\"ez-toc-section\" id=\"Automatizacion_de_ejecuciones_Batch_y_Azure_Functions\"><\/span>Automatizaci\u00f3n de ejecuciones: Batch y Azure Functions<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>Una instancia de Azure Batch cualquiera, se puede gestionar desde la propia web, ya que el portal permite realizar todas las acciones. Sin embargo, para un entorno productivo esto no es manejable.<\/p>\n<p>Azure Batch pone a disposici\u00f3n de los desarrolladores una serie de APIs, en lenguajes como .NET, Python, Node.js, Java, e incluso una API REST. Nosotros nos vamos a centrar en la API de .NET, que es la que hemos ido viendo en los ejemplos de los distintos elementos.<\/p>\n<p>La <strong>API .NET<\/strong> de Batch la podemos usar desde una simple aplicaci\u00f3n de consola, pero sigue siendo poco manejable o flexible. As\u00ed pues, una arquitectura que se propone, mucho m\u00e1s automatiza y flexible, es la siguiente:<\/p>\n<p><a href=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2018\/03\/BatchFunctionBlob.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1712\" src=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2018\/03\/BatchFunctionBlob-1024x319.png\" alt=\"\" width=\"642\" height=\"200\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2018\/03\/BatchFunctionBlob-1024x319.png 1024w, https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2018\/03\/BatchFunctionBlob-300x94.png 300w, https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2018\/03\/BatchFunctionBlob-768x239.png 768w, https:\/\/encaminablogs.wpenginepowered.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2018\/03\/BatchFunctionBlob.png 1697w\" sizes=\"auto, (max-width: 642px) 100vw, 642px\" \/><\/a><\/p>\n<p>Tendremos tres elementos principales:<\/p>\n<ul>\n<li>Un <strong>Blob Storage<\/strong>. En \u00e9l alojaremos nuestros paquetes de aplicaci\u00f3n (<em>ejecutables<\/em>), as\u00ed como los ficheros de datos de entrada y de salida, e incluso ficheros temporales si los hubiera.<\/li>\n<li>El propio <strong>Azure Batch<\/strong>.<\/li>\n<li>Una <strong>Azure Function<\/strong>, cuyo <em>trigger<\/em> ser\u00e1 el Blob Storage.<\/li>\n<\/ul>\n<p>El flujo ser\u00e1 el siguiente: cuando se cargue un fichero de datos al contenedor de <strong>Blob Storage<\/strong> designado, se desencadenar\u00e1 la ejecuci\u00f3n de la <strong>Azure Function<\/strong>. \u00c9sta Function se encargar\u00e1 de leer y procesar el fichero de datos de entrada, trocearlo y dividirlo si fuera necesario, y crear un <strong>Job<\/strong> para ejecutar en el <strong>Pool<\/strong> de <strong>Azure Batch<\/strong> con las tareas correspondientes. Dichas tareas deber\u00e1n ir cada una correctamente parametrizadas.<\/p>\n<p>Finalmente, nuestro <strong>Pool<\/strong> de <strong>Azure Batch<\/strong> ejecutar\u00e1 el <strong>Job<\/strong>, y podremos ir viendo nuestros resultados en el contenedor del <strong>Blob Storage<\/strong> designado, o en donde corresponda seg\u00fan el ejecutable de nuestras tareas.<br \/>\nEl c\u00f3digo de la <strong>Azure Function<\/strong> que realiza toda \u00e9sta operaci\u00f3n ser\u00eda similar al siguiente:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n&#x5B;FunctionName(&quot;BatchFunction&quot;)]\r\n        public static async Task Run(&#x5B;BlobTrigger(&quot;input\/{name}&quot;, Connection = &quot;AzureWebJobsDashboard&quot;)]Stream batchInputBlob, string name, TraceWriter log)\r\n        {\r\n            tWriter = log;\r\n            tWriter.Info($&quot;C# Blob trigger function Processed blob with Name: {name}...&quot;);\r\n            BatchSharedKeyCredentials cred = new BatchSharedKeyCredentials(Common.Constants.BatchAccountUrl, Common.Constants.BatchAccountName, Common.Constants.BatchAccountKey);\r\n            string storageConnectionString = string.Format(&quot;DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}&quot;,\r\n                                             Common.Constants.StorageAccountName, Common.Constants.StorageAccountKey);\r\n            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnectionString);\r\n            CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();\r\n            using (BatchClient batchClient = BatchClient.Open(cred))\r\n            {\r\n                var jobId = $&quot;DemoJob{name.Replace(&quot;.&quot;, &quot;&quot;)}{DateTime.Now.Ticks}&quot;;\r\n                tWriter.Info($&quot;BatchClient created and opened successfully!&quot;);\r\n                string outputContainerSasUrl = GetContainerSasUrl(blobClient, Common.Constants.OutputContainerName, SharedAccessBlobPermissions.Write);\r\n                string tempContainerSasUrl = GetContainerSasUrl(blobClient, Common.Constants.TemporalContainerName, SharedAccessBlobPermissions.Write);\r\n                await CreateJobAsync(batchClient, jobId, Common.Constants.PoolId);\r\n                tWriter.Info(&quot;Job Created successfully!&quot;);\r\n                var serializer = new JsonSerializer();\r\n                using (var streamReader = new StreamReader(batchInputBlob))\r\n                using (var jsonTextReader = new JsonTextReader(streamReader))\r\n                {\r\n                    var customerList = serializer.Deserialize&lt;List&lt;Driver&gt;&gt;(jsonTextReader);\r\n                    var index = 1;\r\n                    foreach (var customer in customerList)\r\n                    {\r\n                        string singleCustomerFile = $&quot;customer_{customer.Id}.json&quot;;\r\n                        var resourceFile = await UploadFileToContainerAsync(blobClient, Common.Constants.TemporalContainerName, singleCustomerFile, JsonConvert.SerializeObject(customer));\r\n                        await AddTaskAsync(batchClient, jobId, resourceFile, index, outputContainerSasUrl);\r\n                        index++;\r\n                    }\r\n                }\r\n                tWriter.Info($&quot;Processing finished successfully!&quot;);\r\n            }\r\n        }\r\n<\/pre>\n<p>Como hemos visto, la API de .NET de Batch nos proporciona un control total sobre nuestro servicio de <strong>Azure Batch<\/strong>, y combinando esto con <strong>Azure Functions<\/strong> y un <strong>Blob Storage<\/strong>, podemos realizar ejecuciones de nuestros trabajos por lotes de forma muy r\u00e1pida y sencilla.<\/p>\n<p>En el siguiente <a href=\"https:\/\/github.com\/Azure-Samples\/batch-dotnet-quickstart\">repositorio<\/a>, pod\u00e9is ver un ejemplo concreto de aplicaci\u00f3n de consola que trata todo lo comentado, con todo conectado, y control de errores, excepciones\u2026 Adem\u00e1s, ejecuta una serie de trabajos directamente desde la propia aplicaci\u00f3n de consola.<\/p>\n<p>\u00a1Espero que os resulte de utilidad! \ud83d\ude42<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content --><div id=\"ez-toc-container\" class=\"ez-toc-v2_0_87 ez-toc-wrap-center counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Tabla de contenidos<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\/#Batch_Pool\" >Batch Pool<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\/#Batch_Job\" >Batch Job<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\/#Batch_Task\" >Batch Task<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\/#Automatizacion_de_ejecuciones_Batch_y_Azure_Functions\" >Automatizaci\u00f3n de ejecuciones: Batch y Azure Functions<\/a><\/li><\/ul><\/nav><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Uno de los elementos claves en una soluci\u00f3n de HPC (High Performance Computing) en Azure es Azure Batch. Azure Batch es un servicio de Azure que nos permite, de forma sencilla, crear y administrar un conjunto de nodos de proceso &hellip; <a href=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":162,"featured_media":1717,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-1692","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-azure"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v18.2.1 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>High Performance Computing (HPC) Basics: Empezando a usar Azure Batch - Por una nube sostenible<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"High Performance Computing (HPC) Basics: Empezando a usar Azure Batch\" \/>\n<meta property=\"og:description\" content=\"Uno de los elementos claves en una soluci\u00f3n de HPC (High Performance Computing) en Azure es Azure Batch. Azure Batch es un servicio de Azure que nos permite, de forma sencilla, crear y administrar un conjunto de nodos de proceso &hellip; Continue reading &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\/\" \/>\n<meta property=\"og:site_name\" content=\"Por una nube sostenible\" \/>\n<meta property=\"article:published_time\" content=\"2018-03-16T11:19:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-03-16T11:26:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2018\/03\/High-perfpormance-Computing.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"904\" \/>\n\t<meta property=\"og:image:height\" content=\"473\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Adri\u00e1n Del Rinc\u00f3n L\u00f3pez\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Adri\u00e1n Del Rinc\u00f3n L\u00f3pez\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\\\/\"},\"author\":{\"name\":\"Adri\u00e1n Del Rinc\u00f3n L\u00f3pez\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/#\\\/schema\\\/person\\\/7f6a50bc93473c836a90f1438ddfd247\"},\"headline\":\"High Performance Computing (HPC) Basics: Empezando a usar Azure Batch\",\"datePublished\":\"2018-03-16T11:19:13+00:00\",\"dateModified\":\"2018-03-16T11:26:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\\\/\"},\"wordCount\":1362,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/wp-content\\\/uploads\\\/sites\\\/19\\\/2018\\\/03\\\/High-perfpormance-Computing.jpg\",\"articleSection\":[\"Azure\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\\\/\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\\\/\",\"name\":\"High Performance Computing (HPC) Basics: Empezando a usar Azure Batch - Por una nube sostenible\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/wp-content\\\/uploads\\\/sites\\\/19\\\/2018\\\/03\\\/High-perfpormance-Computing.jpg\",\"datePublished\":\"2018-03-16T11:19:13+00:00\",\"dateModified\":\"2018-03-16T11:26:36+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/#\\\/schema\\\/person\\\/7f6a50bc93473c836a90f1438ddfd247\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/wp-content\\\/uploads\\\/sites\\\/19\\\/2018\\\/03\\\/High-perfpormance-Computing.jpg\",\"contentUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/wp-content\\\/uploads\\\/sites\\\/19\\\/2018\\\/03\\\/High-perfpormance-Computing.jpg\",\"width\":904,\"height\":473},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"High Performance Computing (HPC) Basics: Empezando a usar Azure Batch\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/#website\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/\",\"name\":\"Por una nube sostenible\",\"description\":\"C\u00f3mo no romper los l\u00edmites, c\u00f3mo crear una buena arquitectura y c\u00f3mo hacer un buen mantenimiento\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/#\\\/schema\\\/person\\\/7f6a50bc93473c836a90f1438ddfd247\",\"name\":\"Adri\u00e1n Del Rinc\u00f3n L\u00f3pez\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0a0f5d273d24cb00bb3b4d1a016365e18f38440dc1c66311a85633c723b75485?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0a0f5d273d24cb00bb3b4d1a016365e18f38440dc1c66311a85633c723b75485?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0a0f5d273d24cb00bb3b4d1a016365e18f38440dc1c66311a85633c723b75485?s=96&d=mm&r=g\",\"caption\":\"Adri\u00e1n Del Rinc\u00f3n L\u00f3pez\"},\"description\":\"Ingeniero Superior de Telecomunicaciones por la Universidad Polit\u00e9cnica de Valencia. Desde hace varios a\u00f1os trabajo en el departamento de desarrollo de ENCAMINA. Sobre todo, me apasiona estar al tanto de lo \u00faltimo en tecnolog\u00eda, y si es en el mundo\\\/ecosistema Microsoft y .NET, mejor que mejor. Adem\u00e1s, tambi\u00e9n participo de las redes sociales, si quieres encontrarme, b\u00fascame con el usuario @adderin\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/por-una-nube-sostenible\\\/author\\\/arincon\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"High Performance Computing (HPC) Basics: Empezando a usar Azure Batch - Por una nube sostenible","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\/","og_locale":"es_ES","og_type":"article","og_title":"High Performance Computing (HPC) Basics: Empezando a usar Azure Batch","og_description":"Uno de los elementos claves en una soluci\u00f3n de HPC (High Performance Computing) en Azure es Azure Batch. Azure Batch es un servicio de Azure que nos permite, de forma sencilla, crear y administrar un conjunto de nodos de proceso &hellip; Continue reading &rarr;","og_url":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\/","og_site_name":"Por una nube sostenible","article_published_time":"2018-03-16T11:19:13+00:00","article_modified_time":"2018-03-16T11:26:36+00:00","og_image":[{"width":904,"height":473,"url":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2018\/03\/High-perfpormance-Computing.jpg","type":"image\/jpeg"}],"author":"Adri\u00e1n Del Rinc\u00f3n L\u00f3pez","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Adri\u00e1n Del Rinc\u00f3n L\u00f3pez","Tiempo de lectura":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\/#article","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\/"},"author":{"name":"Adri\u00e1n Del Rinc\u00f3n L\u00f3pez","@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/#\/schema\/person\/7f6a50bc93473c836a90f1438ddfd247"},"headline":"High Performance Computing (HPC) Basics: Empezando a usar Azure Batch","datePublished":"2018-03-16T11:19:13+00:00","dateModified":"2018-03-16T11:26:36+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\/"},"wordCount":1362,"commentCount":0,"image":{"@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2018\/03\/High-perfpormance-Computing.jpg","articleSection":["Azure"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\/","url":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\/","name":"High Performance Computing (HPC) Basics: Empezando a usar Azure Batch - Por una nube sostenible","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\/#primaryimage"},"image":{"@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2018\/03\/High-perfpormance-Computing.jpg","datePublished":"2018-03-16T11:19:13+00:00","dateModified":"2018-03-16T11:26:36+00:00","author":{"@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/#\/schema\/person\/7f6a50bc93473c836a90f1438ddfd247"},"breadcrumb":{"@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\/#primaryimage","url":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2018\/03\/High-perfpormance-Computing.jpg","contentUrl":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-content\/uploads\/sites\/19\/2018\/03\/High-perfpormance-Computing.jpg","width":904,"height":473},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/high-performance-computing-hpc-basics-empezando-usar-azure-batch\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/"},{"@type":"ListItem","position":2,"name":"High Performance Computing (HPC) Basics: Empezando a usar Azure Batch"}]},{"@type":"WebSite","@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/#website","url":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/","name":"Por una nube sostenible","description":"C\u00f3mo no romper los l\u00edmites, c\u00f3mo crear una buena arquitectura y c\u00f3mo hacer un buen mantenimiento","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/#\/schema\/person\/7f6a50bc93473c836a90f1438ddfd247","name":"Adri\u00e1n Del Rinc\u00f3n L\u00f3pez","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/0a0f5d273d24cb00bb3b4d1a016365e18f38440dc1c66311a85633c723b75485?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/0a0f5d273d24cb00bb3b4d1a016365e18f38440dc1c66311a85633c723b75485?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0a0f5d273d24cb00bb3b4d1a016365e18f38440dc1c66311a85633c723b75485?s=96&d=mm&r=g","caption":"Adri\u00e1n Del Rinc\u00f3n L\u00f3pez"},"description":"Ingeniero Superior de Telecomunicaciones por la Universidad Polit\u00e9cnica de Valencia. Desde hace varios a\u00f1os trabajo en el departamento de desarrollo de ENCAMINA. Sobre todo, me apasiona estar al tanto de lo \u00faltimo en tecnolog\u00eda, y si es en el mundo\/ecosistema Microsoft y .NET, mejor que mejor. Adem\u00e1s, tambi\u00e9n participo de las redes sociales, si quieres encontrarme, b\u00fascame con el usuario @adderin","url":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/author\/arincon\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-json\/wp\/v2\/posts\/1692","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-json\/wp\/v2\/users\/162"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-json\/wp\/v2\/comments?post=1692"}],"version-history":[{"count":0,"href":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-json\/wp\/v2\/posts\/1692\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-json\/wp\/v2\/media\/1717"}],"wp:attachment":[{"href":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-json\/wp\/v2\/media?parent=1692"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-json\/wp\/v2\/categories?post=1692"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.encamina.com\/por-una-nube-sostenible\/wp-json\/wp\/v2\/tags?post=1692"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}