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]

Migrando os aplicativos SPADE do InfoSphere Streams para SPL, Parte 3: Migrar aplicativos SPADE com funções definidas pelo usuário

Um guia introdutório de exemplos

Kevin Erickson, Senior Software Engineer, I.B.M.
Photo of Kevin Erickson
Kevin Erickson passou a fazer parte da IBM em Rochester, MN, em 1981, como engenheiro eletricista trabalhando no desenvolvimento e teste de unidades de disco rígido. Ele contribuiu para uma grande variedade de produtos e tecnologias IBM, desde sistemas de controle de servomecanismo de eixo e atuador de disco rígido até componentes de kernel do sistema operacional do AS/400 e sucessor. Mais recentemente, Kevin trabalhou no teste de desempenho do supercomputador Roadrunner, o primeiro computador a quebrar a barreira de 1 petaflop. Em 2009, ele se transferiu para o Software Group para trabalhar com a equipe do InfoSphere Streams, primariamente em diversas funções relacionadas a testes. Ao longo de sua carreira na IBM, Kevin recebeu 14 patentes nos EUA e várias em outros países. Ele possui bacharelado em Engenharia Elétrica da Universidade de Minnesota.
Richard P. King, Senior Programmer, IBM
Richard King é membro da equipe do InfoSphere Streams há vários anos. Quando ele passou a fazer parte da IBM em 1977, trabalhou como Associate Programmer no desenvolvimento do System/38. Desde sua transferência para a Research Division da IBM no IBM Thomas J. Watson Research Center in Yorktown em 1981, ele trabalhou em uma ampla gama de projetos, incluindo o design e o desenvolvimento do que se tornou a IBM Sysplex Coupling Facility. Richard é bacharel em Engenharia Industrial e Pesquisa de Operações pela Universidade Cornell e mestre em Pesquisa de Operações e Engenharia Industrial pela Universidade Northwestern.

Resumo:  O novo recurso mais significativo da Versão 2.0 do produto IBM InfoSphere® Streams é a transformação do modelo de linguagem de programação de Stream Processing Application Declarative Engine (SPADE) para Stream Processing Language (SPL). Os usuários com aplicativos SPADE de versões anteriores precisarão migrar e portar seus aplicativos para SPL ao atualizar suas instalações para a Versão 2.0. Este tutorial é a Parte 3 de uma série com 5 partes que usa exemplos reais de SPADE para demonstrar uma série de procedimentos detalhados para migrar e portar diferentes tipos de conteúdo de aplicativos SPADE. A Parte 3 demonstra a migração de aplicativos SPADE com funções definidas pelo usuário.

Visualizar mais conteúdo nesta série

Data:  18/Jul/2011
Nível:  Intermediário

Atividade:  2895 visualizações

Migrando o aplicativo SPADE com funções definidas pelo usuário para SPL

A próxima etapa do processo de migração consiste em correções pós-conversão e na portagem do código e ambiente migrados. Como mostrado na seção anterior, vários erros, avisos e mensagens informativas podem ocorrer como resultado da migração. Abordar e avaliar esses itens, e corrigi-los quando necessário, é a primeira etapa importante no processo de portabilidade. Após a conclusão dessas correções iniciais, é necessário realizar qualquer outra portabilidade que não tenha sido automaticamente manuseada ou que tenha sido identificada como necessária pelo tradutor spade-to-spl. O procedimento a seguir descreve as etapas para fazer isso, abordando as mensagens da mais fácil até a mais difícil.

  1. Avalie a mensagem de aviso na Listagem 5 da lista de mensagens de migração gerada pelo comando de tradução spade-to-spl.

    Como os seletores de coluna não são suportados em SPL, o tradutor avisa sobre esse uso no aplicativo SPADE. Ao usar o formato comma separated value (csv), espera-se que o FileSource extraia todas as colunas em cada linha exatamente conforme o formatado e apresente cada uma dessas colunas como um atributo na tupla de saída. Nesse caso, embora os seletores de coluna estejam sendo codificados, não há quebras reais na especificação das colunas e elas correspondem precisamente ao esquema de saída. Além disso, não há colunas extras nos dados de entrada. Portanto, esse aviso é benigno e não é necessário fazer outras alterações por causa dele.

  2. Avalie as mensagens informativas na Listagem 6 e na Listagem 7.

    A substituição de toFloat com um cast por float32 é apropriada. Não é necessário fazer algo para esses itens.

  3. Avalie a mensagem de erro na Listagem 10.

    Embora esse item tenha sido marcado como um erro, a migração não é possível, pois não há um recurso de depuração de função compile-time equivalente no SPL. Portanto, não é necessário fazer algo para esse item.

  4. Avalie as mensagens de aviso na Listagem 8 e na Listagem 9.

    Nesse caso, o tradutor escolhe incluir a linha ‘writePunctuations : true;’ como parte da lista de parâmetros do operador FileSink, pois o aplicativo SPADE original não indicou especificamente que a pontuação deve ser ignorada. O aplicativo SPADE original não incluiu qualquer pontuação no arquivo de saída resultante. A opção de incluir ou não a pontuação depende de como o arquivo de saída será analisado e usado. Para o exemplo deste tutorial, a fim de corresponder melhor com o comportamento do aplicativo SPADE original, exclua ou comente essa linha de pontuação no código fonte do aplicativo SPL migrado, salve e saia do arquivo.

    cd myspl
    my_editor udf_at_work.spl &
    Delete the ‘writePunctuations : true;’ lines, or comment each out ‘//
    writePunctuations : true;’.
    

  5. Avalie as mensagens de erro na Listagem 1, Listagem 2, Listagem 3 e na Listagem 4.

    A correção dos erros desses itens envolve uma quantidade de trabalho substancial. Exige a criação de uma determinada estrutura de diretórios que contém arquivos de cabeçalho C++ e arquivos de código de implementação, código de biblioteca compilado, um modelo de função xml e assim por diante. O tradutor cria um esqueleto com essa estrutura de diretório, arquivos de código e modelo de função, enquanto você pode criar outras partes. As etapas detalhadas estão divididas em várias tarefas, descritas nas seções a seguir.

Atualizando o arquivo de modelo de função

Neste ponto, o tradutor já chamou a atenção sobre alguns erros relacionados à necessidade de especificar algumas coisas no arquivo de modelo de função. Um esqueleto deste arquivo foi criado durante o processo de tradução e agora você precisa atualizá-lo com informações correspondentes ao aplicativo SPADE original. Após a correção de todos os problemas encontrados durante o processo de tradução, com exceção dos erros relacionados ao modelo de função, a próxima etapa é investigar ainda mais esses erros. A melhor maneira de obter informações adicionais sobre esses erros é tentando compilar o aplicativo SPL.

  1. Altere os diretórios para o diretório do aplicativo SPL.
    cd ~/migrationsamples/udf/myspl
    

  2. Compile o aplicativo.
    sc -T -M udf_at_work
    

    Após a compilação, uma lista de erros parecida com a seguinte pode ser exibida. Os três primeiros erros estão associados à forma em linha da função definida pelo usuário, enquanto os restantes estão associados à forma de biblioteca. Ambos os conjuntos de erros são controlados ao mesmo tempo ao atualizar o arquivo de modelo de função.

    Lista 11. Mensagem de erro

    udf_at_work.spl:97:100: CDISP0052E ERROR: Unknown callee 
    function 'getStateTaxPercentage(rstring)'.



    Lista 12. Mensagem de erro
    udf_at_work.spl:97:149: CDISP0052E ERROR: Unknown callee 
    function 'getTotalTax(rstring, float32, int32)'.



    Lista 13. Mensagem de erro
    udf_at_work.spl:97:243: CDISP0052E ERROR: Unknown callee 
    function 'getShipmentTrackingNumber(rstring, rstring)'.



    Lista 14. Mensagem de erro
    udf_at_work.spl:126:101: CDISP0052E ERROR: Unknown callee 
    function 'libGetStateTaxPercentage(rstring)'.



    Lista 15. Mensagem de erro
    udf_at_work.spl:126:153: CDISP0052E ERROR: Unknown callee 
    function 'libGetTotalTax(rstring, float32, int32)'.



    Lista 16. Mensagem de erro
    udf_at_work.spl:126:250: CDISP0052E ERROR: Unknown callee 
    function 'libGetShipmentTrackingNumber(rstring, rstring)'.

Tablela 1 mostra o arquivo function.xml do esqueleto, gerado pelo tradutor.


Tablela 1. Arquivo function.xml do esqueleto
Nº da linhaCódigo
1<functionModel
2  xmlns="http://www.ibm.com/xmlns/prod/streams/spl/function"
3  xmlns:cmn="http://www.ibm.com/xmlns/prod/streams/spl/common"
4  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5  xsi:schemaLocation="http://www.ibm.com/xmlns/prod/streams/spl/function functionModel.xsd">
6  <functionSet>
7    <!-- header file to include from within C++ code -->
8    <headerFileName>Sample.h</headerFileName>
9    <!-- functions lists the SPL prototypes of the functions implemented in this library -->
10    <functions>
11      <function>
12        <!-- use of CDATA allows easy use of <> in the prototypes -->
13        <prototype><![CDATA[ public void replaceMe() ]]></prototype>
14      </function>
15    </functions>
16    <dependencies>
17      <!-- This library can have several dependencies. Only one is used here. -->
18      <library>
19        <!-- A description for this library -->
20        <cmn:description>Sample-Functions</cmn:description>
21        <cmn:managedLibrary>
22          <!-- the name of the library for linking. Will be used as -lSample -->
23          <cmn:lib>Sample</cmn:lib>
24          <!-- Where to find the library. Relative to the current directory.
25            Will be used as -L<dir>/lib -->
26          <cmn:libPath>lib</cmn:libPath>
27          <!-- Where to find the include file. Relative to the current directory.
28            Will be used as -I<dir> -->
29          <cmn:includePath>./</cmn:includePath>
30        </cmn:managedLibrary>
31      </library>
32    </dependencies>
33  </functionSet>
34</functionModel>

Este arquivo é colocado sob o diretório do aplicativo SPL com o caminho functions/native.function/function.xml. Você precisa inserir informações específicas em várias seções pertinentes no arquivo descrevendo a função que está sendo implementada. Nesse caso específico, a forma em linha da função e a forma de biblioteca da função são descritas no mesmo arquivo para demonstrar como conjuntos diferentes de funções são manuseados dentro do mesmo namespace de kit de ferramentas. Para fazer isso, você precisa de duas seções <functionSet>: uma para a implementação de inclusão em linha e outra para a implementação de biblioteca de código. Complete as seguintes etapas para criar duas seções <functionSet>.

  1. Edite o arquivo de modelo de função function.xml para fornecer seções <functionSet> para as implementações em linha e de biblioteca.
    my_editor functions/native.function/function.xml &
    

  2. Copie e cole o código entre as linhas 6 e 33, fazendo a seção replicada inicialmente se tornar as linhas 34 a 61 e a tag </functionModel> mudando para a linha 62.
  3. Salve e saia de my_editor.

As informações que entram em cada uma dessas seções estão descritas abaixo. Observe que outras modificações resultarão em mais alterações de número de linha, mas isso é um ponto de partida.

3 de 10 | Anterior | Próximo

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Information Management
ArticleID=699981
TutorialTitle=Migrando os aplicativos SPADE do InfoSphere Streams para SPL, Parte 3: Migrar aplicativos SPADE com funções definidas pelo usuário
publish-date=07182011
author1-email=kjerick@us.ibm.com
author1-email-cc=
author2-email=rpk@us.ibm.com
author2-email-cc=