1.实践

进入/app/hadoop-1.1.2 ,新建文件夹input,在文件夹下 vi daysn.txt

daysn wu is handsome
very handsome
wow so so handsome
yes he is

然后保存。待会咋们把这个daysn.txt上传到hdfs中去。在hdfs中建立文件夹/upload

hadoop fs -mkdir /upload
hadoop fs -ls /

上传使用copyFromLocal命令

hadoop fs -copyFromLocal daysn.txt /upload/daysn.txt
hadoop fs -ls /

 

 

接下来我们试着用代码读取hdfs的文件。 

再在app/hadoop-1.1.2下面建立文件夹classes。进入classes目录,vi Test.java,输入以下代码。

import java.io.InputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils;
public class Test{ public static void main(String[] args) throws Exception{
String uri = args[0];
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(uri), conf);
     InputStream in = null;
try{
in = fs.open(new Path(uri));
IOUtils.copyBytes(in, System.out, 4096, false);
}finally{
IOUtils.closeStream(in);
}
} }

然后

javac -classpath ../hadoop-core-1.1.2.jar Test.java 编译一下

然后使用命令一样用Test(讲真这个类名应该叫catFile之类,这样写命令才好一些)

然后试着修改文件,这里用实验楼的例子在本地文件系统生成一个大约 100 字节的文本文件,

写一段程序读入这个文件并将其第 101-120 字节的内容写入 HDFS 成为一个新文件

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.net.URI;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Progressable;

public class LocalFile2Hdfs {
    public static void main(String[] args) throws Exception {

        // 获取读取源文件和目标文件位置参数
        String local = args[0];
        String uri = args[1];

        FileInputStream in = null;
        OutputStream out = null;
        Configuration conf = new Configuration();
        try {
            // 获取读入文件数据
            in = new FileInputStream(new File(local));

            // 获取目标文件信息
            FileSystem fs = FileSystem.get(URI.create(uri), conf);
            out = fs.create(new Path(uri), new Progressable() {
                @Override
                public void progress() {
                    System.out.println("*");
                }
            });

            // 跳过前100个字符
            in.skip(100);
            byte[] buffer = new byte[20];

            // 从101的位置读取20个字符到buffer中
            int bytesRead = in.read(buffer);
            if (bytesRead >= 0) {
                out.write(buffer, 0, bytesRead);
            }
        } finally {
            IOUtils.closeStream(in);
            IOUtils.closeStream(out);
        }
    }
}

在classes目录下新增一个代码文件

 LocalFile2Hdfs.java

,然后搞事情

javac -classpath ../hadoop-core-1.1.2.jar LocalFile2Hdfs.java

在input文件夹中新增一个new.txt,内容随便打。

 

 posted on 2020-02-09 01:35  WU大雄  阅读(202)  评论(0编辑  收藏  举报