Este artigo pressupõe que o ambiente Hadoop esteja em uma máquina remota (como um servidor Linux) e a versão Hadoop é 2.5.2
Nota: Este artigo Eclipse/Intellij Idea Remote Debugging Hadoop 2.6.0 Referências principalmente e foi ajustado com base nele.
Como eu gosto de instalar o software de 32 bits no Win7 64 bits, como JDK de 32 bits e eclipse de 32 bits, embora o sistema operacional neste artigo seja Win7 64 bit, todo o software é de 32 bits.
Versão de software:
Sistema Operacional: Win7 64 bits
Eclipse: Eclipse-jee-mars-win32
Java: 1.8.0_77 32 bits
Hadoop: 2.5.2
1. Instale o Hadoop
1. Encontre um diretório no Win7 para descomprimir o Hadoop-2.5.2.tar.gz, como d: /app/hadoop-2.5.2/
2. Configure variáveis de ambiente
Hadoop_home = d: /app/hadoop-2.5.2/
2. Instale o plug -in Hadoop Eclipse
1. Baixe o hadoop-eclipse-plugin
O Hadoop-Eclipse-Plugin é um plug-in Hadoop especialmente usado para o Eclipse, que pode visualizar o diretório e o conteúdo do arquivo de HDFs diretamente no ambiente IDE. Seu código-fonte está hospedado no Github e o endereço oficial do site é https://github.com/winghc/hadoop2x-eclipse-plugin. Faça o download do hadoop-eclipse-plugin-2.6.0.jar na pasta de liberação.
2. Baixe o pacote de plug-in Hadoop para plataforma Windows de 32 bits (Hadoop.dll, winutils.exe)
Como o nosso ambiente de software é de 32 bits, precisamos baixar o Hadoop.dll e winutils.exe de 32 bits. O endereço de download está disponível para Baidu Hadoop.dll 32
Por exemplo, faça o download isto: http://xiazai.vevb.com/201607/yuanma/eclipse-hadoop(vevb.com).rar
Copie o diretório de $ hadoop_home/bin e copie o diretório hadoop.dll para o diretório c:/windows/syswow64 (Nota: como nosso sistema operacional é de 64 bits e o software é de 32 bits, copiamos o Windos para este diretório.
3. Configure o plugin Hadoop-Eclipse-Plugin
Comece Eclipse, Window-> Preferências-> Hadoop Map/Reduce Especifique o diretório raiz do Hadoop no Win7 (ou seja,: $ hadoop_home)
Magar o mapa/reduzir a visualização
Windows-> Show View-> Outros mapas/redução de locais
Em seguida, adicione um novo local no mapa/reduza o painel de locais abaixo
Configure o seguinte
O nome da localização é apenas um nome, basta chamar
MAP/Reduce (V2) Host Master Aqui está o endereço IP correspondente ao Hadoop Master na máquina virtual. A porta abaixo corresponde à porta especificada pelo atributo dfs.datanode.ipc.address em hdfs-site.xml
A porta aqui da porta mestre do DFS corresponde à porta especificada por fs.defaultfs em Core-site.xml
O último nome de usuário deve ser o mesmo que o nome de usuário que executa o Hadoop na máquina virtual. Eu instalei e administrei o Hadoop 2.6.0 com o Hadoop, então preencha o Hadoop aqui. Se você o instalou com o Root, altere -o para enraizar de acordo.
Depois que esses parâmetros forem especificados, clique em Concluir e eclipse para saber como se conectar ao Hadoop. Se tudo correr bem, você poderá ver os diretórios e arquivos no HDFS no painel do Project Explorer.
Você pode clicar com o botão direito do mouse no arquivo e selecionar Excluir para experimentar. Geralmente, a primeira vez não é bem -sucedida e haverá muitas coisas. A idéia geral é que não há permissões insuficientes. O motivo é que o usuário atual de login do Win7 não é o usuário em execução do Hadoop na máquina virtual. Existem muitas soluções. Por exemplo, você pode criar um novo usuário do Hadoop Administrator no Win7 e depois mudar para o Hadoop para fazer login no Win7 e depois usar o Eclipse para se desenvolver. No entanto, isso é muito irritante, da maneira mais fácil:
Adicionado no hdfs-site.xml
<PROPTY> <name> dfs.permissions.enabled </name> <Value> false </value> </propriedade>
Em suma, é desligar completamente a detecção de segurança do Hadoop (não há necessidade de isso na fase de aprendizado, não faça isso quando for produzido oficialmente), finalmente reinicie o Hadoop, depois vá para o Eclipse e repetir a operação de arquivo de exclusão agora e tudo bem.
NOTA: Se você não puder conectar, tente Telnet 192.168.1.6 9000 Primeiro (substitua o IP e a porta por seu próprio IP e porta do servidor Hadoop) para garantir que a porta esteja acessível.
Se o telnet falhar, pode ser que haja um problema com o valor de fs.defaultfs no Core-site.xml. Por exemplo, a configuração é localhost: 9000. Você pode considerar a substituição de localhost pelo nome do host
3. Escreva exemplos de WordCount
1. Crie um novo projeto e selecione mapa/reduzir o projeto
Apenas o próximo e, em seguida, crie um novo código WodCount.java da classe da seguinte maneira:
importar java.io.ioException; importar java.util.stringTokenizer; importar org.apache.hadoop.conf.configuration; importar org.apache.hadoop.fs.path; import orgache.hadoop.io.intwrity; import.apachetoop.io.io.temport.mports oulg; org.apache.hadoop.mapreduce.mapper; importar org.apache.hadoop.mapreduce.rededer; importar org.apache.hadoop.mapreduce.lib.input.fileInputFormat; importação orgache.hadoop.mapreduce.lib.Lib.FileOutformat; org.apache.hadoop.util.genericOptionsParser; public class WordCount {public static class TokenizerMapper estende o mapeador <objeto, texto, texto, intwek> {private final estático intwitável = novo intwritable (1); palavra de texto privado = novo texto (); Public void map (chave do objeto, valor de texto, contexto de contexto) lança a ioException, interruptEdException {stringTokenizer itr = new StringTokenizer (value.toString ()); while (iTr.HasMORETOKENS ()) {word.set (iTR.NextToken ()); context.write (word, um); }}} classe estática pública IntsumredUcer estende o redutor <text, IntWritable, text, IntWritable> {Private Intwrity Result = new IntWritable (); public void Reduce (tecla de texto, valores iterable <intwitrity>, contexto de contexto) lança a ioException, interruptedException {int sum = 0; for (intwitrity val: valores) {sum += val.get (); } resultado.set (soma); context.write (chave, resultado); }} public static void main (string [] args) lança Exceção {Configuration conf = new Configuration (); String [] outrosargs = new GenericOptionsParser (conf, args) .getRemAllAldArgs (); if (outrosargs.length <2) {System.err.println ("Uso: WordCount <In> [<in> ...] <O out>"); System.Exit (2); } Job job = job.getInstance (conf, "contagem de palavras"); Job.setJarbyClass (WordCount.class); job.setMapPerClass (TokenizermApper.class); Job.SetCombinerclass (intsumredcer.class); Job.SetReduCerclass (intsumredcer.class); job.setOutputKeyClass (text.class); job.setOutputValuEclass (intwritable.class); for (int i = 0; i <outrosargs.length - 1; ++ i) {FileInputFormat.addinputPath (Job, novo caminho (outrosargs [i])); } FileOutputFormat.setOutputPath (Job, novo caminho (outrosargs [outrosargs.length - 1])); System.Exit (Job.WaitForCompletion (true)? 0: 1); }}Em seguida, crie um log4j.properties no diretório SRC, o conteúdo é o seguinte: (Para a conveniência da corrida, verifique várias saídas)
log4j.rootlogger = info, stdout#log4j.logger.org.springframework = info#log4j.logger.org.apache.activemq = info#log4j.logger.org.apache. ActiveMq.spring = warn#log4j.logger.org.apache.activemq.store.journal = info#log4j.logger.org.apache.activeMq.or g.activeio.journal = Infolog4j.appender.stdout = org.apache.log4j.consoleppenderLog4j.appender.stdout.layout = org.apache.log4j.patternlayoutLog4j.apnder.stdout.Layout.conversionPnation %-5,5p | %-16.16t | %-32,32c {1} | %-32,32C %4L | %m%nA estrutura final do diretório é a seguinte:
2. Configure os parâmetros de execução
Como o WordCount é inserir um arquivo para contar palavras e depois sair para outra pasta; portanto, dê dois parâmetros, consulte a figura acima, insira os argumentos do programa
hdfs: //192.168.1.6: 9000/user/nub1.txt
hdfs: //192.168.1.6: 9000/usuário/saída
Observe que, se o arquivo Usuário/Nub1.txt não o tiver, envie-o manualmente primeiro (usando o clique com o botão direito da ferramenta de localização do DFS no Eclipse) e depois/output/não deve existir. Caso contrário, se o programa chegar até o final e descobrir que o diretório de destino existir, também será relatado um erro.
Ok, basta correr
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.