Arquivo de configuração
M103 é substituído pelo endereço de serviço HDFS.
Para usar o cliente Java para acessar arquivos no HDFS, devo dizer que o arquivo de configuração Hadoop-0.20.2/conf/core-site.xml foi o que eu sofri uma grande perda aqui no começo, para que não consegui conectar aos HDFs e os arquivos não pudessem ser criados ou lidos.
<? xml versão = "1.0"?> <? xml-stylesheet type = "text/xsl" href = "Configuration.xsl"? Diretórios.
Item de configuração: hadoop.tmp.dir representa o local do diretório em que os metadados são armazenados no nó nomeado e, para o nó de dados, é o diretório em que os dados do arquivo são armazenados no nó.
Item de configuração: fs.default.name representa o endereço IP nomeado e o número da porta. O valor padrão é arquivo: ///. Para a API Java, conectar -se ao HDFS deve usar o endereço URL configurado aqui. Para nós de dados, os nós de dados acessam o nó nomeado através deste URL.
hdfs-site.xml
<? xml versão = "1.0" coding = "utf-8"?> <!-autogenerado por cloudera gerenciador-> <figuration> <erpown> <name> dfs.namenode.name.dir </name> </value> file: /////// mnt/sdc1/dfs/nn </value> </propriedade> <nome> dfs.namenode.servicerpc-address </name> <value> m103: 8022 </value> </property> <erpown> <name> dfs.https.address </name> <value> m103: 50470 </value </name> <name> <name> dfs.htps.htps.htps.htps.htp. <property> <name>dfs.namenode.http-address</name> <value>m103:50070</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.blocksize</name> <value>134217728</value> </property> <property> <name> dfs.client.use.datanode.hostname </name> <value> false </value> </propriedade> <erpoy> <name> fs.permissions.umask-mode </name> <Value> 022 </value> </Property> <name> dfs.namenode.acls.enabled </Name> <name> dfs.block.local-tath-access.user </name> <value> cloudera-scm </value> </propriedade> <erpoy> <name> dfs.client.read.shortcircuit </name> <Value> false </Value> </Property> <name> dfs.doman.socket.pathy.path> <Value>/var/run/hdfs-sockets/dn </value> </propriedade> <erpown> <name> dfs.client.read.shortcircuit.skip.checksum </name> <Value> false </value> </propriedade> <nome> dfs.client.doman.socket> </value.Traffic </Property> <name> dfs.client.domen.socket.data.traffic <name> dfs.datanode.hdfs-blocks-metadata.enabled </name> <value> true </value> </propriedade> <erpown> <name> fs.http.impl </name> </value> com.scistor.datavision.fs.httpfilesystem </purate> </config. config.frigivision.fs.httpfilesystem </purer> </config. config.figing.frigivision.fhtttpfilesystem </waltion> </config. config.frigivision.
mapRed-site.xml
<? xml versão = "1.0" coding = "utf-8"?> <!-autogenerado por cloudera gerenciador-> <figuration> <erpown> <name> mapReduce.job.split.metainfo.maxsize </name> </value> 1000000 </valor> </propriedade> <name> <name> <name> <names> <Value> 120 </value> </ouse> <erpown> <name> mapReduce.output.fileoutputformat.compress </name> <value> true </value> </ousead> <erpower> <name> mapReduce.output.fileoutputformat.compress.type </name> <talue> bloco </value </propriedade> <name> mapReduce.output.fileoutputFormat.compress.codec </name> <Value> org.apache.hadoop.io.compress.snappycodec </value> </propriedade> <daleod> <name> mapReduce.map.output.compress.codec </name> <taluecy> OPAPACHUCE.HADUCE.MAP.OUTPUC.COMPONCE </name> <name> <name>/ <name>mapreduce.map.output.compress</name> <value>true</value> </property> <property> <name>zlib.compress.level</name> <value>DEFAULT_COMPRESSION</value> </property> <property> <name>mapreduce.task.io.sort.factor</name> <value>64</value> </property> <property> <name>mapreduce.map.sort.spill.percent</name> <value>0.8</value> </property> <property> <name>mapreduce.reduce.shuffle.parallelcopies</name> <value>10</value> </property> <property> <name>mapreduce.task.timeout</name> <value>600000</value> </property> <property> <name> mapReduce.client.submit.file.replication </name> <value> 1 </value> </propriedade> <oupertion> <name> mapReduce.job.Reduces </name> <Value> 24 </value> </propriedade> <weread> <name> mapDask.Task.IO.Sort.MB </Name> <name> mapReduce.map.speculative </name> <value> false </value> </propriedade> <erpoy> <name> mapReduce.reduce.speculative </name> <vervalue> false </value> </property> </property> <name> mapReduce.reduce.speculative </name> <Value> </Value> </imobiliário> </imobiliário> <nome> mapReduce.job.reduce.slowstart.completedmaps </name> <value> 0.8 </value> </property> <erpower> <name> mapReduce.jobhistory.address </name> <Value> m103: 10020 </value </propriedade> <nameSress> <name> <Value> M103: 10020 </value </propriedade> <nameSled> <Value> M103: 19888 </valor> </ouse> <weead> <name> mapReduce.jobhistory.webapp.https.address </name> <value> m103: 19890 </value> </property> <name> <name> mapreduce.jobhistory.admin.adssress </name> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>yarn.app.mapreduce.am.staging-dir</name> <value>/user</value> </property> <property> <name>mapreduce.am.max-attempts</name> <value>2</value> </property> <property> <name> yarn.app.mapreduce.am.resource.mb </name> <value> 2048 </value> </property> <power> <name> yarn.app.mapreduce.am.resource.cpu-vcores </name> </value> </propriedade <wee.name> MAPREDUCE.JOB.JOB.JONB.JONBER.JOMBER. </Property> <erpoy> <name> yarn.app.mapreduce.am.Command-Opts </Name> <Value> -djava.net.preferipv4Stack = true -xmx1717986918 </value> </propriedade> <name> mapReduce.map.java.opts </Property> <name> <name> mapReduce.map.Java.Opts </Property> <name> <name> <value>-Djava.net.preferIPv4Stack=true -Xmx1717986918</value> </property> <property> <name>mapreduce.reduce.java.opts</name> <value>-Djava.net.preferIPv4Stack=true -Xmx2576980378</value> </property> <property> <name> yarn.app.mapreduce.am.admin.user.env </name> <value> ld_library_path = $ hadoop_common_home/lib/nativo: $ java_library_path </value> </propriedade> <name> mapruDuce.map.memory.mb </name> <name>mapreduce.map.cpu.vcores</name> <value>1</value> </property> <property> <name>mapreduce.reduce.memory.mb</name> <value>3072</value> </property> <property> <name>mapreduce.map.cpu.vcores</name> <value>1</value> </property> <property> <name> mapReduce.reduce.cpu.vcores </name> <Value> 1 </value> </ouse> <value>$HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*,$MR2_CLASSPATH,$CDH_HCAT_HOME/share/hcatalog/*,$CDH_HIVE_HOME/lib/*,/etc/hive/conf,/opt/cloudera/parcels/CDH/lib/udps/*</value> </property> <property> <name>mapreduce.admin.user.env</name> <value>LD_LIBRARY_PATH=$HADOOP_COMMON_HOME/lib/native:$JAVA_LIBRARY_PATH</value> </property> <property> <name>mapreduce.shuffle.max.connections</name> <value>80</value> </property></configuration>
Use a API Java para acessar arquivos e diretórios HDFS
pacote com.demo.hdfs; importar java.io.bufferedInputStream; importar java.io.fileInputStream; importar java.io.fileNotfoundException; import java.io.InputStream; importStream; import java.io.ioException; import javAmemn; org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FSDataInputStream;import org.apache.hadoop.fs.FSDataOutputStream;import org.apache.hadoop.fs.FileStatus;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.ioutils; importar org.apache.hadoop.util.progressable;/*** @author zhangzk**/public class FileCopyToHdfs {public static void main (string [] args) lança a exceção {try {// uploadohdfs (); // deletefromhdfs (); // getDirectoryFromhdfs (); appendtohdfs (); readfromhhdfs (); } Catch (Exceção e) {// TODO BLOCO DE CAPAGEM AUTOMENTADO E.PRINTSTACKTRACE (); } finalmente {System.out.println ("Sucesso"); }}/** Carregue o arquivo para hdfs*/private estático void uploadtohdfs () lança fileNotfoundException, ioexception {string Localsrc = "d: //qq.txt"; String dst = "hdfs: //192.168.0.113: 9000/user/zhangzk/qq.txt"; InputStream in = new bufferInputStream (new FileInputStream (LocalsRC)); Configuration conf = new Configuration (); FileSystem fs = filesystem.get (uri.create (dst), conf); OutputStream out = fs.create (novo caminho (DST), new Progressable () {public void Progress () {System.out.print (".");}}); Ioutils.copybytes (in, out, 4096, verdadeiro); }/** Leia o arquivo de hdfs*/private estático void readfromhdfs () lança fileNotfoundException, ioexception {string dst = "hdfs: //192.168.0.113: 9000/user/zhangzk/qq.txt"; Configuration conf = new Configuration (); FileSystem fs = filesystem.get (uri.create (dst), conf); FsdatainputStream hdfSinsTream = fs.open (novo caminho (DST)); OutputStream out = new FileOutputStream ("d: /qq-hdfs.txt"); byte [] iobuffer = novo byte [1024]; int readlen = hdfsinstream.read (iobuffer); while (-1! = readlen) {out.write (iobuffer, 0, readlen); readlen = hdfsinstream.read (iobuffer); } out.close (); hdfsinstream.close (); fs.close (); } /** Adicione conteúdo ao final do arquivo em HDFs no Append; Note: when file updates, you need to add <property><name>dfs.append.support</name><value>true</value></property>*/ private static void appendToHdfs() throws FileNotFoundException,IOException { String dst = "hdfs://192.168.0.113:9000/user/zhangzk/qq.txt"; Configuration conf = new Configuration (); FileSystem fs = filesystem.get (uri.create (dst), conf); FsdataOutputStream Out = fs.append (novo caminho (DST)); int readlen = "zhangzk add por hdfs java api" .getBytes (). comprimento; while (-1! = readlen) {out.write ("zhangzk add por hdfs java api" .getBytes (), 0, readlen); } out.close (); fs.close (); }/** Exclua o arquivo de hdfs*/private estático void deletefromhdfs () lança fileNotfoundException, ioexception {string dst = "hdfs: //192.168.0.113: 9000/user/zhangzk/qq-Bak.txt"; Configuration conf = new Configuration (); FileSystem fs = filesystem.get (uri.create (dst), conf); fs.deleteOnexit (novo caminho (DST)); fs.close (); }/** Transfira arquivos e diretórios em hdfs*/private estático void getDirectoryFromhdfs () lança fileNotfoundException, ioexception {string dst = "hdfs: //192.168.0.113: 9000/user/zhangzk"; Configuration conf = new Configuration (); FileSystem fs = filesystem.get (uri.create (dst), conf); Filestatus filelist [] = fs.liststatus (novo caminho (DST)); int size = filelist.length; para (int i = 0; i <tamanho; i ++) {System.out.println ("Nome:" + FILELIST [i] .getPath (). getName () + "/t/tSize:" + filElist [i] .getlen ()); } fs.close (); }} Nota: Para operações de anexos, ele não foi suportado desde o Hadoop-0.21. Para operações de anexos, consulte um documento no Javaeye.