jueves, 20 de junio de 2013

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:

Teniendo en cuenta estos puntos podemos:

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 SDKs\Windows\v7.1A\Bin\makecert" -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

Etiquetas: , ,


lunes, 10 de junio de 2013

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


  • Etiquetas: ,


    This page is powered by Blogger. Isn't yours?