Tuesday 25 July 2017

Mysql Moving Average Example


Obtendo uma lista de valores exclusivos de uma coluna MySQL Deseja obter uma lista de todos os valores diferentes em uma coluna Use a palavra-chave DISTINCT. Heres um exemplo: (escrito 2005-04-14, atualizado 2006-06-05) Os tópicos associados são indexados como abaixo, ou digite melksh. amnnnn para artigos individuais S157 - Mais comandos do MySQL 4481 Extraindo dados de backups para restaurar linhas selecionadas do MySQL Tabelas - (2015-05-01) 3270 SQL - Dados v Metadados e as várias etapas da seleção de dados - (2011-04-29) 3061 Bancos de dados - por que os dados são divididos em tabelas separadas e como se juntar a eles - 2647 Removendo duplicatas de uma tabela MySQL - (2010-02-22) 2645 Otimizando e colocando em cache suas consultas MySQL - (2010-02-22) 2644 Contando linhas em tabelas juntadas MySQL - (2010-02-22) 2643 Relacionando tabelas com associações no MySQL - (2010-02-21) 2448 MySQL - eficiência e outros tópicos - (2009-10-10) 2259 Agrupando linhas para um relatório de resumo - MySQL e PHP - (2009-06-27) 2110 MySQL - procurando registros em uma tabela que não correspondem a registros em outra tabela - (2009-03-31) 1904 Ruby, Perl, Linux, MySQL - algumas notas de treinamento - (2008-11-23) 1735 Finding wor Ds e os limites do trabalho (MySQL, Perl, PHP) - (2008-08-03) 1574 Juntando tabelas de MySQL revisited - encontrando registros do nonmatching, etc - (2008-03-15) 1331 MySQL junta revisitado - (2007-09-03) 1235 Saída de números como palavras - MySQL com Perl ou PHP - (2007-06-17) 1213 MySQL - a ordem das cláusulas ea ordem das ações - (2007-06-01) 673 Helicopter views and tartans - (2006-04- 061) 591 Fatos-chave - SQL e MySQL - (2006-02-04) 581 Salvando resultados de consultas MySQL no seu disco local para o Excel - (2006-01-29) 572 Dando ao pesquisador poder sobre a análise de banco de dados - (2006-01 -22) 567 Combinando linhas semelhantes a partir de uma base de dados MySQL seleccione - (2006-01-17) 517 Uma oportunidade ocasional e reduzindo dados para níveis gerenciáveis ​​- (2005-12-04) 515 MySQL - um FAQ - (2005-12- MySQL - JOIN ou WHERE para vincular as tabelas corretamente - (2005-12-01) 502 SELECT no MySQL - escolhendo as linhas que você quer - (2005-11-22) 494 MySQL - uma pontuação de coisas para lembrar - (2005 -11-12) 449 Matching em MySQL - (2005-09-24) 159 MySQL - Optimis (2004-12-21) 158 MySQL - LEFT JOIN e RIGHT JOIN, INNER JOIN e OUTER JOIN - (2004-12-20) Alguns outros Artigos 4724 posts, página por página Esta é uma página arquivada de The Horses Mouth Em wellhohorse - o diário e escritos de Graham Ellis. Cada tentativa foi feita para fornecer informações atuais no momento em que a página foi escrita, mas as coisas avançam em nosso negócio - novos lançamentos de software, mudanças de preços, novas técnicas. Por favor, verifique novamente através do nosso site principal para cursos atuais, preços, versões, etc - qualquer menção de um preço em The Horses Mouth não pode ser tomada como uma oferta para fornecer a esse preço. Obrigado por nos visitar. Não oferecemos patrocínios ou convites aos nossos cursos para oferecer suporte aos pedidos de visto do Reino Unido. Se você deseja reservar qualquer um dos nossos cursos e é um nacional da Ucrânia, por favor, verifique com o seu Consulado Britânico local e fazer qualquer regime de visto necessário antes de reservar. Mais comentário por Colin (publicado 2010-10-08) Link sugerido. Havent visto sua colheita do local acima em buscas do sql por anos. Eu encontrei esta página procurando uma solução para um problema ligeiramente diferente: Eu preciso de uma lista de valores únicos E um id. Qualquer id fará. Primeiro ou último. Assim como de sua tabela: Como retornar o destino distinto junto com um tid Escolha um tid, qualquer stackoverflow tid tem um problema similar. Eu dou um link. Meu col quero único tem alguns calcs pesados ​​assim estou tentando evitar multi seleciona e junta-se tanto quanto poss. 3783 Ranking médio de páginas - 4.0Hadoop exemplo: Hello World com Java, Pig, Hive, Flume, Fuse, Oozie e Sqoop com Informix, DB2 e MySQL Há muita emoção sobre Big Data e muita confusão para ir com isto. Este artigo fornece uma definição de trabalho do Big Data e, em seguida, trabalha através de uma série de exemplos para que você possa ter uma compreensão de primeira mão de algumas das capacidades do Hadoop, a tecnologia líder de código aberto no domínio Big Data. Especificamente, vamos nos concentrar nas seguintes questões. O que é o Big Data, o Hadoop, o Sqoop, o Hive e o Porco, e por que há tanta excitação nesse espaço Como o Hadoop se relaciona com o IBM DB2 e o Informix Essas tecnologias podem jogar juntas Como posso começar com os Big Data Exemplos que são executados em um único PC Para o super impaciente, se você já pode definir o Hadoop e deseja começar a trabalhar com os exemplos de código, faça o seguinte. Ligue sua instância do Informix ou do DB2. Baixe a imagem VMWare do site Cloudera e aumente a configuração da RAM da máquina virtual para 1,5 GB. Salte para a seção que contém os exemplos de código. Existe uma instância MySQL incorporada na imagem VMWare. Se você estiver fazendo os exercícios sem conectividade de rede, use os exemplos do MySQL. Para todos os outros, continue lendo. O que é Big Data Big Data é grande em quantidade, é capturado a uma taxa rápida, e é estruturado ou não estruturado, ou alguma combinação do acima. Esses fatores tornam o Big Data difícil de capturar, extrair e gerenciar usando métodos tradicionais. Há tanto hype neste espaço que poderia haver um debate prolongado apenas sobre a definição de dados grandes. A utilização da tecnologia Big Data não se restringe a grandes volumes. Os exemplos neste artigo usam pequenas amostras para ilustrar as capacidades da tecnologia. A partir do ano de 2012, os clusters que são grandes estão na faixa de 100 Petabyte. Big Data pode ser estruturado e não estruturado. Bases de dados relacionais tradicionais, como Informix e DB2, fornecem soluções comprovadas para dados estruturados. Através da extensibilidade eles também gerenciam dados não estruturados. A tecnologia Hadoop traz técnicas de programação novas e mais acessíveis para trabalhar em grandes armazéns de dados com dados estruturados e não estruturados. Por que toda a emoção Há muitos fatores que contribuem para o hype em torno de Big Data, incluindo o seguinte. Trazendo computação e armazenamento juntos em hardware commodity: O resultado é a velocidade ardente a baixo custo. Desempenho dos preços: A grande tecnologia de dados do Hadoop proporciona economias de custo significativas (acho que um fator de aproximadamente 10) com melhorias significativas de desempenho (novamente, pense fator de 10). Sua milhagem pode variar. Se a tecnologia existente pode ser tão dramaticamente derrotada, vale a pena examinar se Hadoop pode complementar ou substituir aspectos de sua arquitetura atual. Escalabilidade Linear: Cada tecnologia paralela faz afirmações sobre a escala. Hadoop tem escalabilidade real desde a última versão está expandindo o limite no número de nós para além de 4.000. Acesso total a dados não estruturados: um armazém de dados altamente escalável com um bom modelo de programação paralelo, MapReduce, tem sido um desafio para a indústria há algum tempo. O modelo de programação Hadoops não resolve todos os problemas, mas é uma solução forte para muitas tarefas. Distribuições de Hadoop: IBM e Cloudera Um dos pontos de confusão é: Onde faço para obter o software para trabalhar em Big Data Os exemplos neste artigo são baseados na distribuição gratuita de Cloudera Hadoop chamado CDH (para a distribuição Cloudera incluindo Hadoop). Isto está disponível como uma imagem de VMWare do Web site de Cloudera. A IBM anunciou recentemente que está portando sua grande plataforma de dados para ser executada no CDH. O termo tecnologia disruptiva é muito usado, mas neste caso pode ser apropriado. O que é o Hadoop Seguem-se várias definições do Hadoop, cada uma destinada a um público diferente dentro da empresa: Para os executivos: Hadoop é um projeto de software de código aberto do Apache para obter valor da incrível variedade de dados sobre sua organização. Use os dados em vez de jogar a maior parte dele. Para os gerentes técnicos: Um conjunto de software de fonte aberta que explora o BigData estruturado e não estruturado sobre sua empresa. Ele se integra ao seu ecossistema de Business Intelligence existente. Legal: um conjunto de software de fonte aberta que é embalado e suportado por vários fornecedores. Engenharia: um ambiente de execução de mapa-reduzido massivamente paralelo, compartilhado nada, baseado em Java. Pense centenas de milhares de computadores que trabalham no mesmo problema, com resiliência de falhas incorporada. Projetos no ecossistema Hadoop fornecem carregamento de dados, linguagens de nível superior, implantação automatizada de nuvem e outros recursos. Segurança: Um conjunto de software protegido por Kerberos. Quais são os componentes do Hadoop O projeto do Apache Hadoop tem dois componentes principais, o arquivo chamado Hadoop Distributed File System (HDFS) ea estrutura de programação chamada MapReduce. Há uma série de projetos de apoio que alavancam HDFS e MapReduce. Este artigo fornecerá um sumário, e incentiva-o começar o livro de OReily o guia definitivo, ó edição, para mais detalhes. As definições abaixo destinam-se a fornecer apenas o plano de fundo suficiente para você usar os exemplos de código que se seguem. Este artigo é realmente pretendido começá-lo começado com experiência hands-on com a tecnologia. Este é um artigo sobre como fazer mais do que um artigo do que-é ou permite-discutir. HDFS. Se você quiser 4000 computadores para trabalhar em seus dados, então youd melhor espalhar seus dados em 4000 computadores. HDFS faz isso para você. HDFS tem algumas partes móveis. O Datanodes armazenar seus dados, eo Namenode mantém trilha de onde o material é armazenado. Existem outras peças, mas você tem o suficiente para começar. MapReduce. Este é o modelo de programação do Hadoop. Há duas fases, não surpreendentemente chamado de Mapa e Reduzir. Para impressionar seus amigos, diga-lhes que há um tipo de ordenação aleatória entre a fase de mapa e de redução. O JobTracker gerencia os 4000 componentes do seu trabalho MapReduce. Os TaskTrackers recebem ordens do JobTracker. Se você gosta de Java, em seguida, código em Java. Se você gosta de SQL ou outros idiomas não-Java você ainda está com sorte, você pode usar um utilitário chamado Hadoop Streaming. Transmissão de Hadoop. Um utilitário para habilitar o código MapReduce em qualquer linguagem: C, Perl, Python, C, Bash, etc. Os exemplos incluem um mapeador Python e um redutor AWK. Hive e Hue. Se você gosta de SQL, você ficará encantado ao saber que você pode escrever SQL e ter Hive convertê-lo em um trabalho MapReduce. Não, você não tem um ambiente ANSI-SQL completo, mas você obtém 4000 notas e multi-Petabyte escalabilidade. Hue dá-lhe uma interface gráfica baseada em browser para fazer o seu trabalho Hive. Porco. Um ambiente de programação de nível superior para fazer a codificação MapReduce. A linguagem Pig é chamada Pig Latin. Você pode encontrar as convenções de nomenclatura um pouco convencionais, mas você obtém incrível preço de desempenho e alta disponibilidade. Sqoop. Fornece transferência de dados bidirecional entre Hadoop e seu banco de dados relacional favorito. Oozie. Gerencia o fluxo de trabalho do Hadoop. Isso não substitui o seu agendador ou ferramentas BPM, mas fornece ramificação if-then-else e controle dentro de seus trabalhos Hadoop. HBase. Um armazenamento de valor-chave super-escalável. Ele funciona muito bem como um persistente hash-map (para python fãs pensar dicionário). Não é um banco de dados relacional, apesar do nome HBase. FlumeNG. Um carregador de tempo real para streaming de dados no Hadoop. Armazena dados em HDFS e HBase. Você quer começar com FlumeNG, que melhora no canal original. Whirr. Cloud aprovisionamento para Hadoop. Você pode iniciar um cluster em apenas alguns minutos com um arquivo de configuração muito curto. Mahout. Aprendizagem de máquina para Hadoop. Usado para análise preditiva e outras análises avançadas. Fusível . Faz com que o sistema HDFS pareça um sistema de arquivos regular para que você possa usar ls, rm, cd e outros no Zookeeper de dados HDFS. Usado para gerenciar a sincronização para o cluster. Você não vai trabalhar muito com Zookeeper, mas está trabalhando duro para você. Se você acha que precisa escrever um programa que usa Zookeeper você é muito, muito, inteligente e poderia ser um comitê para um projeto Apache, ou você está prestes a ter um dia muito ruim. A Figura 1 mostra as peças chave do Hadoop. Figura 1. Arquitetura Hadoop HDFS, a camada inferior, fica em um cluster de hardware commodity. Servidores montados em rack simples, cada um com CPUs de núcleo de 2 Hex, 6 a 12 discos e 32 GB de RAM. Para um trabalho de redução de mapa, a camada do mapeador é lida a partir dos discos a uma velocidade muito alta. O mapeador emite pares de valores chave que são classificados e apresentados ao redutor ea camada redutora resume os pares chave-valor. Não, você não tem que resumir, você pode realmente ter um trabalho de redução de mapa que tem apenas mapeadores. Isso deve tornar-se mais fácil de entender quando você chegar ao exemplo python-awk. Como o Hadoop se integra com minha infraestrutura Informix ou DB2 O Hadoop integra muito bem seus bancos de dados Informix e DB2 com o Sqoop. O Sqoop é a implementação líder em código aberto para mover dados entre Hadoop e bancos de dados relacionais. Ele usa JDBC para ler e escrever Informix, DB2, MySQL, Oracle e outras fontes. Existem adaptadores otimizados para vários bancos de dados, incluindo Netezza e DB2. Introdução: Como executar exemplos simples de Hadoop, Hive, Pig, Oozie e Sqoop Você terminou com introduções e definições, agora é hora de fazer as coisas boas. Para continuar, você precisará fazer o download do VMWare, caixa virtual ou outra imagem do site Cloudera e começar a fazer MapReduce. A imagem virtual supõe que você tenha um computador de 64 bits e um dos ambientes de virtualização mais populares. A maioria dos ambientes de virtualização tem um download gratuito. Quando você tenta inicializar uma imagem virtual de 64 bits, você pode receber queixas sobre as configurações do BIOS. A Figura 2 mostra a mudança necessária no BIOS, neste caso em um Thinkpad8482. Tenha cuidado ao fazer alterações. Alguns pacotes de segurança corporativa exigem um código de acesso após uma alteração do BIOS antes que o sistema seja reinicializado. Figura 2. Configurações do BIOS para um convidado virtual de 64 bits Os dados grandes usados ​​aqui são realmente bastante pequenos. O ponto não é fazer com que o seu laptop pegar fogo de moagem em um arquivo maciço, mas para mostrar-lhe fontes de dados que são interessantes, e reduzir o mapa de empregos que respondem perguntas significativas. Baixe a imagem virtual do Hadoop É altamente recomendável usar a imagem do Cloudera para executar esses exemplos. Hadoop é uma tecnologia que resolve problemas. A embalagem de imagens Cloudera permite que você se concentre nas perguntas de grandes dados. Mas se você decidir montar todas as peças sozinho, o Hadoop se tornou o problema, não a solução. Faça o download de uma imagem. A imagem CDH4, a última oferta está disponível aqui: CDH4 imagem. A versão anterior, CDH3, está disponível aqui: CDH3 image. Você tem a sua escolha de tecnologias de virtualização. Você pode baixar um ambiente de virtualização livre do VMWare e outros. Por exemplo, vá para vmware e faça o download do vmware-player. Seu laptop provavelmente está executando o Windows para que você faça o download do vmware-player para windows. Os exemplos neste artigo serão usando VMWare para esses exemplos, e executando Ubuntu Linux usando tar em vez de winzip ou equivalente. Uma vez baixado, untarunzip da seguinte maneira: tar - zxvf cloudera-demo-vm-cdh4.0.0-vmware. tar. gz. Ou, se você estiver usando CDH3, use o seguinte: tar - zxvf cloudera-demo-vm-cdh3u4-vmware. tar. gz Unzip normalmente funciona em arquivos tar. Uma vez descompactado, você pode disparar a imagem da seguinte forma: vmplayer cloudera-demo-vm. vmx. Você agora terá uma tela que se parece com o que é mostrado na Figura 3. Figura 3. Imagem virtual Cloudera O comando vmplayer mergulha diretamente e inicia a máquina virtual. Se você estiver usando CDH3, então você precisará desligar a máquina e alterar as configurações de memória. Use o ícone de botão de energia próximo ao relógio na parte central inferior da tela para desligar a máquina virtual. Você terá acesso de edição às configurações da máquina virtual. Para CDH3 o próximo passo é supercarregar a imagem virtual com mais RAM. A maioria das configurações só pode ser alterada com a máquina virtual desligada. A Figura 4 mostra como acessar a configuração e aumentar a RAM alocada para mais de 2 GB. Figura 4. Adicionando RAM à máquina virtual Conforme mostrado na Figura 5, você pode alterar a configuração de rede para bridged. Com essa configuração, a máquina virtual receberá seu próprio endereço IP. Se isso criar problemas em sua rede, então você pode opcionalmente usar Network Address Translation (NAT). Você estará usando a rede para se conectar ao banco de dados. Figura 5. Alterando as configurações de rede para bridged Você está limitado pela RAM no sistema host, então não tente alocar mais RAM do que aquilo que existe na sua máquina. Se o fizer, o computador funcionará muito lentamente. Agora, pelo momento que você estava esperando, vá em frente e ligue a máquina virtual. O usuário cloudera é automaticamente logado na inicialização. Se você precisar, a senha do Cloudera é: cloudera. Instalar o Informix eo DB2 Você precisará de um banco de dados para trabalhar. Se você não tiver um banco de dados, então você pode baixar a edição do Informix Developer aqui, ou o DB2 Express-C Edition gratuito. Outra alternativa para instalar o DB2 é fazer o download da imagem VMWare que já tem o DB2 instalado em um sistema operacional SuSE Linux. Efetue login como root, com a senha: password. Mude para o db2inst1 userid. Trabalhar como root é como dirigir um carro sem cinto de segurança. Por favor, fale com o DBA local amigável sobre como obter o banco de dados em execução. Este artigo não vai cobrir isso aqui. Não tente instalar o banco de dados dentro da imagem virtual Cloudera porque não há espaço livre em disco suficiente. A máquina virtual será conectar ao banco de dados usando Sqoop que requer um driver JDBC. Você precisará ter o driver JDBC para seu banco de dados na imagem virtual. Você pode instalar o driver Informix aqui. O driver Informix JDBC (lembre-se, apenas o driver dentro da imagem virtual, não o banco de dados) é mostrado na Listagem 1. Listagem 1. Instalação do driver JDBC do Informix Nota: Selecione um subdiretório relativo ao homecloudera para não exigir permissão root para o instalação. O driver JDBC do DB2 está no formato zipado, então basta descompactá-lo no diretório de destino, conforme mostrado na Listagem 2. Listagem 2. Instalação do driver JDBC do DB2 Uma introdução rápida ao HDFS e MapReduce Antes de começar a mover dados entre o banco de dados relacional eo Hadoop, Você precisa de uma rápida introdução ao HDFS e MapReduce. Há um monte de tutoriais estilo hello mundo para Hadoop, então os exemplos aqui são destinados a dar apenas fundo suficiente para os exercícios de banco de dados para fazer sentido para você. O HDFS fornece armazenamento em todos os nós do seu cluster. O primeiro passo no uso do Hadoop é colocar dados em HDFS. O código mostrado na Listagem 3 recebe uma cópia de um livro de Mark Twain e um livro de James Fenimore Cooper e copia esses textos em HDFS. Lista 3. Carregar Mark Twain e James Fenimore Cooper em HDFS Agora você tem dois arquivos em um diretório em HDFS. Por favor, contenha sua emoção. Sério, em um único nó e com apenas cerca de 1 megabyte, isso é tão emocionante como ver a pintura seca. Mas se este era um cluster de 400 nós e você tinha 5 petabytes ao vivo, então você realmente teria problemas para conter o seu entusiasmo. Muitos dos tutoriais Hadoop usar o exemplo de contagem de palavras que está incluído no arquivo de exemplo jar. Acontece que uma grande parte da análise envolve contagem e agregação. O exemplo na Listagem 4 mostra como invocar o contador de palavras. Listagem 4. Contando palavras de Twain e Cooper O sufixo. gz no DS. txt. gz diz ao Hadoop para lidar com a descompressão como parte do processamento de Redução de Mapa. Cooper é um pouco detalhado tão bem merece a compactação. Há bastante fluxo de mensagens de execução de seu trabalho de contagem de palavras. A Hadoop está feliz em fornecer muitos detalhes sobre os programas de Mapeamento e Redução em execução em seu nome. As linhas críticas que você deseja procurar são mostradas na Listagem 5, incluindo uma segunda listagem de um trabalho com falha e como corrigir um dos erros mais comuns que você encontrará executando o MapReduce. Listagem 5. Mensagens MapReduce - o caminho feliz O que significam todas as mensagens O Hadoop fez um monte de trabalho e está tentando falar sobre isso, incluindo o seguinte. Verificado para ver se o arquivo de entrada existe. Verificado para ver se o directório de saída existe e se o fizer, anular o trabalho. Nada pior do que sobrescrever horas de computação por um simples erro de teclado. Distribuiu o arquivo Java jar para todos os nós responsáveis ​​pela execução do trabalho. Neste caso, este é apenas um nó. Executou a fase do mapeador do trabalho. Normalmente, analisa o arquivo de entrada e emite um par de valores de chave. Observe que a chave eo valor podem ser objetos. Correu a fase de ordenação, que classifica a saída do mapeador com base na chave. Executa a fase de redução, normalmente isso resume o fluxo de valor-chave e grava a saída para HDFS. Criou muitas métricas sobre o progresso. A Figura 6 mostra um exemplo de página da Web de métricas de job do Hadoop depois de executar o exercício de Colmeia. Figura 6. Exemplo de página da Web do Hadoop O que fez o trabalho e onde está a saída Ambas são boas perguntas e são mostradas na Listagem 6. Listagem 6. Mapa-Reduzir a saída Se você executar o mesmo trabalho duas vezes e se esquecer Exclua o diretório de saída, você receberá as mensagens de erro mostradas na Listagem 7. Corrigir esse erro é tão simples quanto excluir o diretório. Listagem 7. Mensagens MapReduce - falha devido à saída já existente no HDFS O Hadoop inclui uma interface do navegador para inspecionar o status do HDFS. A Figura 7 mostra a saída do trabalho de contagem de palavras. Figura 7. Explorando o HDFS com um navegador Um console mais sofisticado está disponível gratuitamente no site da Cloudera. Ele fornece uma série de recursos além das interfaces da Web Hadoop padrão. Observe que o estado de saúde do HDFS na Figura 8 é mostrado como Mau. Figura 8. Serviços Hadoop gerenciados pelo Cloudera Manager Por que é ruim Como em uma única máquina virtual, o HDFS não pode fazer três cópias dos blocos de dados. Quando os blocos são sub-replicados, então há um risco de perda de dados, portanto, a saúde do sistema é ruim. Ainda bem que você não está tentando executar trabalhos de produção Hadoop em um único nó. Você não está limitado a Java para seus trabalhos MapReduce. Este último exemplo de MapReduce usa Hadoop Streaming para suportar um mapeador escrito em Python e um redutor usando AWK. Não, você não tem que ser um Java-guru para escrever Map-Reduce Mark Twain não era um grande fã de Cooper. Neste caso de uso, Hadoop fornecerá algumas críticas literárias simples comparando Twain e Cooper. O teste FleschKincaid calcula o nível de leitura de um texto específico. Um dos fatores nesta análise é o comprimento médio da sentença. Parsing sentenças acaba por ser mais complicado do que apenas olhar para o personagem período. O pacote openNLP e o pacote Python NLTK têm excelentes analisadores de frases. Por simplicidade, o exemplo mostrado na Listagem 8 usará o comprimento da palavra como um substituto para o número de sílabas em uma palavra. Se você quiser levar isso para o próximo nível, implemente o teste FleschKincaid no MapReduce, rastreie a web e calcule os níveis de leitura de seus sites de notícias favoritos. Lista 8. Uma crítica literária de mapeador baseada em Python A saída do mapeador, para a palavra Twain, seria: 5 0. Os comprimentos de palavras numéricas são classificados em ordem e apresentados ao redutor em ordem classificada. Nos exemplos mostrados nas Listagens 9 e 10, a classificação dos dados não é necessária para obter a saída correta, mas o tipo é construído na infra-estrutura MapReduce e acontecerá de qualquer maneira. Lista 10. Redutor de AWK para crítica literária Listagem 10. Execução de um Python mapper e redutor de AWK com Hadoop Streaming Os fãs de Mark Twain podem relaxar sabendo que Hadoop encontra Cooper para usar palavras mais longas e com um desvio padrão chocante. Isso naturalmente supor que as palavras mais curtas são melhores. Vamos seguir em frente, em seguida está escrevendo dados em HDFS para Informix e DB2. Usando o Sqoop para gravar dados do HDFS no Informix, DB2 ou MySQL via JDBC O Projeto Apache do Sqoop é um utilitário de movimentação de dados do banco de dados Hadoop baseado em JDBC. Sqoop foi criado originalmente em um hackathon em Cloudera e então open sourced. Mover dados de HDFS para um banco de dados relacional é um caso de uso comum. HDFS e Map-Reduce são grandes em fazer o trabalho pesado. Para consultas simples ou uma loja back-end para um site da Web, armazenar em cache a saída Map-Reduce em um armazenamento relacional é um bom padrão de design. Você pode evitar a re-execução da contagem de palavras de mapa reduzido por apenas Sqooping os resultados em Informix e DB2. Você gerou dados sobre o Twain e o Cooper, agora vamos movê-lo para um banco de dados, como mostrado na Listagem 11. Listagem 11. Configuração do driver JDBC Os exemplos mostrados nas Listagens 12 a 15 são apresentados para cada banco de dados. Pular para o exemplo de interesse para você, incluindo Informix, DB2 ou MySQL. Para os polyglots de banco de dados, divirta-se fazendo cada exemplo. Se o seu banco de dados de escolha não está incluído aqui, não será um grande desafio para fazer essas amostras de trabalho em outro lugar. Lista 12. Usuários do Informix: Sqoop escrevendo os resultados da contagem de palavras para Informix Listagem 13. Usuários do Informix: Sqoop escrevendo os resultados da contagem de palavras para a Lista Informix 14. Usuários do DB2: Sqoop escrevendo os resultados da contagem de palavras para o DB2 Listagem 15 MySQL: Sqoop escrevendo os resultados da contagem de palavras para o MySQL Importando dados para o HDFS do Informix e do DB2 com o Sqoop Inserindo dados no Hadoop HDFS também pode ser realizado com o Sqoop. A funcionalidade bidirecional é controlada através do parâmetro de importação. Os bancos de dados de exemplo que vêm com ambos os produtos têm alguns conjuntos de dados simples que você pode usar para essa finalidade. A Listagem 16 mostra a sintaxe e os resultados para Sqooping de cada servidor. Para usuários do MySQL, adapte a sintaxe dos exemplos do Informix ou do DB2 que se seguem. Lista 16. Importação de Sqoop do banco de dados de exemplo Informix para HDFS Por que há quatro arquivos diferentes cada um contendo apenas parte dos dados Sqoop é um utilitário altamente paralelizado. Se um cluster de nó de 4000 executando o Sqoop fizesse uma importação de aceleração completa a partir de um banco de dados, as 4000 conexões pareceriam muito com um ataque de negação de serviço contra o banco de dados. Sqoops limite de conexão padrão é quatro conexões JDBC. Cada conexão gera um arquivo de dados em HDFS. Assim, os quatro arquivos. Não se preocupe, você verá como o Hadoop trabalha através destes arquivos sem qualquer dificuldade. O próximo passo é importar uma tabela DB2. Conforme mostrado na Listagem 17, ao especificar a opção - m 1, uma tabela sem uma chave primária pode ser importada eo resultado é um único arquivo. Lista 17. Importação do Sqoop do banco de dados de exemplo DB2 para HDFS Usando o Hive: unindo dados do Informix e do DB2 Há um caso de uso interessante para juntar dados do Informix ao DB2. Não muito emocionante para duas mesas triviais, mas uma vitória enorme para múltiplos terabytes ou petabytes de dados. Existem duas abordagens fundamentais para juntar diferentes fontes de dados. Deixar os dados em repouso e usar a tecnologia de federação versus mover os dados para uma única loja para executar a associação. A economia eo desempenho de Hadoop fazem movendo os dados em HDFS e realizando o levantamento pesado com MapReduce uma escolha fácil. Limitações de largura de banda de rede criam uma barreira fundamental se tentar juntar dados em repouso com uma tecnologia de estilo de federação. O Hive fornece um subconjunto de SQL para operar em um cluster. Não fornece semântica de transação. Não é uma substituição para o Informix ou DB2. Se você tiver algum levantamento pesado na forma de associações de mesa, mesmo se você tiver algumas tabelas menores, mas precisa fazer desagradáveis ​​produtos cartesianos, Hadoop é a ferramenta de escolha. Para usar a linguagem de consulta do Hive, um subconjunto de SQL chamado metadados de tabela Hiveql é necessário. Você pode definir os metadados contra arquivos existentes no HDFS. O Sqoop fornece um atalho conveniente com a opção create-hive-table. Os usuários do MySQL devem se sentir livres para adaptar os exemplos mostrados na Listagem 18. Um exercício interessante seria unir o MySQL, ou qualquer outra tabela de banco de dados relacional, a grandes planilhas. Listagem 18. Unindo a tabela informix. customer à tabela db2.staff É muito mais bonito quando você usa o Hue para uma interface gráfica do navegador, como mostrado nas Figuras 9, 10 e 11. Figura 9. GUI de Beeswax de Hue para Hive em CDH4 , Veja a consulta Hiveql Figura 10. Hue Beeswax GUI para Hive, veja a consulta Hiveql Figura 11. Hue Beeswax navegador gráfico, vista Informix-DB2 juntar resultado Usando Pig: Juntando dados Informix e DB2 Pig é uma linguagem procedural. Assim como Hive, sob as capas ele gera código MapReduce. A facilidade de uso do Hadoop continuará a melhorar à medida que mais projetos estiverem disponíveis. Assim como alguns de nós realmente gostam da linha de comando, existem várias interfaces gráficas de usuário que funcionam muito bem com o Hadoop. A Listagem 19 mostra o código Pig que é usado para unir a tabela de clientes ea tabela de pessoal a partir do exemplo anterior. Lista 19. Exemplo de porco para unir a tabela do Informix à tabela do DB2 Como faço para escolher Java, Hive ou Pig Você tem várias opções para programar o Hadoop e é melhor olhar para o caso de uso para escolher a ferramenta certa para o trabalho . Você não está limitado a trabalhar em dados relacionais, mas este artigo está focado em Informix, DB2 e Hadoop jogando bem juntos. Escrever centenas de linhas em Java para implementar um hash-join de estilo relacional é um completo desperdício de tempo desde que esse algoritmo Hadoop MapReduce já está disponível. Como você escolhe Esta é uma questão de preferência pessoal. Alguns gostam de operações de codificação em SQL. Alguns preferem o código processual. Você deve escolher o idioma que vai fazer você o mais produtivo. Se você tem vários sistemas relacionais e deseja combinar todos os dados com ótimo desempenho a um preço baixo, Hadoop, MapReduce, Hive e Pig estão prontos para ajudar. Não exclua seus dados: Rolar uma partição do Informix em HDFS A maioria dos bancos de dados relacionais modernos pode particionar dados. Um caso de uso comum é particionar por período de tempo. Uma janela fixa de dados é armazenada, por exemplo, um intervalo de 18 meses, após o qual os dados são arquivados. A capacidade de partição-partição é muito poderosa. Mas depois que a partição é destacada o que se faz com os dados Tape o arquivo de dados antigos é uma maneira muito cara de descartar os bytes velhos. Uma vez transferidos para um meio menos acessível, os dados raramente são acessados, a menos que exista uma exigência de auditoria legal. Hadoop oferece uma alternativa muito melhor. Mover os bytes arquivados da partição antiga para o Hadoop fornece acesso de alto desempenho com custo muito menor do que manter os dados no sistema transactional original ou datamartdatawarehouse. Os dados são muito antigos para serem de valor transacional, mas ainda é muito valioso para a organização para análise de longo prazo. Os exemplos Sqoop mostrados anteriormente fornecem os conceitos básicos sobre como mover esses dados de uma partição relacional para HDFS. Fuse - Como chegar aos seus arquivos HDFS via NFS Os dados do arquivo InformixDB2flat no HDFS podem ser acessados ​​via NFS, como mostrado na Listagem 20. Isso fornece operações de linha de comando sem usar a interface hadoop fs - yadayada. De uma perspectiva de caso de uso de tecnologia, o NFS é severamente limitado em um ambiente Big Data, mas os exemplos são incluídos para desenvolvedores e dados não tão grandes. Listagem 20. Configurando Fusível - acesse seus dados HDFS via NFS Flume - crie um arquivo pronto para carregar Flume a próxima geração ou flume-ng é um carregador paralelo de alta velocidade. As bases de dados têm carregadores de alta velocidade, então como eles funcionam bem juntos O caso de uso relacional para Flume-ng é a criação de um arquivo de carga pronta, local ou remotamente, para que um servidor relacional pode usar seu carregador de alta velocidade. Yes, this functionality overlaps Sqoop, but the script shown in Listing 21 was created at the request of a client specifically for this style of database load. Listing 21. Exporting HDFS data to a flat file for loading by a database Oozie - adding work flow for multiple jobs Oozie will chain together multiple Hadoop jobs. There is a nice set of examples included with oozie that are used in the code set shown in Listing 22. Listing 22. Job control with oozie HBase, a high-performance key-value store HBase is a high-performance key-value store. If your use case requires scalability and only requires the database equivalent of auto-commit transactions, HBase may well be the technology to ride. HBase is not a database. The name is unfortunate since to some, the term base implies database. It does do an excellent job for high-performance key-value stores. There is some overlap between the functionality of HBase, Informix, DB2 and other relational databases. For ACID transactions, full SQL compliance, and multiple indexes a traditional relational database is the obvious choice. This last code exercise is to give basic familiarity with HBASE. It is simple by design and in no way represents the scope of HBases functionality. Please use this example to understand some of the basic capabilities in HBase. HBase, The Definitive Guide, by Lars George, is mandatory reading if you plan to implement or reject HBase for your particular use case. This last example, shown in Listings 23 and 24, uses the REST interface provided with HBase to insert key-values into an HBase table. The test harness is curl based. Listing 23. Create an HBase table and insert a row Listing 24. Using the HBase REST interface Conclusion Wow, you made it to the end, well done This is just the beginning of understanding Hadoop and how it interacts with Informix and DB2. Here are some suggestions for your next steps. Take the examples shown previously and adapt them to your servers. Youll want to use small data since there isnt that much space in the virtual image. Get certified as an Hadoop Administrator. Visit the Cloudera site for courses and testing information. Get certified as a Hadoop Developer. Start up a cluster using the free edition of Cloudera Manager. Get started with IBM Big Sheets running on top of CDH4. Downloadable resources Related topicsMySQL Triggers: Auto-generate additional information in the database MySQL Triggers are one of the newer features in MySQL that are helping to make it a viable alternative for large enterprise applications. Not too long ago, those who made their livings using big commercial databases like Oracle and DB2 pointed out that MySQL was a nice, fast little database but lacked important feature like stored procedures, transactions, and triggers. As of version 5.0 of MySQL, these features can be crossed off of that list. So, what are MySQL triggers, and why does MySQLs ability to use them make it more attractive to serious database users Simply put, triggers are small programs that are stored in the database itself, and are activated by database events which often originate at the application layer. These precipitating database events are UPDATE, DELETE or INSERT queries. The trigger itself may execute before or after the query that initiates it. Triggers are often used to maintain the integrity of data across tables of an application. When a user on a website makes a purchase, for example, the first action that occurs in the database may be that a credit is inserted into an accounting table. By way of a trigger this action could initiate a chain reaction of events in other tables throughout the application. The product count of an item could be decremented in an inventory table, a debit deducted from a customers account balance in another table, a store credit applied to yet another table. You may say that you have been doing this all along in your applications using PHP or Perl or Python or ASP code. Whats the big deal about using MySQL triggers Well, there are some advantages to using triggers over application code for maintaining integrity of data across tables. A trigger generally performs the types of tasks described faster than application code, and and can be activated easily and quickly behind the scenes and does not need to be a part of your application code. This saves time and spares you from redundant coding. If you ever port your application to another language, chances are your triggers can stay in place without modification, along with your tables and other database objects. To demonstrate how MySQL triggers work, lets set up two simple tables on a database well call 8220salesrecords8221 that have data that is interdependent. Imagine a database that tracks the sales records of three salespeople at a department store. They work in the electronics department selling things like TVs. stereos, and MP3 players. We have the main table that keeps a record of each sale made. It records the amount of the sale (saleamt), the date (date), the name of the salesman (name), his id number (employeeid), and the product id (prodid). Well call this table (cleverly enough) 8220sales8221. In the second table, we want to keep some data that will allow us to easily keep track of how each salesperson is doing. It will include the salespersons id (employeeid), name (name), total number of sales (totalsales), and a column that keeps each salespersons average amount per sale (avesale). We want to see whos moving the high-end items. Well call this table 8220performance8221. Now comes the hard part. As I mentioned, triggers are database objects just as tables are. Triggers, however, are able to execute procedural code that modifies data in your tables. In this case, we want our trigger to fire before any INSERT statement that executes in the sales table. When a sale record is inserted in the sales table, the salespersons totals must be updated in the performance table. The following code can be typed in your favorite text editor and pasted into your konsole at the MySQL prompt. Before you do that though, you want to execute this line: Our procedural code uses semicolons at the end of statements, so we need to set a different delimiter to let MySQL know when our code block is over, and so that it doesnt stop processing our block when it hits a semicolon. Keep in mind that after you finish your block you will have to set the delimiter back to the semicolon, or end any subsequent commands with the new delimiter. For example if you made errors in your CREATE TRIGGER block and want to delete it, DROP TRIGGER wont work unless you set the delimiter back to the semicolon. Here is the code for the trigger: OK, lets talk about the code. Using the CREATE TRIGGER statement, weve initiated the trigger, naming it salesbitrg. MySQL triggers can fire before or after an INSERT, UPDATE or DELETE event. This one fires before any data is inserted in the sales table. The FOR EACH ROW clause signifies that the block will act on each row that meets the criteria of our SQL statements. The keywords BEGIN and END enclose the trigger statements that will execute when the trigger fires. There are two variables declared. The first is numrow which checks to see if the employee has who has made the sale that is to be entered, has had a sale entered in the performance table previously. If there are no employeeids that match, then this is the employees first sale, and this meets the ELSE condition of our 8220IF statement. This data will be entered as an insert in the performance table rather than an update. If the numrow is greater than 0, then the performance table will be updated. The second variable, totrows, is a count of how many sales the employee has in the sales table. This value is used to calculate the employees average sale. The count is being done before the sale is inserted in the sale table, so we have to add one to it. When the performance table is updated the average sale totalsales(totrows1). If our MySQL trigger is working correctly, the performance table will keep a running total of each salespersons total sales, and also the average amount of their total sales. It will do this independently of your application code and be portable to any application platform. To give it a whirl, insert some data into the sales table and monitor the content of the performance table. Here is the statement: Change the numbers and names and try it a few times. (Remember, an employee keeps the same employeeid number for each of his sales.) If youre feeling adventurous, start thinking about how the MySQL trigger would have to be extended to account for UPDATE and DELETE statements on the sales table. Free eBook Subscribe to my newsletter and get my ebook on Entity Relationship Modeling Principles as a free gift: What visitors say. I just stumbled accross your site looking for some normalization theory and I have to say it is fantastic. I have been in the database field for 10 years and I have never before come across such a useful site. Thank you for taking the time to put this site together.

No comments:

Post a Comment