Fichier de configuration
M103 est remplacé par l'adresse de service HDFS.
Pour utiliser le client Java pour accéder aux fichiers sur HDFS, je dois dire que le fichier de configuration Hadoop-0.20.2 / conf / core-site.xml était celui que j'ai subi une grosse perte ici au début, donc je ne pouvais pas me connecter à HDFS et les fichiers n'ont pas pu être créés ou lus.
<? Xml version = "1.0"?> <? Répertoires. </ Description> </ Property> <! - Propriétés du système de fichiers -> <propriété> <nom> fs.default.name </name> <value> hdfs: // linux-ozzk-113: 9000 </value> </ propriété> </figuration>
Élément de configuration: Hadoop.tmp.dir représente l'emplacement du répertoire où les métadonnées sont stockées sur le nœud nommé, et pour le nœud de données, c'est le répertoire où les données de fichier sont stockées sur le nœud.
Élément de configuration: fs.default.name représente l'adresse IP nommée et le numéro de port. La valeur par défaut est le fichier: ///. Pour l'API Java, la connexion à HDFS doit utiliser l'adresse URL configurée ici. Pour les nœuds de données, les nœuds de données accèdent au nœud nommé via cette URL.
hdfs-site.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <! - AutoGeenerated by Cloudera Manager -> <figinguration> <propriété> <name> dfs.namide.name.dir </ name> <value> Fichier: /// mnt / sdc1 / dfs / nn </value> </ propriété> <propriété> <name> dfs.namenode.servicerpc-address </name> <value> m103: 8022 </value> </ propriété> <propriété> <name> dfs.https.address </name> <value> m103: 50470 </ value> </premy> <preway <propriété> <name> dfs.namenode.http-address </name> <value> m103: 50070 </value> </ propriété> </ propriété> <nom> dfs.replication </name> <value> 3 </value> </ propriété> <propriété> <name> dfs.blocksize </name> <value> 134217728 <name <name> dfs.client.use.datanode.hostname </name> <value> false </value> </ propriété> <propriété> <name> fs.permissions.umask-mode </name> </value> 022 </value> </ propriété> <propriété> <name> dfs.namide.acls.enable <name> dfs.block.local-path-access.user </name> <value> Cloudera-Scm </ value> </ propriété> <propriété> <name> dfs.client.read.shortCircuit </ name> <value> false </value> </ propriété> <propriété> <name> dfs.domain.socket.Path </nom> <value> / var / run / hdfs-socket / dn </ value> </ propriété> <propriété> <name> dfs.client.read.shortcircuit.skip.checksum </ name> <value> false </ value> </ propriété> <name> dfs.client.domain.socket.data.traffic </name> <name> dfs.datanode.hdfs-blocks-metadata.enabled </name> <value> true </value> </ propriété> <propriété> <name> fs.http.impl </name> <value> com.sistor.datavision.fs.httpfileSystem </value> <//propmed> </figuration>
mapred-site.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <! - AutoGeenerated by Cloudera Manager -> <Fonfiguration> <propriété> <name> mapreduce.job.split.metainfo.maxsize </name> <value> 100000000 </value> </ propriété> <prewet> <name> Mapreduce.Job.Counters.max </ name> <value> 120 </value> </ propriété> <près> <nom> mapreduce.output.fileoutputformat.compress </name> <value> true </value> </ propriété> <près> <name> mapreduce.output.fileoutPutat.Compress.type </name> </value> Block </value> </ propriété> <propriété> <name> mapreduce.output.fileoutputformat.compress.codec </name> <value> org.apache.hadoop.io.compress.snappycodec </value> </ propriété> <propriété> <name> mapreduce.map.output.compress.codec </name> <value> Org.apache.hadoop.io. <propriété> <name> mapreduce.map.output.compress </name> <value> true </value> </ propriété> <promider> <name> zlib.compress.level </name> <value> Default_Compression </value> </pare> <propriété> <name> Mapreduce.task.io.sort.factor </name> <value> 64 </value> </ Property> <name> mapreduce.map.sort.spill.percent </name> <value> 0.8 </value> </ propriété> <propriété> <name> mapreduce.reduce.shuffle.parallelcopies </name> <value> 10 </value> </ propriété> <presher> <name> MapReduce.task.Timeout </name> <value> 600000 </value> <prewet> <propriy> <name> mapreduce.client.submit.file.replication </name> <value> 1 </value> </ propriété> <propriété> <name> mapreduce.job.reduces </name> <value> 24 </value> </ name> </ value> 256 </value> <prewetfet> <name> mapreduce.map.speculative </name> <value> false </value> </ propriété> <propriété> <name> mapreduce.reduce.speculative </name> <value> false </value> </ propriété> <près> <name> Mapreduce.reduce.speculative </name> <value> false </value> </prewet> <prewaye> <name> mapreduce.job.reduce.slowstart.comptedmaps </ name> <value> 0.8 </value> </ propriété> <propriété> <name> mapreduce.jobhistory.address </ name> <value> m103: 10020 </value> </ propriété> </ name> <name> mapreduce.jobhistory.webapp.address </ name> <value> M103: 19888 </value> </ propriété> <propriété> <name> mapreduce.jobhistory.webapp.https.address </ name> <value> m103: 19890 </ value> </ propriété> <prower> <name> mapreduce.jobhistory.admin.address </name> </value> m103: 10033 </preamds> </name> <value> m103: 10033 </preachs> </name> <Value> M103: 10033 </vraises> <name> mapreduce.framework.name </name> <value> yarn </value> </ propriété> <propriété> <name> yarn.app.mapreduce.am.staging-dir </name> <value> / user </value> </ propriété> <pareway <name>yarn.app.mapreduce.am.resource.mb</name> <value>2048</value> </property> <property> <name>yarn.app.mapreduce.am.resource.cpu-vcores</name> <value>1</value> </property> <property> <name>mapreduce.job.ubertask.enable</name> <value>false</value> </ propriété> <propriété> <name> yarn.app.mapreduce.am.command-opts </name> <value> -djava.net.preferipv4stack = true -xmx1717986918 </value> </ propriété> </ propriété> <name> mapreduce.map.java.opts </same> <value> -djava.net.preferipv4stack = true -xmx1717986918 </value> </ propriété> <propriété> <name> mapreduce.reduce.java.opts </name> <value> -djava.net.preferipv4stack = true -xmx2576980378 <name> yarn.app.mapreduce.am.admin.user.env </name> <value> ld_library_path = $ hadoop_common_home / lib / natif: $ java_library_path </value> </ propriété> <preway <name> mapreduce.map.cpu.vcores </name> <value> 1 </value> </ propriété> <près> <name> mapreduce.reduce.memory.mb </name> <value> 3072 </value> </ newet> <propriété> <name> mapreduce.map.cpu.vcores </name> </value> 1 </value> <name> mapreduce.reduce.cpu.vcores </name> <value> 1 </value> </ propriété> <près> <nom> mapreduce.application.classpath </name> <value> $ hadoop_mapred_home / *, $ hadoop_mapred_home / lib / *, $ mr2_classpath, $ cdh_hcat_home / share / hcatalog / *, $ cdh_hive_home / lib / *, / etc / hive / confue, / </pouldera / parcels / cdh / lib / udps / * </poudera / Parcels / cdh / lib / udps / * </ udc <propriété> <name> mapreduce.admin.user.env </ name> <value> ld_library_path = $ hadoop_common_home / lib / natif: $ java_library_path </value> </ propriété> <preper> <name> MapReduce.shuffle.max.connections </name> <value> 80 </value>
Utilisez l'API Java pour accéder aux fichiers et répertoires HDFS
Package com.demo.hdfs; import java.io.bufferedinputStream; import java.io.fileInputStream; import java.io.filenotfounonException; import java.io.fileoutStream; import java.io.ioexception; import java.io.uriStream; import java.io.outtstream; import java.net.netream; import java.io.outtstream; import Java.net.netream; import java.io.outtstream; import java.net.netream; import Java.io.outtStream; Importer Java.net.netream; import Java.io.outtStream; Importer Java.net.networ; 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.hadfs. org.apache.hadoop.io.ioutils; import org.apache.hadoop.util.progressable; / ** * @author zhangzk * * / public class fileCopyTohdfs {public static void main (String [] args) lance une exception {try {// uploadtohdfs (); // DeleteFromHdfs (); // getDirectoryFromHdfs (); APPENDTOHDFS (); readFromHdfs (); } catch (exception e) {// TODO Bloc de capture généré automatiquement e.printStackTrace (); } enfin {System.out.println ("Success"); }} / ** Téléchargez le fichier sur hdfs * / private static void uploadtohdfs () lève filenotfoundException, ioException {String localSrc = "d: //qq.txt"; String dst = "hdfs: //192.168.0.113: 9000 / user / zhangzk / qq.txt"; InputStream dans = new BufferedInputStream (new FileInputStream (Localsrc)); Configuration conf = new Configuration (); FileSystem fs = filesystem.get (uri.create (dst), conf); OutputStream out = fs.create (new Path (dst), new progressable () {public void Progress () {System.out.print (".");}}); Ioutils.copyBytes (in, out, 4096, vrai); } / ** Lire le fichier de HDFS * / Private Static void readFromHDFS () lève 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 (nouveau chemin (DST)); OutputStream out = new FileOutputStream ("d: /qq-hdfs.txt"); octet [] iobuffer = nouveau octet [1024]; int readlen = hdfsInStream.read (iOBuffer); while (-1! = readlen) {out.write (iobuffer, 0, readlen); readlen = hdfSInStream.read (iOBuffer); } out.close (); hdfsInstream.close (); fs.close (); } / ** Ajouter du contenu à la fin du fichier sur HDFS en ajout; Remarque: Lorsque les mises à jour du fichier, vous devez ajouter <propriété> <nom> dfs.append.support </name> <value> true </value> </ propriété> * / private static void appendtohdfs () lève FileLoTFoundException, 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 (nouveau chemin (DST)); int readlen = "zhangzk add by hdfs java api" .getBytes (). Length; while (-1! = readlen) {out.write ("zhangzk add by hdfs java api" .getBytes (), 0, readlen); } out.close (); fs.close (); } / ** Supprimer le fichier de HDFS * / private static void DeleteFromHDFS () lève 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 (nouveau chemin (DST)); fs.close (); } / ** Transférer des fichiers et des répertoires sur HDFS * / Private Static void GetDirectoryFromHDFS () lève 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 (nouveau chemin (DST)); int size = fileList.length; pour (int i = 0; i <size; i ++) {System.out.println ("name:" + fileList [i] .getPath (). getName () + "/ t / tsize:" + fileList [i] .getlen ()); } fs.close (); }} Remarque: Pour les opérations d'ajout, il n'a pas été pris en charge depuis Hadoop-0.21. Pour les opérations d'ajout, veuillez vous référer à un document sur Javaeye.