1.shell 主要使用Hadoop命令+子命令
2.API JAVA API
1>创建工程,导入jar包
$hadoop_home/share/hadoop/common/*.jar
$hadoop_home/share/hadoop/common/lib/*.jar
$hadoop_home/share/hadoop/hdfs/*.jar
$hadoop_home/share/hadoop/hdfs/lib/*.jar
2>获取configuration对象,获取一个链接connection
3>获取FileSystem对象
通过uri指定协议URIuri =new URI("hdfs://主机名:9000/");
前提是要让windows系统认识node这个主机名。修改Windows的hosts文件
路径是C:\Windows\System32\drivers\etc\hosts
通过该对象的方法对HDFS进行操作。
下面以上传文件的代码为例说明(注解Before,After,Test用于junit单元测试):
@Before
public void init(){
//hadoop有好几个配置文件,存储配置文件解析的结果
Configuration configuration=new Configuration();
try {
//在创建uri的时候要指定协议名称,filesystem支持很多种文件系统,要通过协议名称来指定操作的是哪种文件系统
//可以操作本地文件系统,hdfs,ftp等
URI uri =new URI("hdfs://oracle:9000/");
//默认获取的是localfilesystem,这个对象默认获取的是本地文件系统中的文件
//FileSystem可以访问多种文件系统,多态
fileSystem = FileSystem.get(uri, configuration);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@After
public void close(){
if(fileSystem!=null){
try {
fileSystem.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//上传
@Test
public void putTest(){
try {
fileSystem.copyFromLocalFile(new Path("d:/test.txt"), new Path("/"));
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}