Avançar para a área de conteúdo

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

A primeira vez que acessar o developerWorks, um perfil será criado para você. Informações do seu perfil (tais como: nome, país / região, e empresa) estarão disponíveis ao público, que poderá acompanhar qualquer conteúdo que você publicar. Seu perfil no developerWorks pode ser atualizado a qualquer momento.

Todas as informações enviadas são seguras.

  • Fechar [x]

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Todas as informações enviadas são seguras.

  • Fechar [x]

Conversão de representação de dados em tempo real em uma implementação distribuída usando funções nativas do InfoSphere Streams

Uso dos conceitos de sobrecarga de função de C++ com funções nativas do InfoSphere Streams

Bharath Devaraju Bharath Devaraju , Software Engineer, IBM
Bharath Devaraju
Bharath Kumar Devaraju é funcionário da IBM desde 2009. Atualmente, trabalha no desenvolvimento de kit de ferramentas do InfoSphere Streams. Ele é desenvolvedor de solução certificado em QualityStage e DataStage. Ele já trabalhou intensamente em POCs de cliente e auxiliou em atividades de pré-venda para mercados em crescimento.
Mohan Dani , DAAS Cloud Computing Lead, InfoSphere Streams, Enterprise Data Quality Architect, IBM
Mohan Dani atualmente lidera os esforços de computação em nuvem DAAS e tem mais de 11 anos de experiência em TI. Ele tem amplo conhecimento sobre a implementação de grandes soluções corporativas e já teve várias funções de analista de dados, líder de desenvolvimento e arquiteto de solução na IBM, especializado em qualidade de dados. Também é consultor de equipes internas da IBM para pré-venda, pós-venda, excelência de qualidade e liderança de ideias em qualidade de dados.

Resumo:  InfoSphere® Streams permite lidar ou relatar dados e eventos em tempo real. No entanto, pode ser um desafio executar um aplicativo distribuído em diversas plataformas nas quais os dados passam por máquinas de processadores com arquiteturas diferentes. Devido a variações em arquiteturas de processador, a representação dos dados pode ser diferente, o que exige que o desenvolvedor do aplicativo converta a representação antes de aplicar a lógica necessária. Isso vale especialmente se os dados estiverem em formato binário. Ao realizar a conversão de formato de dados em tempo real, logo após eles serem lidos da fonte, é possível obter resultados mais consistentes e significativos.

Data:  15/Out/2012
Nível:  Intermediário Também disponível em :   Inglês
Atividade:  1150 visualizações
Comentários:  


Introdução

Ao executar um aplicativo distribuído em tempo real, o desafio que qualquer desenvolvedor de aplicativo ou solução tem que enfrentar é a variação no formato dos dados. A primeira coisa a fazer é converter o formato, antes de continuar com a análise/processamento. Em uma solução em tempo real, os dados são provenientes de várias origens, que são executadas em várias arquiteturas. Quando os dados chegam de arquiteturas heterogêneas em formato binário bruto, os resultados podem ser inconsistentes ou incorretos. O IBM InfoSphere Streams oferece funções nativas para criar lógica customizada como funções reutilizadas, que podem ser chamadas por um aplicativo Streams Processing Language (SPL). Neste artigo, descreveremos como desenvolver as rotinas de conversão de formato de dados usando funções nativas e explorando os conceitos de sobrecarga de função do C++. Também descreveremos como usar essas funções como parte de uma solução Streams com a ajuda do InfoSphere Streams Studio. A arquitetura de implementação de alto nível é mostrada abaixo.


Figura 1. Conversão de formato de dados em tempo real



Pré-requisitos

  • Pré-requisitos de negócios: O público deste artigo deve ter conhecimentos básicos sobre design e execução de tarefas de aplicativos SPL do InfoSphere Streams e conhecimento intermediário de programação em C++.
  • Pré-requisitos de software: InfoSphere Streams 2.0 e superior.

Preparando o InfoSphere Streams Studio para desenvolvimento de função nativa

SPL

SPL significa Streams Processing Language. É uma linguagem de composição de fluxo de dados distribuído com suporte para desenvolvimento de aplicativos em tempo real. SPL foi criada para oferecer controle sobre os aspectos do código mais importantes para o desempenho. Em especial, o programador controla diretamente a topologia de gráfico e representações de dados, e pode optar por controlar o modelo de encadeamento, colocação, layout físico etc.

A seguir, as etapas para criar a nova função nativa.

  1. Crie um aplicativo SPL no Streams Studio.
  2. Clique no projeto e escolha o novo modelo de função SPL nativa para criar uma definição de função nativa.
  3. Para cada novo operador ou função nativa no Streams, um novo modelo de operador é criado, no qual toda configuração precisa ser especificada. Um fragmento do modelo de operador é mostrado na Figura 2.
  4. Configure o modelo de operador:
    • Especifique o nome do arquivo de cabeçalho que contém a lógica de função.
    • Especifique os protótipos de função, presentes no arquivo de cabeçalho.


    Figura 2. Dependência de biblioteca externa


  5. Os valores que precisam ser definidos para as várias seções no modelo de operador estão na Tabela 1.

Tablela 1. Várias propriedades de modelo de função nativa a serem configuradas
SeçãoPropriedadeDescriçãoValor
Function SetCpp Namespace NameMenciona o nome do namespace no qual as funções C++ são definidasDataConvertors
Header File NameContém o nome do arquivo de cabeçalho no qual as funções C++ são definidas. O arquivo de cabeçalho deve estar presente na pasta resources/impl dentro do aplicativo SPL.DataConvertors.h
Function Set > Prototypes (clique com o botão direito em new child and function)Prototype > ValueEspecifica o protótipo de função. O protótipo precisa fornecer todas as funções nativas no modelo de função.public void endian_swap(int64 x)


Código de função C++ para converter formatos de dados e integrar com o modelo de função nativa do InfoSphere Streams

Ao utilizar o conceito de sobrecarga de função do C++, é possível criar uma função separada para processar dados de vários tipos.

  • Com base no tipo, a função de conversão com o endian apropriado é chamada. Uma função nativa SPL estaria no formato especificado na Lista 1.
    • A seção include é onde todas as referências externas devem ser incluídas.
    • O nome do namespace da função e o nome devem ser os mesmos fornecidos no modelo de função.
    • A lógica de função para todas as funções nativas.

Lista 1. Formato da definição de função nativa no InfoSphere Streams
                 
#include ..
                
namespace <namespace_name>
{
    ret_type swap_endian(parameters..)
    { 
    ...
    }
} 
            

Abaixo está o fragmento de código de função nativo (Lista 2) que realiza a conversão de endian. Com base no tipo de parâmetro, a função apropriada é chamada.


Lista 2. O código de amostra demonstra a lógica para conversão de endian para entrada dos tipos short, long e int
                 
void swap_endian(unsigned short& x)
{
    x = (x>>8) | 
    (x<<8);
}
                
void swap_endian(unsigned int& x)
{
    x = (x>>24) | 
    ((x<<8) & 0x00FF0000) |
    ((x>>8) & 0x0000FF00) |
    (x<<24);
}
                              
void swap_endian(unsigned long& x)
{
    x = (x>>56) | 
    ((x<<40) & 0x00FF000000000000) |
    ((x<<24) & 0x0000FF0000000000) |
    ((x<<8)  & 0x000000FF00000000) |
    ((x>>8)  & 0x00000000FF000000) |
    ((x>>24) & 0x0000000000FF0000) |
    ((x>>40) & 0x000000000000FF00) |
    (x<<56);
} 
            


Usando a função nativa com o operador Functor no InfoSphere Streams usando SPL

Após a função nativa ser desenvolvida, a próxima etapa é usar a função em um aplicativo SPL para realizar a conversão de formato nos dados vindos de várias fontes em tempo real.

Abaixo está o código SPL de amostra do aplicativo que chama a função nativa dentro do operador Functor (Lista 3). O aplicativo lê a entrada de uma porta TCP e realiza a transliteração da entrada antes de propagá-la adiante.

InfoSphere Streams fornece vários adaptadores de origem e dissipador para ler e gravar dados. Qualquer número de dissipadores pode ser usado em um aplicativo SPL em tempo real.


Lista 3. Aplicativo SPL de amostra usando função nativa com o operador Functor para realizar a conversão de formato de dados
                                
composite Main {
    graph
                
    stream<int32 inp> Src =  TCPSource()                                         
    {                                                                        
        param                                                                  
        role                : client;                                        
        address             : "inputdomain.com";                             
        port                : 23145u;                                         
    }                                    
    stream<list<float64> result> Funct = Functor(Src)
    {
        output
            Funct:result=swap_endian(Src.inp);
    }
                
    () as TCPWrite = TCPSink(Funct)
    {
        param
        address:"143.121.112.76";
        role : server;
        port : 21344u;
    } 
}
            

Você está pronto para iniciar a tarefa de conversão de formato de dados em tempo real. Desenvolva e execute a tarefa.


Condições excepcionais

  • InfoSphere Streams fornece um depurador que permite depurar o aplicativo em tempo real. O depurador do Streams tem vários comandos e opções, que podem ser usados para rastrear e validar a saída facilmente. Mais informações sobre o depurador em Debugging with the Streams Debugger.

Conclusão

Falamos sobre como realizar a conversão de formato de dados usando a função nativa do InfoSphere Streams. Explicamos as várias definições de configuração a serem realizadas e como isso pode ser feito no InfoSphere Streams. A conversão de formato de dados serve como um componente essencial para a resolução de resultados inconsistentes e incorretos devido à variação em arquiteturas em um ambiente distribuído.


Recursos

Aprender

Obter produtos e tecnologias

  • Crie seu próximo projeto de desenvolvimento com o software de teste IBM, disponível para download diretamente no developerWorks.

  • Agora é possível usar o DB2 gratuitamente. Faça o download do DB2 Express-C, uma versão gratuita do DB2 Express Edition para a comunidade que oferece os mesmos recursos de dados centrais que o DB2 Express Edition e fornece uma base sólida para desenvolver e implementar aplicativos.

Discutir

Sobre os autores

Bharath Devaraju

Bharath Kumar Devaraju é funcionário da IBM desde 2009. Atualmente, trabalha no desenvolvimento de kit de ferramentas do InfoSphere Streams. Ele é desenvolvedor de solução certificado em QualityStage e DataStage. Ele já trabalhou intensamente em POCs de cliente e auxiliou em atividades de pré-venda para mercados em crescimento.

Mohan Dani atualmente lidera os esforços de computação em nuvem DAAS e tem mais de 11 anos de experiência em TI. Ele tem amplo conhecimento sobre a implementação de grandes soluções corporativas e já teve várias funções de analista de dados, líder de desenvolvimento e arquiteto de solução na IBM, especializado em qualidade de dados. Também é consultor de equipes internas da IBM para pré-venda, pós-venda, excelência de qualidade e liderança de ideias em qualidade de dados.

Ajuda para Relatar Abuso

Relatar abuso

Obrigado. Esta entrada foi sinalizada para atenção do moderador.


Ajuda para Relatar Abuso

Relatar abuso

Falha no envio do Relatório de abuso. Tente novamente mais tarde.


developerWorks: Registre-se


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Selecione seu nome de exibição

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

(Deve possuir de 3 a 31 caracteres.)


Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Classificar este artigo

Comentários

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Information Management
ArticleID=840131
ArticleTitle=Conversão de representação de dados em tempo real em uma implementação distribuída usando funções nativas do InfoSphere Streams
publish-date=10152012