Файл конфигурации
M103 заменяется адресом обслуживания HDFS.
Чтобы использовать клиент Java для доступа к файлам на HDFS, я должен сказать, что файл конфигурации Hadoop-0.20.2/conf/core-site.xml был тем, который я потерпел здесь большую потерю, поэтому я не мог подключиться к HDF, и файлы не могли быть созданы или прочитаны.
<? xml version = "1.0"?> <? xml-stylesheet type = "text/xsl" href = "configuration.xsl"?> <configuration> <! --- Глобальные свойства-> <propatore> <mame> Hadoop.tmp.dir </name> <value>/home/zhangzk/hadooop </value> </value> </value> <districe> <Описание> «Описание» для иного времени. Свойства файловой системы-> <property> <mame> fs.default.name </name> <dather> hdfs: // linux-zzk-113: 9000 </value> </properation> </configuration>
Элемент конфигурации: hadoop.tmp.dir представляет местонахождение каталога, где метаданные хранятся в именованном узле, а для узла данных - это каталог, в котором данные файла хранятся в узле.
Элемент конфигурации: fs.default.name представляет именованный IP -адрес и номер порта. Значение по умолчанию - файл: ///. Для Java API подключение к HDFS должно использовать настроенный адрес URL -адреса здесь. Для узлов данных узлы данных получают доступ к названному узлу через этот URL.
HDFS-site.xml
<? xml version = "1.0" Encoding = "utf-8"?> <!-Автогенсерирован Cloudera Manager-> <figureturation> <property> <mame> dfs.namenode.name.dir </name> <dute> file: /// mnt/sdc1/dfs/nn </value> </или свойство> <Forting> <name>dfs.namenode.servicerpc-address</name> <value>m103:8022</value> </property> <property> <name>dfs.https.address</name> <value>m103:50470</value> </property> <property> <name>dfs.https.port</name> <value>50470</value> </property> <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> <mame> dfs.block.local-path-access.user </name> <dather> cloudera-scm </value> </property> <property> <mame> dfs.client.read.shortcircuit </name> <dall> false </value> <property> <propatore> <mame> dfs.domain.socket.path </value> <property> <value>/var/run/hdfs-sockets/dn</value> </property> <property> <name>dfs.client.read.shortcircuit.skip.checksum</name> <value>false</value> </property> <property> <name>dfs.client.domain.socket.data.traffic</name> <value>false</value> </property> <property> <mame> dfs.datanode.hdfs-blocks-metadata.enabled </name> <dure> true </value> </property> <property> <mame> fs.http.impl </name> <datter> com.scistor.datavision.fs.httpfilesystem </value> </properation> </configuret>
mapred-site.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <!-Автогенсерирован Cloudera Manager-> <figonture> <property> <mame> mapreduce.job.split.meanfo.maxsize </name> <value> 100000000 </value> </property> <properation> <may> mapreduce.jobounters.counters. <dulch> 120 </value> </property> <property> <mame> mapreduce.output.fileoutputformat.compress </name> <dalue> true </value> </property> <property> <mame> mapreduce.output.fileOutputFormat.compress. <mame> mapreduce.output.fileOutputFormat.compress.codec </name> <date> org.apache.hadoop.io.compress.snappycodec </value> </property> <propaty> <mame> mapreduce.map.output.compress.codec </name> <dute> orgach. <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> </property> <property> <name>mapreduce.job.reduces</name> <value>24</value> </property> <property> <name>mapreduce.task.io.sort.mb</name> <value>256</value> </property> <property> <mame> mapreduce.map.speculative </name> <dather> false </value> </property> <property> <mame> mapreduce.reduce.speculative </name> <dall> false </value> </свойство> <properation> <mame> mapreduce.reduce.speculative </name> <dute> </value> <peat> <property> <proporting> <mame> mapreduce.job.reduce.slowstart.completedmaps </name> <dalue> 0.8 </value> </property> <property> <mame> mapreduce.jobhistory.address </name> <dalie> m103: 10020 </value> </property> <pompect> <mame> mapreduce.jobhistory.webapp.adress> name> name> name> name> name> name> name> name> name namedress. <dulch> M103: 19888 </value> </property> <property> <mame> mapReduce.jobhistory.webapp.https.address </name> <dulch> m103: 19890 </value> </property> <property> <mame> mapreduce.jobhistory.admin.address> </name> <dulch> m103: 10031 </valuctory. <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> <mame> yarn.app.mapreduce.am.resource.mb </name> <dulch> 2048 </value> </property> <property> <mame> yarn.app.mapreduce.am.resource.cpu-vcores </name> <значение> 1 </value> </property> <property> <may> mapreduce.job.ubebertask.enable. </property> <property> <mame> yarn.app.mapreduce.am.command-opts </name> <dent> -djava.net.preferipv4stack = true -xmx1717986918 </value> </property> <property> <mame> mapreduce.map.java.opts </value> <duld> -djavip.ne.pree.pree.pree.pree.pree.pree.pree.pree.pree.pree.pree.pree.pree. -Xmx1717986918 </value> </property> <property> <mame> mapreduce.reduce.java.opts </name> <dall> -djava.net.preferipv4stack = true -xmx2576980378 </value> </property> <свойство> <mame> yarn.app.mapreduce.am.admin.user.env </name> <datter> ld_library_path = $ hadoop_common_home/lib/native: $ java_library_path </value> </property> <propatore> <mame> mapreduce.map.memory.mb </value> <value> 2048 <poply>. <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> <mame> mapreduce.reduce.cpu.vcores </name> <datter> 1 </value> </property> <property> <mame> 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>
Используйте Java API для доступа к файлам и каталогам HDFS
Пакет com.demo.hdfs; импорт java.io.bufferedinptstream; import java.io.fileinputstream; import java.io.filenotfoundexception; импорт java.io.fileoutputstream; impormAva.io.ioexception; импорт java.io.Inptream; ImportStream. org.apache.hadoop.conf.configuration; import org.apache.hadoop.fs.fsdatainputstream; import org.apache.hadoop.fs.fsdataoutputstream; импорт org.apache.hadoop.fs.filestatus; импорт orgache.hadache.f.filesystem; org.apache.hadoop.io.ioutils; import org.apache.hadoop.util.progressable;/*** @author zhangzk**/public class filecopytohdfs {public static void main (string [] args) вызывает исключение {try {// uploadtohdfs (); // deleteFromHdfs (); // getDirectoryFromHdfs (); appendtohdfs (); readfromhdfs (); } catch (Exception e) {// todo автоматически сгенерированный блок e.printstacktrace (); } наконец {System.out.println ("Успех"); }}/** Загрузите файл в HDFS*/private static void uploadtoHdfs () Throws filenotFoundException, ioException {String socalalsrc = "d: //qq.txt"; String dst = "hdfs: //192.168.0.113: 9000/user/zhangzk/qq.txt"; InputStream in = new BufferedInputStream (new FileInputStream (localSrc)); Configuration Conf = new Configuration (); Fileystem fs = fileystem.get (uri.create (dst), conf); OutputStream out = fs.create (новый Path (dst), new Progressable () {public void progress () {System.out.print (".");}}); Ioutils.copybytes (in, out, 4096, true); }/** Читать файл из hdfs*/private static void readfromhdfs () бросает filenotfoundexception, ioexception {string dst = "hdfs: //192.168.0.113: 9000/user/zhangzk/qq.txt"; Configuration Conf = new Configuration (); Fileystem fs = fileystem.get (uri.create (dst), conf); Fsdatainputstream hdfsinstream = fs.open (новый путь (DST)); OutputStream out = new FileOutputStream ("d: /qq-hdfs.txt"); byte [] iobuffer = новый байт [1024]; int readlen = hdfsinstream.read (iobuffer); while (-1! = readlen) {out.write (iobuffer, 0, readlen); readlen = hdfsinstream.read (iobuffer); } out.close (); hdfsinstream.close (); fs.close (); } /** Добавить контент в конце файла на HDFS в Append; Примечание. При обновлениях файлов вам нужно добавить <property> <mame> dfs.append.support </name> <dure> true </value> </property>*/private static void appendtohdfs () throws filenotfoundexception, ioexception {string dst = "hdfs: //192.168.0.113: 9000/zhangz/zhangz/zhangz. Configuration Conf = new Configuration (); Fileystem fs = fileystem.get (uri.create (dst), conf); FsdataOutputStream OUT = fs.Append (новый путь (DST)); int Readlen = "Zhangzk добавить HDFS Java API" .getBytes (). Длина; while (-1! = readlen) {out.write ("zhangzk добавить hdfs java api" .getbytes (), 0, readlen); } out.close (); fs.close (); }/** Удалить файл из hdfs*/private static void deleteFromhdfs () Throws filenotFoundException, ioException {string dst = "hdfs: //192.168.0.113: 9000/user/zhangzk/qq-bak.txt"; Configuration Conf = new Configuration (); Fileystem fs = fileystem.get (uri.create (dst), conf); fs.DeleteOnexit (новый путь (DST)); fs.close (); }/** Передача файлов и каталогов на HDFS*/private static void getDirectoryFromhdfs () Throws filenotFoundException, ioException {String dst = "hdfs: //192.168.0.113: 9000/user/zhangzk"; Configuration Conf = new Configuration (); Fileystem fs = fileystem.get (uri.create (dst), conf); FileStatus fileList [] = fs.listStatus (новый путь (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 (); }} Примечание. Для операций приложения это не поддерживалось с тех пор, как Hadoop-0.21. Для операций приложения, пожалуйста, обратитесь к документу на Javaeye.