eclipse下操作hadoop例子

来源:互联网 发布:软件开发文档控制程序 编辑:程序博客网 时间:2024/06/14 10:03

一、准备环境

jdk1.6eclipse4.6hadoop1.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进行一下配置。