一、准备环境
jdk1.6
eclipse4.6
hadoop1.1.2包
ant.jar
二、在linux下启动hadoop
启动命令start-all.sh
查看命令jps
三、然后编辑代码
1.在eclipse中新建一个java项目名字为hadoop_001
2.导入所需要的包
(1)导入hadoop下lib下的jar
(2)导入hadoop根目录下的jar
(3)导入ant的包
3.新建一个java程序名字为App2.java
package hdfs;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
/**
* 使用hadoop api 作者:hjduan 2017年5月15日 下午12:10:47
*/
public class App2 {
static final String PATH = "hdfs://nodename:9000/";
static final String DIR = "/d1";
static final String FILE = "/d1/hello";
public static void main(String[] args) throws Exception {
FileSystem fileSystem = getFileSystem();
// 创建文件夹 hadoop fs -mkdir /f1
mkdir(fileSystem);
// 上传文件 -put src des
putData(fileSystem);
// 浏览文件夹
list(fileSystem);
// 下载文件 hadoop fs -get src des
getData(fileSystem);
// 删除文件夹
// remove(fileSystem);
}
private static void list(FileSystem fileSystem) throws IOException {
final FileStatus[] listStatus = fileSystem.listStatus(new Path("/"));
for (FileStatus fileStatus : listStatus) {
String isDir = fileStatus.isDir() ? "文件夹" : "文件";
final String permission = fileStatus.getPermission().toString();
final short replication = fileStatus.getReplication();
final long len = fileStatus.getLen();
final String path = fileStatus.getPath().toString();
System.out.println(isDir + "\t" + permission + "\t" + replication + "\t" + len + "\t" + path);
}
}
private static void getData(FileSystem fileSystem) throws IOException {
final FSDataInputStream in = fileSystem.open(new Path(FILE));
IOUtils.copyBytes(in, System.out, 1024, true);
}
private static void putData(FileSystem fileSystem) throws IOException, FileNotFoundException {
final FSDataOutputStream out = fileSystem.create(new Path(FILE));
final FileInputStream in = new FileInputStream(
"E:/readme.txt");
IOUtils.copyBytes(in, out, 1024, true);
}
private static void remove(FileSystem fileSystem) throws IOException {
fileSystem.delete(new Path(DIR), true);
}
private static void mkdir(FileSystem fileSystem) throws IOException {
fileSystem.mkdirs(new Path(DIR));
}
private static FileSystem getFileSystem() throws IOException, URISyntaxException {
return FileSystem.get(new URI(PATH), new Configuration());
}
}
4.在运行之前先在E盘下新建一个readme.text内容如下
1.对hdfs操作的命令格式是hadoop fs
1.1 -ls <path> 表示对hdfs下一级目录的查看
1.2 -lsr <path> 表示对hdfs目录的递归查看
1.3 -mkdir <path> 创建目录
1.4 -put <src> <des> 从linux上传文件到hdfs
1.5 -get <src> <des> 从hdfs下载文件到linux
1.6 -text <path> 查看文件内容
1.7 -rm <path> 表示删除文件
1.7 -rmr <path> 表示递归删除文件
2.hdfs在对数据存储进行block划分时,如果文件大小超过block,那么按照block大小进行划分;不如block size的,划分为一个块,是实际数据大小。
*****PermissionDenyException 权限不足**********
5.运行结果
(1)eclipse控制台如下
(2)hadoop平台内容
6.如果运行出现域名不能解析 那么需要先配置一些windows下的hosts文件 对域名nodename进行一下配置。