¿Cómo subir un fichero a HDFS, crear una tabla HIVE y convertirlo a Ontología?

En este post vamos a explicar los pasos a seguir para a partir de un fichero que tenga en local podré crear una Ontología en la BDH (Base Datos Histórica) de Sofia2.

IMPORTANTE.: la Plataforma ofrece un mecanismo alternativo para la subida de ficheros Excel/CSV a la BDTR (Base Datos Tiempo Real): https://about.sofia2.com/2015/02/16/generando-y-cargando-ontologias-desde-excel/

Subir fichero al área de Staging (HDFS) de la Plataforma

Para el ejemplo usaremos este fichero health_australia.csv en http://sofia2.org/owncloud/public.php?service=files&t=080ef9344fe62e27e9b5ce8b033956dd que contiene datos públicos de la sanidad en Australia.

Comenzaremos subiendo un fichero al HDFS de la plataforma, para eso iré al Panel de Control de Sofia2 y desde la opción Analytics > subir ficheros a Hadoop

Primero lo bajaré a local y lo arrrastraré al área para subir ficheros:

La Consola me dirá la ruta HDFS del fichero (de esta forma podría acceder a él desde los Notebooks por ejemplo):

Tras acabar lo puedo ver:

Convertir fichero en Staging HDFS a Tabla HIVE

El siguiente paso es convertir este fichero en una tabla HIVE, esto puedo hacerlo desde el Notebook Sofia2, pero es más sencillo utilizar el asistente Sofia2 que encontramos en Analytics > Crear Tabla HIVE desde ficher HDFS

En la pantalla puedo ver todos los ficheros que he cargado al área de Staging con mi usuario:

Iré completando la información que me solicitan:

A la tabla la llamaré health_australia

En la primera fila del CSV tengo los nombres de los atributos:

Indico que el delimitador de campos es un ,

Tras esto pincho en que me permite ver los atributos que componen el fichero, un valor, y el tipo de dato.

Desde aquí puedo seleccionar los atributos que quiero incluir en mi tabla HIVE y los tipos de datos.

Para que sea más sencillo cambiaré los nombres de los campos y seleccionaré que el campo real_expenditure_millions es Int dejándolo así:

Ya puedo seleccionar

Que genera esta sentencia CREATE TABLE para HIVE:

Selecciono

Crear Ontología desde Tabla HIVE

Una vez creada la tabla con el botón Crear tabla esta pantalla me lleva a la U de Creación de Ontologías desde Tabla HIVE, también puedo ir desde la opción de menú Analytics>Crear ontología desde tabla HIVE

Seleccionaré la tabla health_australia

Y seleccionando me generará el JSON-Schema de la ontología que representa esta tabla HIVE:

Tras esto iré a la pestaña Parametrización donde podrá configurar parámetros como estos, debo marcar al menos Activa:

Finalmente selecciono el botón que me ha creado la ontología que representa el fichero inicial health_australia.csv que cargamos.

Explotando la Ontología

Y una vez tengo la ontología creada ya podré consultarla desde la Consola BDTR y BDH (herramientas > Consola BDTR y BDH):

Por Ejemplo puedo sacar los Gastos por estado:

select state, sum(spending)/1000 SpendinginBillions from health_autralia group by state

order by SpendinginBillions desc

Que da:

O por categoría:

select category, sum(spending)/1000 SpendinginBillions from health_autralia

group by category

order by SpendinginBillions desc

¿Cómo subir un fichero a HDFS, crear una tabla HIVE y convertirlo a Ontología?

¿Cómo hacer un análisis del sentimiento de Twitter con Sofia2?

En este post vamos a explicar cómo hacer un análisis básico del sentimiento de Twitter.

Para eso usaremos estos 2 componentes de la Plataforma

· El componente de escucha de Twitter

· El módulo Notebook

Planificar una escucha en Twitter:

Para hacer esto desde el Panel de Control Sofia2 iré a la opción social media > Búsqueda programada

En mi caso tengo planificada la escucha sobre el hashtag #hadoop durante 2 días.

Los datos se estarán almacenando en una ontología nueva llamada twitter_streaming_find_hadoop

Desde herramientas > Consola BDTR y BDH puedo consultar estos datos:

Que me devuelve datos como estos:

Si hago un puedo ver el número de registros que tengo en la ontología:

Crear un Notebook para explotar la información de la ontología:

A continuación crearé un Notebook que convierta los datos de la ontología a un DataFrame de Spark y accederá a él vía Spark SQL.

1.Primero registro el JAR de Sofia2 que permite acceder al API de Sofia2 desde los Notebooks (ver post) con esta sentencia

NOTA: En el entorno CloudLab puede ser necesario contactar con soporte para registrar este JAR.

2.Tras esto crearé una conexión con la Plataforma con este código (en breve una versión Scala):

En <mi_kp> debo colocar el identificador de un KP, si no tengo ninguno puedo crearlos en la opción de menú kps/apps sofia2 > Mis KPs/APPs

En <mi_token> debo colocar el token asociado a ese KP, puedo obtenerlo desde kps/apps sofia2 > Mis Tokens

Seleccionaré el KP creado y pincharé en

Una vez creado podré verlo en Listado de Tokens (así como la última conexión):

<code>

import com.indra.sofia2.ssap.kp.config.MQTTConnectionConfig

import org.fusesource.mqtt.client.QoS

import com.indra.sofia2.ssap.kp.Kp

import com.indra.sofia2.ssap.kp.implementations.KpMQTTClient

import com.indra.sofia2.ssap.kp.SSAPMessageGenerator

import java.util.UUID

import com.indra.sofia2.ssap.ssap.SSAPMessage

import com.indra.sofia2.ssap.ssap.SSAPQueryType

import com.indra.sofia2.ssap.ssap.body.SSAPBodyReturnMessage

//conexion

val config = new MQTTConnectionConfig();

config.setHostSIB("localhost");

config.setPortSIB(1883);

config.setKeepAliveInSeconds(5);

config.setQualityOfService(QoS.AT_LEAST_ONCE);

config.setTimeOutConnectionSIB(5000);

val kpClient = new KpMQTTClient(config);

kpClient.connect();

//JOIN

val msgJoin = SSAPMessageGenerator.getInstance().generateJoinByTokenMessage("<mi_token>",

"KP_lmgracia" + ":" + UUID.randomUUID().toString());

val response = kpClient.send(msgJoin);

val sessionKey = response.getSessionKey();

</code>

3.Tras la conexión con la plataforma ya podré hacer una query sobre la ontología en la que estoy almacenando los tuits y convertirla a DataFrame, para eso:

Como veis primero estoy haciendo una query (select * from twitter_streaming_find_hadoop) sobre la ontología twitter_streaming_find_hadoop

Esto me devuelve un mensaje JSON con las instancias de la ontología, y desde ahí creo un SQLContext de Spark SQL y lo registro como una tabla temporal con el mismo nombre que la ontología.

<code>

//query

val msgQuery = SSAPMessageGenerator.getInstance().generateQueryMessage(sessionKey, "twitter_streaming_find_hadoop", "select * from twitter_streaming_find_hadoop", SSAPQueryType.valueOf("SQLLIKE"))

val response = kpClient.send(msgQuery)

val responseBody = SSAPBodyReturnMessage.fromJsonToSSAPBodyReturnMessage(response.getBody())

val events = sc.parallelize(responseBody.getData() :: Nil)

val df = sqlContext.read.json(events)

//df.printSchema()

df.registerTempTable("twitter_streaming_find_hadoop")

</code>

Puedo también sacar por pantalla el esquema del DataFrame creado con:

Que me da:

4.Ya puedo empezar a hacer las queries con Spark SQL,

desde las más sencillas:

Agrupando:

5.El paso final será hacer un análisis del sentimiento, para eso crearé una función en Spark a la que llamaré desde la sentencia Spark SQL:

Registro la función (como podéis ver es una versión muy básica):

<code>

def sentiment(s:String) : String = {

val positive = Array("like", "love", "good", "great", "happy", "cool", "the", "one", "launched", "new", "super", "fast", "the")

val negative = Array("hate", "bad", "stupid", "shit", "awful", "old", "slow", "broken", "stolen", "work", "annoy")

var st = 0;

val words = s.split(" ")

positive.foreach(p =>

words.foreach(w =>

if(p==w) st = st+1

)

)

negative.foreach(p=>

words.foreach(w=>

if(p==w) st = st-1

)

)

if(st>0)

"positive"

else if(st<0)

"negative"

else

"neutral"

}

sqlc.udf.register("sentiment", sentiment _)

</code>

6.Finalmente lanzo la query que hace el análisis del sentimiento sobre l texto del tuit:

<code>

%sql

SELECT sentiment(Tweet.tweet_text), count(1) FROM twitter_streaming_find_hadoop GROUP BY sentiment(Tweet.tweet_text)

</code>

¿Cómo hacer un análisis del sentimiento de Twitter con Sofia2?

Un poco de Beacons: iBeacon vs Eddystone

Los Beacons permiten hacer localización en escenarios donde GPS, WiFi o celdas no lo permiten.

Los Beacons se basan en la tecnología BLE (Bluetooth Low Energy) que sobre Bluetooth ofrece ventajas como:

· No requiere emparejamiento

· Consumo de un 50% a un 99% menos de energía que Bluetooth

· Tiene un coste mucho menor (70%)

· Funciona en un rango de sobre los 50 m, aunque algunos pueden funcionar en rangos mucho mayores (cientos de metros)

La tecnología de Beacons se usa mucho en el ámbito Retail (podéis ver este link: Over 100 use cases and examples for iBeacon technology) donde los beacons entregan contenido en base a la proximidad, para por ejemplo marketing georreferenciado.

Existen numerosos fabricantes (ver link), un fabricante interesante es Estimote, que además de un producto muy interesante con un SDK potente explican de forma sencilla diversos casos de uso:

La tecnología Beacon más implantada y estándar en la actualidad es la de iBeacon creada por Apple,aunque Google introdujo en 2015 otro estándar abierto y multiplataforma: Eddystone.

Eddystone permite comunicar datos sin necesidad de tener una App y además puede transportar información del sensor (temperatura, humedad,…) lo que la hace muy interesante para Internet of Things:

IBeacon Eddystone
-Funciona con iOS y Android

-Transmite un UUID (16 dígitos), Major (4) y Minor (4), y Tx Power (con 3 rangos), nada más

-Apps hacen el tracking de los iBeacons en base a este identificador

-Requieren una App para recibir el UUID y “procesarlo”

-3 tipos de frames: Eddystone-URL, Eddystone-UID y Eddystone-TLM. Un beacon puede transmitir uno o todos los tipos

-Eddystone-URL (Browser Beacon): hace broadcast de una URL, se pone contenido al que todo el mundo puede acceder, por tanto no se necesita una APP pero sí un Beacon Broser

-Eddystone-UID (App Beacon): require una App para recibir el UUID, es similar al iBeacon pero sólo hace broadcast de 16 díitos (10 para NameSpace y 6 para Instance). 2 beacons no pueden tener el mismo UUID

-Eddystone-TLM: hace un bridge entre ambos usos, se usa para transmitir información del sensor desde el beacon, como el estado de la batería, temperatura,…

Un poco de Beacons: iBeacon vs Eddystone

Las 5 áreas emergentes en el ámbito IoT

Gartner ya predijo hace tiempo que habrá más de 25 billones de dispositivos conectados en 2020, generando ingresos de más de 300 billones de dólares…pero incluso con este pronóstico de crecimiento aún muchas empresas no entienden la oportunidad y aún no están invirtiendo en IoT. Algunas consultoras creen que una de las razones es que el concepto se está malinterpretando.

En este informe la consulta Bain & Company analiza los principales campos emergentes para IoT en los que las empresas deben centrarse, son:

Consumer IoT

Este campo será liderado por gigantes en el campo de los móviles como Apple, Google y Samsung que están extendiendo su liderazgo en el mercado lanzando nuevos productos en el ámbito máquinas autónomas, robots y casas inteligentes.

Este campo de batalla está ya activo con Google a la vanguardia mediante la adquisición de fabricante de termostatos inteligentes Nest Labs, aunque Samsung con su compra de SmartThings y Apple (a través de su puesta en marcha de HomeKit) no están muy atrás.

Bain & Company dice que el vendedor que sea capaz de crear el sistema Smart Home más dinámico y útil para fidelizar más clientes en su ecosistema liderará el segmento (si ya es difícil cambiar de un teléfono con Android a iOS imaginad tratad de hacerlo cuando tu coche con Android no se conecta al teléfono iOS, o viceversa, advierte la consultora).

The Industrial Internet

El gobierno alemán está completamente centrado en este ámbito (también llamado "Industria 4.0").

Bain & Company cree que Internet Industrial será incluso más grande que el mercado de consumo, ofreciendo enormes oportunidades para algunas de las industrias más grandes del mundo para reducir costes, aumentar la demanda y ampliar su alcance.

Para las industrias implicadas, los partnerships serán críticos. Las empresas que pueden cooperan con empresas de tecnología tendrán recompensas enormes en los años venideros.

Networking

Gigantes en este ámbito como Cisco Systems Inc., Ericsson, Huawei Technologies Co. Ltd. y Nokia Corp. han invertido fuertemente ya en IoT.

Estas empresas lo ven como una oportunidad masiva para conseguir nuevos beneficios, ya que por ejemplo numerosas industrias exigirán poder realizar análisis de sus redes en tiempo real. Y la única manera de hacerlo es con una red muy eficiente que es capaz de soportar velocidades de Internet ultrarrápidas.

Por supuesto, no sólo las megaindustrias exigirán mayores recursos de red, las casas inteligentes también, los consumidores van a necesitar acceso a las redes mucho más rápidos y más potentes que los que actualmente tienen y para esto se necesitan routers más rápidos e infraestructura de red para conexión Wi-Fi.

Real-time Analytics

La difusión de Internet en la empresa requerirá una mayor demanda de análisis en tiempo real tanto de redes, de servidores, sensores y máquinas.

De hecho, la Analítica será tan grande que las empresas requerirán de servidores dedicados en la nube para poder realizarlo, esto sólo puede beneficiar a proveedores de cloud como Amazon Web Services y Microsoft Azure.

Bain & Company cree que los partnerships entre las entre empresas y proveedores de Analytics llevará a nuevas innovaciones en muchas áreas como ya está pasando con la colaboración entre el fabricante de maquinaria agrícola Deere & Company y Amazon Web Services o la colaboración entre IBM y salud firma Medtronic Co….

Self-driving Cars & Robots

La aparición de tecnologías como la robótica, aviones no tripulados y vehículos sin conductor conducirá a una mayor autonomía que ofrece muchos beneficios para los consumidores y la empresa.

Empresas como Amazon.com, Inc. y Google ya están probando drones para entregas, topografía y otros fines.

En Japón los robots ya están haciendo trabajos de seres humanos en negocios como hoteles y restaurantes, mientras que empresas como Uber y Google han estado probando coches autónomos durante algún tiempo ya.

Leer más

Las 5 áreas emergentes en el ámbito IoT

The complete list of IoT foundation posts

What is the Internet of Things and why should I care?

IoT, M2M, IIoT…what’s the difference?

Is IoT really a new concept?

Why is there such growth in connected devices?

What can become connected?

How can IoT impact on the bottom line?

What is an IoT platform?

How are products connected?

Why can’t any developer connect a product?

What are the pitfalls to look out for when connecting a product?

The complete list of IoT foundation posts

Protocolos de automatización

La comunicación con los dispositivos relacionados con el ámbito de la automatización debe cumplir unas características peculiares como son la necesidad de intercomunicación en tiempo real y la resistencia a un ambiente hostil (ruido electromagnético y condiciones ambientales duras).

 

Las redes formadas por estos dispositivos se pueden clasificar según el entorno en el que van a ser instaladas:

 

  • Red de Factoría: Alto volumen de información y tiempos de respuesta no críticos.
  • Red de Planta: Cubrir áreas extensas, gestión optima de errores, priorización de mensajería y amplio ancho de banda.
  • Red de Célula: Mensajes cortos, eventos discretos, bajo coste de instalación, gestión de errores y priorización, alta fiabilidad y rápida recuperación ante errores.
  • Bus de Campo: Sustituye el cableado entre sensores-actuadores y los elementos de control. Deben ser de bajo coste, tiempo real, interconexión de controladores con todo tipo de dispositivos entrada-salida.

Seguir leyendo “Protocolos de automatización”

Protocolos de automatización