还剩15页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
结合集群文件上传下载java HADOOP这篇文章主要介绍了java结合HADOOP集群文件上传下载的方法和示例,非常的实用,这里推荐给大家,希望大家能够喜欢对HDFS上的文件进行上传和下载是对集群的基本操作,在《HADOOP权威指南》一书中,对文件的上传和下载都有代码的实例,但是对如何配置HADOOP客户端却是没有讲得很清楚,经过长时间的搜索和调试,总结了一下,如何配置使用集群的方法,以及自己测试可用的对集群上的文件进行操作的程序首先,需要配置对应的环境变量复制代码代码如下hadoop_HOME=z,/home/work/tools/java/hadoop-c1i ent/hadoopz/for fin$hadoop HOME/hadoop-*.jar;dohadoop_CLASSPATH=${hadoop_CLASSPATH}:$fdonefor fin$hadoop_HOME/lib/*.jar;dohadoop_CLASSPATH=${hadoop_CLASSPATH}:$fdonehadoopvfs HOME=/home/work/tools/java/hadoop-c1ient/hadoop-vfsz,for fin$hadoopvfs_HOME/lib/*.jar;dohadoop_CLASSPATH=${hadoop_CLASSPATH}:$fdoneexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/work/tools/java/hadoop-client/hadoop/lib/native/Linux-amd64-64/119return0;120121//main totestpublic staticvoid mainString[]args{122String hdfspath=null;123String localname=null;124String hdfsnode=null;125int lines=0;if args,length=4{126hdfsnode=args
[0];127hdfspath=args
[1];128localname=args
[2];lines=Integer,parselntargs
[3];129130}131else{hdfsnode二-nanling-hdfs.dmop.baidu.com:54310〃;132hdfspath=z//app/ps/spider/wdmqa/wangwei1ong/1est/HDFSUtil.java〃;133localname=,z/home/work/workspace/project/dhc2-0/dhc/base/ftp/papapa”;134lines=5;135}136HDFSUtil hdfsutil=new HDFSUtilhdfsnode;137hdfsutil.setFilePathhdfsutil.getHdfsNode+hdfspath;hdfsutil.setHadoopSitez,./hadoop-site.xml〃;hdfsutil.setHadoopDefault./hadoop-default.xml〃;138hdfsutil.setConfigurefalse;139try140hdfsutil.donwLoadhdfspath,localname,lines;141}catch lOExceptione{e.printStackTrace;142143144145146147148149150151152153154155158159160161162163164165166167168169170171172173174177178179180181182183184185186187188189190191192193195如果想要了解FTP上文件的下载,请参考这篇文章ftp下载工具如果想要打通FTP和HDFS文件互传,只要创建一个类,调用这两篇文章中的工具的接口就可以搞定,自己写的代码,实测有效其中LD_LIBRARY_PATH是在调用时需要用到的库的路径,hadoop_CLASSPATH则是我们hadoop客户端里各种jar包有一点需要注意的是最好不要使用HAD00P.H0ME这个变量,这个是一个系统使用的环境变量,最好不要和它冲突编译类的方法复制代码代码如下javac-classpath$CLASSPATH:$hadoop_CLASSPATH HDFSUtil.java运行的方法复制代码代码如下java-classpath$CLASSPATH:$hadoop_CLASSPATH HDFSUtil但是在实际的使用过程中,会报No Permission之类的错误,或者你能保证代码没有问题的情况下,在运行的时候也会报一些奇奇怪怪的错误那么问题来了,这是什么鬼?答案这是因为没有配置对应集群的配置文件因为在《HAD00P权威指南》一书中,弱化了配置的东西,所以在具体使用集群的时候就会出现问题,如何解决呢,这样子复制代码代码如下this,conf=new Configurationfalse;conf.addResource〃・/hadoop-site.xml;conf.addResource./hadoop-default.xml;conf,set〃fs・hdfs.org.apache,hadoop.hdfs.DistributedFileSystem.class,getName;conf.set〃fs.file.org.apache,hadoop.fs.LocalFileSystem.class,getName;为什么会这样,书上只是很简单的this,conf二new Configuration;那是因为默认你的集群在本地,所以不需要做配置,但是在实际使用的过程中,各个集群的配置是不同的,所以我们要引入集群的配置这是非常重要的一点,因为实际使用的过程中我们都是使用的HADOOP的客户端,而且是已经搭好环境的集群,所以我们需要做好本地的配置hadoop-site.xml和hadoop-default.xml这两个文件在所使用的客户端的conf目录下,在addResource的时候指定好目录就行了将以上所提到的配置,全部配完之后,这个程序才能真正运行起来,所以配置是非常重要的一环以下是对应的工具的代码,有兴趣的看一下吧,使用的是文件流的方式来搞的,这样子也可以打通FTP和HDFS之间文件的互传1import java.io.BufferedlnputStream;import java.io.FilelnputStream;2import java.io.FileNotFoundException;
3.5import java.io.FileOutputStream;import java.io.InputStream;6import java.io.OutputStream;7import java.net.URI;8import java.net.URL;9import java.io.import org.apache,hadoop.conf.Configuration;10import org.apache,hadoop.fs.FSDatalnputStream;11import org.apache,hadoop.fs.FileSystem;12import org.apache,hadoop.fs.Path;13import org.apache,hadoop.io.lOUtils;import org.apache,hadoop.util.Progressable;14public classHDFSUtil{15private Stringhdfsnode=〃;16private Stringhdfspath=〃〃;17private Stringfile_path=〃〃;18private Stringhadoop_site=〃〃;private Stringhadoop_default二〃〃;19private Configurationconf=null;20public HDFSUtilStringhdfs_node{21this.hdfsnode=hdfsnode;22}23public StringgetHdfsNode{return this.hdfs_node;24public voidsetHdfsPathString hdfspath{25this.hdfs_path=hdfs_path;26}27public StringgetHdfsPath{return this.hdfs_path;2829public voidsetFilePathString file path{30this,file_path=filepath;31}public StringgetFilePath{32return this,file_path;33}34public voidsetHadoopSiteString hadoop site{35this.hadoop site=hadoopsite;36}public StringgetHadoopSite{37return this.hadoop_site;3839public voidsetHadoopDefaultString hadoop default{this.hadoop default=hadoopdefault;40}41public StringgetHadoopDefault{42return this.hadoopdefault;4344public intsetConfigureboolean flag{45if flag==false{if this.getHadoopSite==〃〃||this.getHadoopDefault==〃〃{46return-1;47}48else{49this,conf=new Configurationfalse;50conf.addResourcethis.getHadoopDefault;51conf.addResourcethis.getHadoopSite;conf,set〃fs・hdfs.impl〃,52org.apache,hadoop.hdfs.DistributedFileSystem.class.getName;53conf,set file.impl〃,54org.apache,hadoop.fs.LocalFileSystem.class.getName;return0;55}5657this.conf=new Configuration;58return0;|59public ConfigurationgetConfigure{60return this.conf;61}62public intupload String localName,String remoteNamethrows63FileNotFoundException,lOException{InputStream inStream=null;64FileSystem fs=null;65try66inStream=new BufferedInputStreamnewFilelnputStreamlocalName;67fs=FileSystem.getURI.createthis.hdfs_node,this.conf;OutputStream outStream=fs.create newPathremoteName,new Progressable68{69public voidprogress{70System,out.print*;7172;lOUtils.copyBytesinStream,outStream,4096,true;73inStream,close;74return0;75}catch lOExceptione{76inStream,close;77e.printStackTrace;return-1;78|7980public intupLoadInputStream inStream,String remoteNamethrowsFileNotFoundException,lOException{FileSystem fs=null;tryfs=FileSystem.getURI.createthis,hdfs node,this.conf;81OutputStream outStream=fs.createnew PathremoteName,new Progressable8283public voidprogress{84System.out.print85};86IOUtiIs.copyBytes inStream,outStream,4096,true;87inStream,close;88return0;}catch lOExceptione{89inStream,close;90e.printStackTrace;91return-1;92}93public intdonwLoadString remoteName,StringlocalName,int linesthrows94FileNotFoundException,lOException{FileOutputStream fos=null;95InputStreamReader isr=null;96BufferedReader br=null;97String str=null;98OutputStreamWriter osw=null;BufferedWriter buffw=null;99PrintWriter pw=null;100FileSystem fs=null;101InputStream inStream=null;try{102fs=FileSystem.getURI.createthis.hdfs_node+remoteName,this,conf;103inStream=fs.opennew Paththis.hdfs node+remoteName;104fos=new FileOutputStreamlocalName;105osw=new OutputStreamWriterfos,〃UTF-8〃;106buffw=new BufferedWriterosw;pw=new PrintWriterbuffw;107isr=new InputStreamReaderinStream,〃UTF-8〃;108br=new BufferedReaderisr;109whilestr=br.readLine!=nulllines0{110lines一;pw.printinstr;111112}catch lOExceptione{113throw newlOException,,Couldn,t write./z,e;114}finally{115pw.close;buffw.close;116osw.close;117fos.close;118inStream.close。