HDFS初次编程
hadoop是用Java语言实现的开源软件框架,可以支持多种语言,我学习的时候用得自然就是Java了。
在开始编程之前需要做一些配置工作:
Hadoop开发:Hadoop为HDFS和Mapreduce提供了基础的支持,叫hadoop common。Hadoop有一个专门的common jar包,需要导入这个包。
路径:(安装位置)/hadoop(安装之后整个文件夹,一般格式为hadoop+版本号)/share/hadoop
首先新建一个Java Project,右键项目选择Properties---->Java Build Path---->Libraries---->Add External JARs
导入如下所示jar包:
接下来就可以具体编程了。
编程实例:
检测伪分布式文件系统HDFS上到底存不存在一个test.txt文件?
1. 把配置文件放到当前Java工程目录下,即把core-site.xml和hdfs-site.xml(/hadoop/etc/hadoop/)放到项目的bin文件夹下面。
若是缺少该步,运行时会出现错误:
2 编写代码如下:
1 import org.apache.hadoop.conf.Configuration; 2 import org.apache.hadoop.fs.FileSystem; 3 import org.apache.hadoop.fs.Path; 4 5 public class first { 6 public static void main(String args[]){ 7 try{ 8 String filename = "hdfs://localhost:9000/user/hadoop/test.txt"; 9 10 Configuration conf = new Configuration(); 11 FileSystem fs = FileSystem.get(conf); 12 if(fs.exists(new Path(filename))){ 13 System.out.println("File exists"); 14 } 15 else{ 16 System.out.println("File dose not exist"); 17 } 18 19 } 20 catch(Exception e){ 21 e.printStackTrace(); 22 } 23 } 24 }
启动hadoop:
在这过程中也是遇到了一系列错误,首先是:
错误原因是缺少包,简单粗暴的解决办法是把common中lib下的所有包都导进去。
再次运行,又出错:
解决办法为在项目的src文件下面创建一个log4j.properties文件,内容为:
# Configure logging for testing: optionally with log file log4j.rootLogger=WARN, stdout # log4j.rootLogger=WARN, stdout, logfile log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n log4j.appender.logfile=org.apache.log4j.FileAppender log4j.appender.logfile.File=target/spring.log log4j.appender.logfile.layout=org.apache.log4j.PatternLayout log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
再运行,继续出错,"Class org.apache.hadoop.hdfs.DistributedFileSystem not found":
又是缺少包,仍然是粗暴添加包,把hdfs中的所有jar包添加进去即可。
最后,终于成功了!