Controlando el Clúster de HDInsight (Hadoop) programáticamente y ahorrando costes: Con C# !!!

imageMuy buenas,

Después de varios posts en los que hemos estado hablando de HDInsight (Hadoop de Microsoft), aun a pesar de quedarnos pendientes muchos puntos sobre los que hablar, en esta ocasión me gustaría profundizar en la gestión automática de HDInsight.

 

La importancia de este tema radica principalmente en los siguientes puntos:

  • El coste de HDInsight, que dependerá del tiempo que tendremos activas las máquinas de Windows Azure. Recordemos que los nodos necesarios para trabajar con el clúster de HDInsight son como mínimo 2 máquinas virtuales: Una como “Head Node” A4  [L] (8 x 1.6GHz CPU, 14GB RAM, 2,040GB Storage) y otra como “Compute Node” A3 [XL] (4 x 1.6GHz CPU, 7GB RAM, 1,000GB Storage).
  • Ejecución temporal de Jobs

Teniendo en cuenta estos puntos podemos:

  • Hacer un mayor aprovechamiento de HDInsight
  • Conseguir una reducción de los costes o, incluso,
  • Por el mismo coste, obtener una mayor velocidad de proceso, aprovisionando más máquinas durante el menor tiempo posible.

Los pasos para conseguirlo programáticamente con C#:

1) Crear un certificado e instalarlo en local con el fin de poder hacer el despliegue automático:

"C:Program Files (x86)Microsoft SDKsWindowsv7.1ABinmakecert" -sky exchange -r -n "CN=WAHDInsight" -pe -a sha1 -len 2048 -ss My "WAHDInsight.cer"

 

2) Crear un proyecto de tipo consola.

3) Añadir al proyecto las referencias “Microsoft .NET API For Windows Azure HDInsight Cluster Management”  (versión actual: 0.8.4903.27316).

4) Incluir el siguiente código:

   1: static void Main(string[] args)

   2: {

   3:     // Get certificate

   4:     var store = new X509Store();

   5:     store.Open(OpenFlags.ReadOnly);

   6:     var cert = store.Certificates.Cast<X509Certificate2>().First(

   7:         item => item.Thumbprint.Equals(Subscription.Thumbprint, StringComparison.InvariantCultureIgnoreCase));

   8:  

   9:  

  10:     // Create client object to connect to Azure

  11:     var client = new ClusterProvisioningClient(Subscription.SubscriptionId, cert);

  12:  

  13:  

  14:     // Specify details of the cluster to create

  15:     var clusterInfo = new HDInsightClusterCreationDetails();

  16:     clusterInfo.Name = Cluster.Name;

  17:     clusterInfo.Location = Cluster.Location;

  18:     clusterInfo.DefaultStorageAccountName = Subscription.StorageAccountName;

  19:     clusterInfo.DefaultStorageAccountKey = Subscription.StorageAccountKey;

  20:     clusterInfo.DefaultStorageContainer = Subscription.StorageContainer;

  21:     clusterInfo.UserName = Subscription.UserName;

  22:     clusterInfo.Password = Subscription.Password;

  23:     clusterInfo.ClusterSizeInNodes = Cluster.Size;

  24:             

  25:     var cluster = client.CreateCluster(clusterInfo);

  26:     Console.WriteLine("Created cluster: {0}", cluster.ConnectionUrl);

  27: }

5) Crear un fichero de configuración “App.config” e incluir los siguientes parámetros:

   1: <appSettings>

   2:   <add key="SubscriptionId" value="###SUBSCRIPTION_ID###"/>

   3:   <add key="Thumbprint" value="‎###CERTIFICATE_THUMBPRINT###"/>

   4:  

   5:   <add key="StorageAccountName" value="###AZURE_STORAGE_NAME###.blob.core.windows.net"/>

   6:   <add key="StorageAccountKey" value="###AZURE_STORAGE_KEY###"/>

   7:   <add key="StorageContainer" value="###AZURE_STORAGE_CONTAINER###"/>

   8:  

   9:   <add key="UserName" value="admin"/>

  10:   <add key="Password" value="###PASSWORD_CLUSTER_HDINSIGHT###"/>

  11: </appSettings>

6) Tras unos minutos, el Cluster estará creado y podremos trabajar con él tal y como hemos visto en post anteriores.

image

image

7) Finalizada las tareas a realizar con el Cluster, borramos el cluster para evitar el consumo innecesario de €€€ por tener activas las Maquinas virtuales que componen el Cluster.

Nota: Recordemos que se factura por hora de VM aunque estas no estén trabajando.

   1: // Get certificate

   2: var store = new X509Store();

   3: store.Open(OpenFlags.ReadOnly);

   4: var cert = store.Certificates.Cast<;X509Certificate2>().First(

   5:     item =>; item.Thumbprint.Equals(Subscription.Thumbprint, StringComparison.InvariantCultureIgnoreCase));

   6:  

   7:  

   8: // Create client object to connect to Azure

   9: var client = new ClusterProvisioningClient(Subscription.SubscriptionId, cert);

  10: 

  11: // Remove cluster "mycluster"

  12: client.DeleteCluster(Cluster.Name);

 

Un ejemplo completo del código podéis encontrarlo aquí.

Después de esto, nadie puede decir que Windows Azure no es Auto-Scalable, Guiño

 

Continuaremos programando para HDInsight…

 

Saludos and happy HDInsight programming  !

Juanlu, ElGuerre

HDInsight: Afinando y ajustando tuercas en la nueva versión. El BIGDATA de mis Twitts!

image

Muy buenas,

Antes de nada gracias a todos aquellos a los que os gustan mis posts  y que esperáis que siga con ellos. Sinceramente, esto me anima a continuar y seguir al pie del cañón. En segundo lugar, perdonad por la espera, pero, hay veces que las situaciones personales/profesionales requieren una dedicación mayor de la habitual. ¡¡¡ Gracias a todos por la paciencia y los ánimos !!!

¡Ahora al turrón!. !Recordad que estuvimos viendo el funcionamiento de algunos componentes de Hadoop (HDInsight):

  • Hadoop
  • HiveQL
  • Hive desde Excel, Power Pivot y Power View
  • Sqoop I
  • Sqoop II
  • Mahout
  •  

    Durante esta semana he retomado el tema y he estado siguiendo algunos ejemplos para ver donde continuar sacando partido a BIGDATA. La nueva versión (0.9 en Azure) que incluye todo esto, y la inclusión de HDInsight en el portal de Azure, hay que probarla. Pues bien:

    1) En el portal de Windows Azure, ya tenemos la opción integrada:

    image

    2) La configuración del driver de ODBC y configuración con el Storage de Azure han desaparecido y ahora son trasparentes y “Out of the box”.

    3) El AddIn de Excel para Hive, también es diferente. Hemos perdido el Ribbon, y el acceso pasa a realizarse siguiendo estos pasos:

    4) Configuramos el ODBC con siempre, esto no ha cambiado. A excepción de que el dominio para HDInsight si, ahora es “.azurehdinsight.net”:

    image

    5) Desde Excel:

    imageimageimage

    Nota: Aquí podemos ver el detalle completo de la configuración.

     

    Con estos cambios presentes, ya podemos continuar trabajando.

    Como en ocasiones anteriores, volveré a partir de un ejemplo, en este caso de este, donde podemos ver como capturar información e Twitter y explotarla hasta límites impensables dentro del mundo profesional y concretamente en campañas de marketing, entre otros.

     

    Recordemos también que un fichero puede subirse a HDFS además del “Copy & Paste” como se muestra en el ejemplo, de esta otra manera:

    image

    Tras la ejecución del ejemplo, tendremos una tabla en Hive (“twitter_temp”) con todos los campos de Twitter para el usuario indicado, “juanluelguerre”, en mi caso, y con una muestra de datos equivalente al tiempo que hayamos dejado a “Curl” obteniendo información según este código:

       1: curl -d @twitter_parameters.txt -k https://stream.twitter.com/1/statuses/filter.json -u user:{password} >>twitter_stream_seq2.txt

     

    Una vez completados todos estos pasos sólo necesitamos explotar los datos en PowerView y obtener información similar a la siguiente, donde podemos ver la procedencia de algunos de mis seguidores por “Time Zone” y “User Location”:

    image

    Hasta aquí un pequeño repaso sobre hasta donde llegar con HDInsight.

    Algunas notas interesantes:

    • HDFS se apoya 100% en Azure BLOBS Storage. A este respecto aunque existen ventajas, también es cierto que pueden ocurrir penalizaciones/retardos en algunos casos, por lo que tendremos que tener esto presente en todo momento. Mas detalle aquí.
    • Ahora .NET, ya no es un wrapper de Java, hasta donde he podido averiguar. Sin embargo, si la implementación de un Map/Reduce es muy compleja, la recomendación sigue siendo hacer uso de JAVA !!
    • Cuando hablamos de HDInsight, debemos saber que existe una compañía como es Hortonworks junto con Microsoft se está encargando de conseguir lo mejor de esta plataforma (HDInsight).
    • La versión OnPremise de HDInsight es menor que la de Windows Azure, pero en breve ambas estarán a la par, es decir, la versión 1.0, donde podremos ver grandes mejoras, ¡Veremos que nos deparan las mismas!

    Gracias a todos nuevamente !!!

    Saludos @Home
    Juanlu, ElGuerre