Importando dados para HDFS com Sqoop
Imagine um banco de dados relacional usado por uma empresa de serviços de ficção que tem vindo a tomar (você adivinhou) chamadas de serviço Apache Hadoop e agora quer se mudar alguns dos seus dados para a Hadoop para executar consultas colmeia, alavancagem HBase escalabilidade e desempenho, e executar análise de texto em as descrições de problemas de seus clientes.
Sqoop é a ferramenta que você deseja usar para importar dados de tabelas relacionais em tabelas HBase no Hadoop.
Na lista a seguir, você pode ver os comandos MySQL usados para criar o banco de dados Ordem de Serviço que você vê na figura. Instalada é um RDBMS MySQL que você pode importar e exportar a usar Sqoop.
/ * Criar a ordens de serviço de banco de dados * / criar banco de dados serviceorderdb-USE serviceorderdb - / * Criar a tabela de Informação de Produto * / CRIAR productinfo TABLE (productnum CHAR (4) CHAVE PRIMÁRIA, productdesc VARCHAR (100)) - / * Criar a Customer Contact Tabela de informação * / CREATE TABLE customercontactinfo (customernum INT PRIMARY KEY, CustomerName VARCHAR (100), contactinfo VARCHAR (100), productnums SET ( 'A100', 'A200', 'A300', 'B400', 'B500', 'C500 ',' C600 ',' D700 ')) - / * Criar a ordens de serviço de mesa * / CRIAR serviceorders mesa (serviceordernum INT PRIMARY KEY, INT customernum, productnum CHAR (4), estado VARCHAR (100), FOREIGN KEY (customernum) Referências customercontactinfo (customernum), FOREIGN KEY (productnum) Referências ProductInfo (productnum)) - / * Inserir os dados do produto na tabela Informações sobre o produto * / inserir valores ProductInfo ( 'A100', 'HBase Suporte ao Produto ") - inserir valores ProductInfo ( 'A200', 'Hive Suporte ao Produto ") - inserir valores ProductInfo (' A300 ',' Sqoop Suporte ao Produto") - inserir valores ProductInfo ( 'B400', 'Ambari suporte ao produto') - inserir valores ProductInfo ( ' B500 ',' HDFS Suporte ao Produto ") - inserir valores ProductInfo ( 'C500', 'Mahout Suporte ao Produto") - inserir valores ProductInfo (' C600 ',' Zookeeper suporte ao produto ') - inserir valores ProductInfo (' D700 ' , 'Pig Suporte ao Produto ") - dados / * Insert clientes para o Customer Contact Information Table * / INSERT INTO customercontactinfoVALUES (10000,' John Timothy Smith ',' 1 Hadoop Lane, NY, 11111, Joao.Sousa @ xyz.com ' , 'B500') - INSERT INTO customercontactinfoVALUES (10001, "Bill Jones ',' 2 HBase Ave, CA, 22222 ',' A100, A200, A300, B400, B500, C500, C600, D700 ') - INSERT INTO customercontactinfoVALUES ( 20000, "Jane Ann Doe ',' 1 Especialista HBase Ave, CA, 22222 ',' A100, A200, A300 ') - INSERT INTO customercontactinfoVALUES (20001,' Joe desenvolvedor ',' 1 PigLatin Ave, CO, 33333 ',' D700 ') - INSERT INTO customercontactinfoVALUES (30000, "cientista de dados', '1 Estatísticas Lane, MA, 33333', 'A300, C500') - / * Digite ordens de serviço na Tabela de ordens de serviço * / INSERT INTO serviceordersVALUES (100000, 20000, 'A200', 'Eu tenho algumas perguntas sobre a construção de consultas HiveQL? Meu Hadoop for Dummies livro ainda não chegou! ') - INSERT INTO serviceordersVALUES (100001, 10001,' A100 ',' eu preciso entender como configurar Zookeeper para o meu HBase cluster '?) - INSERT INTO serviceordersVALUES (200000, 20001, 'D700', 'Eu estou escrevendo alguns PigLatin e eu tenho algumas perguntas? ") - INSERT INTO serviceordersVALUES (200001, 30000,' A300 ',' Como posso mesclar meus conjuntos de dados após as importações incrementais Sqoop? ') -
A listagem a seguir confirma que o banco de dados MySQL ordem de serviço foi criado usando os comandos mostrados anteriormente, e mostra-lhe os nomes de tabela que você vai importar de usar Sqoop.
mysql> show tables - + -------------------------- + | Tables_in_serviceorderdb | + -------------------------- + | customercontactinfo || productinfo || serviceorders | + -------------------------- + 3 linhas no set (0.00 sec)
Agora que você já viu os registros de banco de dados MySQL ordem de serviço que estão apenas esperando para ser explorado, é hora de voltar sua atenção para Hadoop e executar o seu primeiro comando Sqoop.
Não puxe o fiel importar comandar direita fora do bastão. Sqoop possui diversas ferramentas úteis, juntamente com importar e exportar, incluindo o list-bases de dados de comando, que é usado da seguinte listagem. Usando esse comando, você pode confirmar se você tem conectividade e visibilidade para o banco de dados MySQL.
$ Sqoop list-bases de dados --connect jdbc: mysql: // localhost / - nome de usuário senha -PEnter root: 13/08/15 17:21:00 INFO manager.MySQLManager: Preparando para usar um streaming de resultset.information_schemamysqlperformance_schema MySQLserviceorderdb
o serviceorderdb é mostrado para estar disponível, então agora você pode listar as tabelas dentro serviceorderdb usando o Sqoop list-tabelas comando. Observe que agora você está adicionando o banco de dados que você quer Sqoop acessar no jdbc: URL mysql:
$ Sqoop lista-tables - conectar jdbc: mysql: // localhost /serviceorderdb --Nome de Usuário Senha -PEnter root: 13/08/15 17:22:01 INFO manager.MySQLManager: Preparando para usar um MySQL de streaming resultset.customercontactinfoproductinfoserviceorders
Sqoop agora tem conectividade e pode acessar as três tabelas a partir da figura. Isso significa que você pode executar o seu primeiro Sqoop importar de comando e direcionar o serviceorders mesa com a consciência limpa. Sqoop importar comandos têm o seguinte formato:
importação Sqoop (argumentos genéricos) (argumentos de importação)
Com os argumentos genéricos, você apontar para o banco de dados MySQL e fornecer as informações de login necessárias, assim como você fez com o anterior list-tabelas ferramenta. Nos argumentos de importação, você (o usuário) têm a capacidade de especificar o que você deseja importar e como deseja que a importação seja realizada.
Na lista a seguir, você especificar a tabela de serviceorders e solicitar que uma tarefa mapa ser utilizado para a importação usando o -m 1 CLA. (Por padrão, Sqoop usaria quatro tarefas mapa, mas isso seria um exagero para esta pequena mesa e nossa máquina virtual.)
Você também ter especificado o --nome da classe para o código gerado e o especificado --bindir onde o código compilado e .jarra arquivo deve ser localizado. (Sem estes argumentos, Sqoop iria colocar o arquivo de origem Java gerado em seu diretório de trabalho atual eo compilado .classe arquivo e .arquivo jar dentro / Tmp / sqoop-
O nome da classe simplesmente deriva do nome da tabela, a menos que você especifique um nome com a ajuda do --nome da classe argumento de linha de comando (CLA). o --meta-dir é o local no HDFS, onde você deseja que a tabela importada para ser colocado.
$ Sqoop importação - conectar jdbc: mysql: // localhost / serviceorderdb - nome de usuário raiz -P - mesa serviceorders -m 1 - class-name serviceorders - target-dir / usr / BiAdmin / serviceorders -import - bindir .Enter senha: ... 13/08/25 14:43:56 INFO mapreduce.ImportJobBase: Transferido 356 bytes de 21.0736 segundos (16.8932 bytes / seg) 13/08/25 14:43:56 INFO mapreduce.ImportJobBase: Retirado 4 registros.