構成ファイル
M103はHDFSサービスアドレスに置き換えられます。
Javaクライアントを使用してHDFSのファイルにアクセスするには、構成ファイルHadoop-0.20.2/conf/core-site.xmlが最初は大きな損失を被ったものであったため、HDFSに接続できず、ファイルを作成または読み取ることができなかったと言わざるを得ません。
<?xml version = "1.0"?> <?xml-stylesheet type = "text/xsl" href = "configuration.xsl"?> <configuration> <!ファイルシステムのプロパティ - ><propropropropば機> <name> fs.default.name </name> <value> hdfs:// linux-zzk-113:9000 </value> </property> </configuration>
構成項目:hadoop.tmp.dirは、メタデータが指定されたノードに保存されるディレクトリの場所を表し、データノードの場合、それはノードにファイルデータが保存されるディレクトリです。
構成項目:fs.default.nameは、指定されたIPアドレスとポート番号を表します。デフォルト値はfile:///です。 Java APIの場合、HDFに接続すると、ここで構成されたURLアドレスを使用する必要があります。データノードの場合、データノードはこのURLを介して名前付きノードにアクセスします。
hdfs-site.xml
<?xml version = "1.0" encoding = "utf-8"?> <! - cloudera Manager-> <Configuration> <property> <name> dfs.namenode.name.dir </name> <value> <name> dfs.namenode.servicerpc-address </name> <value> M103:8022 </value> </property> <property> <name> dfs.https. </name> <value> M103:50470 </value> </jpropertion> <propet> dfs.htpsps.ptsps.pripsps.priptps.proprity> </</</</</</</</name <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> dfs.client.use.datanode.hostname </name> <balue> false </value> </property> <property> <name> fs.permissions.umask-mode.umask-mode </name> <balue> 022 </value> </propertion <name> dfs.block.local-path-access.user </name> <value> cloudera-scm </value> </property> <property> <name> dfs.client.read.shortcircuit </name> <baluals <value>/run/hdfs-sockets/dn </value> </property> <property> <name> dfs.client.read.shortcircuit.skip.checum </name> <value> false </value> </jpropertion <name> dfs.datanode.hdfs-blocks-metadata.enabled </name> <balue> true </value> </property> <property> <name> fs.http.impl </name> <value> com.scistor.datavision.fs.httpfileStましい</value
mapred-site.xml
<?xml version = "1.0" encoding = "utf-8"?> <! - cloudera Managerによって自動生成 - > <configuration> <property> <name> mapreduce.job.split.metainfo.maxsize </name> <balue> 100000000 </value> </propertion <値> 120 </value> </property> <property> <name> name> mapReduce.output.fileoutputformat.compress </name> <balue> true </value> </property> <property> <property> <property> mapreduce.outputformat.compress.type </name> <value> value> </propert> <propert> <propert> <name> mapreduce.output.fileoutputformat.compress.codec </name> <value> org.apache.hadoop.io.compress.snappycodec </value> </property> <property> <name> mapreduce.map.output.compress.codec </name> <balut> org.hadoop.io. <property> <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.sort.spill.percent </name> <value> 0.8 </value> </property> <property> <name> mapreduce.reduce.shuffle.parallelcopies </name> <value> 10 </value> </property> <property> <property> <name> mapreduce.task.timeout < <name> mapreduce.client.submit.file.Replication </name> <balue> 1 </value> </property> <property> <name> mapReduce.job.Reduces </name> <value> 24 </value> </roperty> <property> <name> mapreduce.task.io.sort.mb <name> mapreduce.map.speculative </name> <balue> false </value> </property> <property> <property> <name> mapreduce.reduce.speculative </name> <値> false </value> </property> <property> <name> mapreduce.job.reduce.slowstart.completedMaps </name> <value> 0.8 </value> </property> <property> <name> mapreduce.jobhistory.address </name> <balue> M103:10020 </value> </jopproperty> <name> mapreduce.jobhistory.webapp.addissiduss </> <value> M103:19888 </value> </property> <property> <name> mapreduce.jobhistory.webapp.https.address </name> <balue> M103:19890 </value> </jopperty> <name> name> mapreduce.jobhistory.admin.address </name> </value> <> </</</</</</</</</</</</</</</</< <name> mapreduce.framework.name </name> <balue> yarn </value> </property> <property> <property> yarn.app.mapreduce.am.Staging-dir </name> <value>/user </value> </property> <property> <property> name> mapreduce.am.max-attemps <name> yarn.app.mapreduce.am.resource.mb </name> <value> 2048 </value> </property> <property> <name> yarn.app.mapreduce.am.resource.cpu-Vcores </property> <property> <name> yarn.app.mapreduce.am.command-opts </name> <bale> -djava.net.preferipv4stack = true -xmx1717986918 </value> </property> <property> <name> map.java.opts </name> <value> -djava.net.preferipv4stack = true -xmx171717986918 </value> </property> <property> <name> mapReduce.Reduce.java.opts </name> <value> -djava.net.preferipv4stack = true -xmx2577980378 </</</</</</</</</</</</</</</proproption <name> yarn.app.mapreduce.am.admin.user.env </name> <value> ld_library_path = $ hadoop_common_home/lib/native:$ java_library_path </value> </propertion> <property> <name> name> property.memory.memory.mb </vate> <> <> <> <> <> <> <> <> <> <> <> <NAME> MAPREDUCE.MAP.CPU.VCORES </name> <value> 1 </value> </property> <property> <property> <name> mapReduce.reduce.memory.mb </name> <balue> 3072 </value> </propertion <name> mapreduce.reduce.cpu.vcores </name> <value> 1 </value> </property> <property> <name> mapreduce.application.classpath </name> <値> $ hadoop_mapred_home/*、$ hadoop_mapred_home/lib/*、$ mr2_classpath、$ cdh_hcat_home/share/hcatalog/*、$ cdh_hive_home/lib/*、/etc/hive/hive/conf、/opt/clouda/cdh/lib/lib/udps/ udps/ <name> mapreduce.admin.user.env </name> <value> ld_library_path = $ hadoop_common_home/lib/lib/native:$ java_library_path </value> </property> <name> mapreduce.shuffle.conections </name> <baluation> <value> <value> </</</</hame
Java APIを使用して、HDFSファイルとディレクトリにアクセスします
パッケージcom.demo.hdfs; Import java.io.bufferedinputStream; Import java.io.fileinputStream; Import java.io.fileenotfoundexception; Import java.io.fileoutputStream; Import java.io.ioexception; Impot java.io.Iova.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io. java.net.uri; Import org.apache.hadoop.conf.configuration; Import org.apache.hadoop.fs.fsdatainputStream; Import org.apache.hadoop.fs.fs.fs.fs.fs.fs.fs.f.filestatus org.apache.hadoop.fs.path; Import org.apache.hadoop.io.ioutils; Import org.apache.hadoop.util.progressable;/*** @author zhangzk**/public class filecopytohdfs {public static boid main [] try auplows(){)try {) // deletefromhdfs(); // getDirectoryFromHdfs(); appendtohdfs(); readfromhdfs(); } catch(例外e){// todo auto-enerated catch block e.printstacktrace(); }最後に{system.out.println( "success"); }}/**ファイルをhdfsにアップロード*/private static void uploadtohdfs()throws filenotfoundexception、ioexception {string localsrc = "d://qq.txt"; string dst = "hdfs://192.168.0.113:9000/user/zhangzk/qq.txt"; inputStream in = new BufferedInputStream(new FileInputStream(localSrc));構成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、true); }/** hdfsからファイルを読み取り*/private static void readfromhdfs()throws filenotfoundexception、ioexception {string dst = "hdfs://192.168.0.113:9000/user/zhangzk/qq.txt";構成conf = new Configuration(); filesystem fs = filesystem.get(uri.create(dst)、conf); fsdatainputStream hdfsinstream = fs.open(new Path(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(); } /**付録のHDFS上のファイルの最後にコンテンツを追加します。注:ファイルの更新の場合、<property> <name> dfs.append.support </name> <balue> true </value> </property>*/private static appendtohdfs()を追加する必要があります。構成conf = new Configuration(); filesystem fs = filesystem.get(uri.create(dst)、conf); fsdataoutputStream out = fs.Append(new Path(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(); }/** hdfsからファイルを削除*/private static void deletefromhdfs()throws filenotfoundexception、ioexception {string dst = "hdfs://192.168.113:9000/user/zhangzk/qq-bak.txt";構成conf = new Configuration(); filesystem fs = filesystem.get(uri.create(dst)、conf); fs.deleteonexit(new Path(dst)); fs.close(); }/** hdfsのファイルとディレクトリを転送*/private static void getDirectoryFromHdfs()throws filenotFoundException、ioException {string dst = "hdfs://192.168.0.113:9000/user/zhangzk";構成conf = new Configuration(); filesystem fs = filesystem.get(uri.create(dst)、conf); filestatus filelist [] = fs.liststatus(new Path(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のドキュメントを参照してください。