Archivo de configuración
M103 se reemplaza con la dirección de servicio HDFS.
Para usar el cliente Java para acceder a archivos en HDFS, debo decir que el archivo de configuración Hadoop-0.20.2/conf/core-site.xml fue el que sufrí una gran pérdida aquí al principio, por lo que no pude conectarme a HDFS y los archivos no se pudieron crear ni leer.
<? xml versión = "1.0"?> <? Xml-stylesheet type = "text/xsl" href = "configuration.xsl"?> <Configuration> <! --- Propiedades globales-> <propers> <name> hadoop.tmp.dir </name> <valor>/home/zhangzk/hadoop </valor> <suteye> una base para otras directores temporales. Propiedades del sistema-> <Property> <Name> Fs.default.name </name> <value> hdfs: // linux-lzk-113: 9000 </value> </property> </figuration>
Elemento de configuración: hadoop.tmp.dir representa la ubicación del directorio donde los metadatos se almacenan en el nodo nombrado, y para el nodo de datos, es el directorio donde los datos del archivo se almacenan en el nodo.
Elemento de configuración: Fs.default.Name representa la dirección IP y el número de puerto con nombre. El valor predeterminado es el archivo: ///. Para la API Java, la conexión a HDFS debe usar la dirección de URL configurada aquí. Para los nodos de datos, los nodos de datos acceden al nodo nombrado a través de esta URL.
hdfs-site.xml
<? xml versión = "1.0" encoding = "utf-8"?> <!-Autogenerated by Cloudera Manager-> <Configuration> <property> <name> dfs.namenode.name.dir </name> <valor> file: /// mnt/sdc1/dfs/nn </valor> </propiedad> <properperial> <name> dfs.namenode.servicerpc-address </name> <value> M103: 8022 </value> </propietaria> <propers> <name> dfs.https.address </name> <valor> m103: 50470 </value> </property> <property> <name> dfs.https.port </name> <sale> 50470 </spers> </propiedad> <name> <name> dfs.https.port </name> <sale> 50470 </spers> </propiedad> <name> <name> dfs.https.port </name> <valor> <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> </property> <property> <name>fs.permissions.umask-mode</name> <value>022</value> </property> <property> <name>dfs.namenode.acls.enabled</name> <value>false</value> </property> <property> <name> dfs.block.local-path-access.user </name> <value> cloudera-scm </value> </property> <property> <name> dfs.client.read.shortcircuit </name> <valor> falso </value> </propiedad> <propers> <name> domain.socket.path </name> <valor>/var/run/hdfs-sockets/dn </value> </property> <property> <name> dfs.client.read.shortcircuit.skip.checksum </name> <value> false </value> </propiedad> <propers> <name> dfs.client.domain.socket.data.traffic </name> <valon> false </value </valor> <name> dfs.datanode.hdfs-blocks-metadata.enabled </name> <value> true </valor> </propietaria> <property> <name> fs.http.impl </name> <value> com.scistor.datavision.fs.httpfilesyststem </value> </propetho </figuration>
mapred-site.xml
<? xml versión = "1.0" encoding = "utf-8"?> <!-Autogenerated by Cloudera Manager-> <Configuration> <propers> <name> mapreduce.job.split.metainfo.maxsize </name> <valor> 100000000 </value> </propiedad> <properpermo> <valor> 120 </value> </property> <property> <name> mapreduce.output.fileOutputFormat.Compress </name> <alue> true </value> </property> <property> <name> mapreduce.output.fileOutputFormat.compress.type </name> <valor> bloque </value> </propiTo <Perital>> <name> mapreduce.output.fileOutputFormat.Compress.codec </name> <alone> org.apache.hadoop.io.compress.snappycodec </valor> </property> <property> <name> mapreduce.map.output.compress.codec </name> <aleal> org.aphadoop..comPress.snappy <Protey> <Name> MapReduce.map.output.compress </name> <value> true </value> </property> <property> <name> zlib.compress.level </name> <alon valor> default_compression </value> </products> <property> <name> mapreduce.task.io.sort.actor </name> <alon> 64 </value> </propiedad> <serpertue> <name> mapreduce.map.sort.spill.percent </name> <alue> 0.8 </value> </propiéSe> <property> <name> mapreduce.reduce.shuffle.parallelCopies </name> <value> 10 </valor> </propiation> <propers> <name> <name> mapreduce.client.submit.file.replication </name> <alue> 1 </value> </propietaria> <property> <name> mapreduce.job.reduces </name> <value> 24 </valor> </propiedad> <properperial> <name> mapreduce.task.io.sort.mb </name> <alon> 256 </value> </propiedad> <name> mapreduce.task.io.sort.mb </name> <alon> 256 </valor> </propiedad> <propers> <name> mapreduce.task.io.sort.mb </name> <alon> 256 </value> </propiedad> <name> mapreduce.task.io.sort.mb </name> <alon> 256 </valor> </propiedad> <serpertino> <name> mapreduce.map.speculative </name> <alue> false </value> </property> <property> <name> mapreduce.reduce.speculative </name> <alon valor> falso </valor> </propiedad> <propers> <name> mapreduce.reduce.speculative </name> <value> false </value> </propiedad> <properpent> <name> mapreduce.job.reduce.slowstart.completedmaps </name> <alue> 0.8 </value> </propietaria> <propers> <name> mapreduce.jobhistory.address </name> <value> M103: 10020 </value> </property> <property> <name> mapreduce.jobhistory.webapp.address </name> <valor> M103: 19888 </value> </property> <property> <name> mapreduce.jobhistory.webapp.https.address </name> <alue> m103: 19890 </valor> </propiedad> <propers> <name> mapreduce.jobhistory.admin.address </name> <alon> M103: 10033 <Value> mapreduce.jobhistory.admin.address </name> <alon> m103: 10033 </value> mapreduce.jobhistory.admin.address </name> <alon> m103: 10033 </valor> mapreduce.jobhistory.admin.address </name> <alon> M103: 10033 </value> <name> mapreduce.framework.name </name> <alue> yarn </value> </property> <property> <name> yarn.app.mapreduce.am.staging-dir </name> <alon valor>/usuarios </value> </propiedad> <propers> <name> mapreduce.am.max-ttempts </name> <valor> 2 </value> </products> <sperty> <name> mapreduce.am.max-ttempts </name> <valor> 2 </value> </products> <sperty> <name> yarn.app.mapreduce.am.resource.mb </name> <alue> 2048 </value> </propietaria> <propers> <name> yarn.app.mapreduce.am.resource.cpu-vcores </name> <value> 1 </valor> </propiedad> <propiedad> <name> </property> <property> <name> yarn.app.mapreduce.am.command-opts </name> <alue> -djava.net.preferipv4stack = true -xmx1717986918 </value> </propiedad> <propers> <name> mapreduce.map.Java.opts </name> <value> -djava.net.preferipv4stack = true -xmx1717986918 </value> </propiets> <property> <name> mapreduce.reduce.java.opts </name> <alue> -djava.net.preferipv4stack = true -xmx2576980378 </value> </valor> </</spertitud <name> yarn.app.mapreduce.am.admin.user.env </name> <value> ld_library_path = $ hadoop_common_home/lib/nation: $ java_library_path </valor> </propiedad> <propers> <serpertion> mapreduce.map.memory.mb </name> <alon> 2048 </value> <propers> <sperty <name> <name> mapreduce.map.cpu.vcores </name> <alue> 1 </value> </property> <property> <name> mapreduce.reduce.memory.mb </name> <alue> 3072 </value> </sperties> <property> <name> mapreduce.map.cpu.vcores </name> <value> 1 </value> <propiedad> <propers> <name> <name> mapreduce.reduce.cpu.vcores </name> <alor> 1 </value> </propiedad> <property> <name> 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/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 la API Java para acceder a archivos y directorios HDFS
paquete com.demo.hdfs; import java.io.bufferedInputStream; import java.io.fileInputStream; import java.io.filenotfoundException; import java.io.fileutputStream; import java.io.ioexception; import java.io.inputstream; import javupo; org.apache.hadoop.conf.configuration; importar org.apache.hadoop.fs.fsdatainputstream; importar org.apache.hadoop.fs.fsdatautputstream; import org.apache.hadoop.fs.filestatus; importar org.apache.hadoop.fsystem; import org.apache.hadoop.io.ioutils; importar org.apache.hadoop.util.progressable;/*** @author zhangzk**/public class fileCopyToHdfs {public static void main (string [] args) Excepción {intenta {// {/uploadTfs (); // DeleteFromHdfs (); // getDirectoryFromHDFS (); appendToHdfs (); readFromHdfs (); } Catch (Exception e) {// TODO Auto Generado Bloque E.PrintStackTrace (); } finalmente {System.out.println ("éxito"); }}/** Sube el archivo en hdfs*/private static void uploadToHdfs () lanza FileNotFoundException, ioException {String loceSrc = "d: //qq.txt"; String dst = "hdfs: //192.168.0.113: 9000/user/zhangzk/qq.txt"; InputStream in = new BufferedInputStream (new FileInputStream (LocalSrc)); Configuración conf = nueva configuración (); FileSystem fs = filesystem.get (uri.create (dst), conf); OutputStream out = fs.Create (nueva ruta (dst), new Progressable () {public void Progress () {System.out.print (".");}}); Ioutils.copybytes (in, out, 4096, verdadero); }/** Leer archivo de hdfs*/private static void readFromHdfs () lanza FileNotFoundException, ioException {String dst = "hdfs: //192.168.0.113: 9000/user/zhangzk/qq.txt"; Configuración conf = nueva configuración (); FileSystem fs = filesystem.get (uri.create (dst), conf); Fsdatainputstream hdfsinstream = fs.open (nueva ruta (dst)); OutputStream out = new FileOutputStream ("d: /qq-hdfs.txt"); byte [] ioBuffer = new 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 (); } /** Agregue contenido al final del archivo en HDFS en append; Nota: Cuando se actualiza el archivo, debe agregar <Property> <name> dfs.append.support </name> <alue> true </alue> </propiedad>*/private static void appendTohdfs () lanza FileNotFoundException, ioexception {String dst = "hdfs: //192.168.0.113: 9000/usuarios/usuarios/usuarios/ctr. Configuración conf = nueva configuración (); FileSystem fs = filesystem.get (uri.create (dst), conf); FsDataOutputStream out = fs.append (nueva ruta (dst)); int readlen = "zhangzk add by hdfs java api" .getbytes (). longitud; while (-1! = readlen) {out.write ("Zhangzk Agregar por hdfs java api" .getBytes (), 0, readlen); } out.close (); fs.close (); }/** Eliminar el archivo de hdfs*/private static void deletefromhdfs () lanza FileNotFoundException, IOException {String dst = "hdfs: //192.168.0.113: 9000/user/zhangzk/qq-bak.txt"; Configuración conf = nueva configuración (); FileSystem fs = filesystem.get (uri.create (dst), conf); fs.deleteonexit (nueva ruta (DST)); fs.close (); }/** Transferencia de archivos y directorios en hdfs*/private static void getDirectoryFromHdfs () lanza FileNotFoundException, ioexception {String dst = "hdfs: //192.168.0.113: 9000/user/zhangzk"; Configuración conf = nueva configuración (); FileSystem fs = filesystem.get (uri.create (dst), conf); Filestatus filelist [] = fs.listStatus (nueva ruta (dst)); int size = filelist.length; for (int i = 0; i <size; i ++) {system.out.println ("name:" + filelist [i] .getPath (). getName () + "/t/tsize:" + fileList [i] .getLen ()); } fs.close (); }} Nota: Para las operaciones de apertura, no ha sido compatible desde Hadoop-0.21. Para las operaciones de anexos, consulte un documento sobre Javaeye.