Eu me deparei com este artigo: que menciona como calcular a média móvel usando o Hadoop. Observe que todos os registros de uma CHAVE devem ser classificados e depois reduzidos. Agora, suponha que os registros de uma determinada CHAVE estejam espalhados por todos os fragmentos do cluster Mongo. Nesse caso, seria possível calcular a média móvel. Compreendo que o Mongo faz o mapa reduzir em cada nó. O principal requisito para resolver esse problema é garantir que todos os emissos para um mapa sejam reduzidos em uma única fase de redução. Se for esse o caso, Mongo Map Reduce nunca poderá resolver esses problemas. Existe algum mal-entendido básico. Além disso, com bilhões de linhas e petabytes de dados, por que a Hadoop Reduzir a fase não faz falta na memória, uma vez que tem que lidar com pelo menos várias TBs de dados mapeados. Perguntou 16 de maio 13 às 7:31 Você pode explicar por que Hadoop não afastou a memória por essa computação. Da minha compreensão, toda a redução acontecerá em um nó, onde todos os registros de uma CHAVE serão reduzidos. Isso deve resultar em uma enorme sobrecarga de memória nesse nó, uma vez que os TBs de dados precisam estar presentes lá. Como Hadoop lida com uma enorme quantidade de dados ndash P. Prasad 16 de maio 13 às 8:29 Eu acredito que, ao contrário de MongoDB, hadoop, assim como o SQL ao processar uma grande associação, vai escrever coisas no disco e ler somente quando necessário com O sistema operacional usando swap como suporte de memória temporário para certas coisas provavelmente. MongoDB faz mais na RAM antes de gravar no disco, como tal, irá facilmente resgatar ndash Sammaye 16 de maio 13 em 8: 37David, sim, MapReduce destina-se a operar em uma grande quantidade de dados. E a idéia é que, em geral, o mapa e reduzir as funções não devem se preocupar com quantos mapeadores ou quantos redutores existem, isso é apenas otimização. Se você pensa cuidadosamente sobre o algoritmo que postei, você pode ver que não importa qual mapeador recebe as partes dos dados. Cada registro de entrada estará disponível para cada operação de redução que o necessite. Ndash Joe K 18 de setembro 12 às 22:30 Na melhor das minhas compreensões, a média móvel não é bem mapas para o paradigma MapReduce, uma vez que seu cálculo é basicamente uma janela deslizante sobre dados classificados, enquanto o MR é o processamento de intervalos não interceptados de dados classificados. A solução que vejo é a seguinte: a) Implementar partição personalizada para poder fazer duas partições diferentes em duas execuções. Em cada execução, seus redutores obterão diferentes faixas de dados e calcularão a média móvel quando apropriado vou tentar ilustrar: Em dados da primeira execução para os redutores devem ser: R1: Q1, Q2, Q3, Q4 R2: Q5, Q6, Q7, Q8 . Aqui você irá calcular a média móvel para alguns Qs. Na próxima execução, seus redutores devem ter dados como: R1: Q1. Q6 R2: Q6. Q10 R3: Q10..Q14 E caclule o resto das médias móveis. Então você precisará agregar resultados. Idéia de compartilhamento personalizado que terá dois modos de operação - cada vez que se divide em intervalos iguais, mas com alguma mudança. Em um pseudocódigo, será assim. Partição (keySHIFT) (MAXKEYnumOfPartitions) onde: SHIFT será retirado da configuração. MAXKEY valor máximo da chave. Eu assumo por simplicidade que eles começam com zero. RecordReader, IMHO não é uma solução, uma vez que está limitado a divisão específica e não pode deslizar sobre o limite das divisões. Outra solução seria implementar a lógica personalizada de dados de entrada de divisão (faz parte do InputFormat). Pode ser feito para fazer 2 slides diferentes, semelhante ao particionamento. Respondeu 17 de setembro às 8: 59 Calculando médias móveis com Hadoop e Map-Reduce Por favor, note que o artigo de Attain Technologies é uma cópia direta deste artigo. Este artigo, o que você está lendo, é o original e foi publicado em 29 de agosto de 2012. Eu não concedei permissão para isso e só fui descoberto por acidente. Uma média móvel, também chamada de média deslizante ou média móvel, é uma técnica para suavizar a variação de curto prazo nos dados, a fim de revelar as tendências. Tem usos em processamento de sinal, análise de dados e estatísticas. Em termos de engenharia, é como um filtro finito de resposta ao impulso, enquanto matematicamente é uma convolução. Para grandes conjuntos de dados, esse alisamento pode demorar muito tempo e tratá-lo como um grande problema de dados pode permitir um aumento rápido, possivelmente em tempo real, de suficiência de dados. O padrão De Facto para o processamento de Big Data é o Hadoop, embora outras estruturas possivelmente possam ser superiores em termos de desenvolvimento, tempo de manutenção e throughput. Alguns até afirmam permitir o processamento em tempo real de dados importantes em um laptop padrão. O Hadoop está centrado no paradigma Map-Reduce, um paradigma maior que o Hadoop, que pode, até certo ponto, ser implementado com a comunicação de thread baseada em fila. O código aqui apresentado é o conceito de conceito de código Java para o Hadoop desenvolvido em parte como um exercício de aprendizagem e, em parte, como uma forma de sair da gaiola Big Data em que o Map-Reduce atualmente reside. Como tais detalhes necessários para os sistemas de produção, como a capacidade de escolher o comprimento da janela, o requerimento dos dados ou a realização de médias ponderadas e exponenciais não foram discutidos. O código aqui será atualizado à luz dos comentários dos usuários e do desenvolvimento futuro. O sliding significa que eu conheci pela primeira vez a média deslizante no contexto da análise de dados de telemetria. Os dados foram contaminados por ruídos de várias fontes: vibração, ruído elétrico e assim por diante. Uma solução era suavizar os dados. Uma vez que o tempo dos eventos foi importante e os dados podem estar sujeitos a viés sistemáticos, e o ruído não, portanto, centrado em torno de um valor médio, os dados suavizados tiveram de ser deslocados para compensar. Para ser concreto, considere uma seqüência de mil pontos de dados ruidosos, que são números inteiros entre 0 e 128. Uma média deslizante com uma janela de amostra de 9 pontos (o motivo para 9 e dez não é explicado abaixo) é calculado tomando a média de Pontos 1 a 9 e colocá-lo na localização 1 dos dados suavizados, calculando a média dos pontos 2 a 10 e colocando-o no local 2 e assim por diante até que a matriz suavizada seja preenchida. Se os dados não estiverem centrados em torno de um valor médio, a média desactiva o ponto de dados mais recente pela metade do comprimento da janela. Às vezes, o deslocamento de tempo implícito no último parágrafo não é desejado, neste caso, a média móvel central é calculada: neste caso, a seqüência suavizada começa na localização 5 e termina na localização 995 com os pontos finais normalmente descartados. Um toque de matemática O meio de deslizamento é apenas uma convolução 2 ou manchas frouxas das séries temporais com um pulso quadrado, que é uma função que é zero fora da janela de amostra. Como tal, uma maneira de calcular a média de deslizamento é tomar a Transformação de Fourier Rápida (FFT) dos dados e multiplicá-la por uma FFT do pulso quadrado (ou no caso de meios ponderados pela FFT da função de ponderação) . Em termos computacionais, o esforço de cálculo da FFT pode superar a economia feita pela substituição da divisão pela multiplicação. Perseguindo a noção de Sliding Mean, como a convolução leva a áreas como Fractional Calculus 3 e está fora do alcance desta nota. Usando a abordagem de convolução leva à observação de que o pulso quadrado da média móvel simples possui uma transformada de Fourier que cai rapidamente em altas freqüências, de modo que o alisamento elimina altas freqüências. Quanto maior a janela de amostra, menor é a frequência máxima passada. Isso é intuitivamente óbvio, mas é bom ter isso confirmado por uma análise mais rigorosa Como os dados chegam. Há basicamente duas situações, a primeira é onde a seqüência completa está disponível, por exemplo, dados pós-teste de sistemas eletromecânicos e a situação em que Os pontos de dados chegam um a um, possivelmente em momentos aleatórios. Aqui é assumido que os dados chegam em horários fixos. Um caso intermediário é onde os dados são armazenados em um buffer com dados antigos sendo removidos à medida que novos dados chegam. Aqui, o alisamento deve ser rápido o suficiente para garantir que todos os dados sejam processados antes que novos dados cheguem, mesmo que isso signifique que o sistema está ocioso na espera de novos dados. Para desenvolver a prova de conceito, os dados do teste rápido foram armazenados em um arquivo de texto, um valor para uma linha, simulando assim a situação em que os valores de dados chegam um a um. Como os dados não estão todos disponíveis de uma vez, a técnica padrão de calcular um total uma vez, em seguida, avançar, subtraindo o ponto mais antigo e adicionando o ponto mais recente não era possível. Em vez disso, uma técnica essencialmente semelhante ao método add () de uma lista circular foi desenvolvida para uso na classe Mapeador, sendo a lista convertida em uma string e enviada ao redutor com cada novo ponto que é adicionado, depois que a lista ficar cheia. Novamente, à medida que o código evoluir, métodos mais inteligentes serão usados e o código aqui atualizado. Código de amostra
No comments:
Post a Comment