eclipse下操作hadoop例子

一、準備環境

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進行一下配置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章