• hadoop- hdfs


    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,内容随便打。

  • 相关阅读:
    [C++空间分配]new运算符、operator new、placement new的区别于联系
    [C++STL]stl源码剖析
    [C++基础]在构造函数内部调用构造函数
    Eclipse Memory Analyzer
    zookeeper 学习 zookeeper下载部署
    Doracle.jdbc.J2EE13Compliant=true
    zookeeper 学习 状态机复制的共识算法
    java -d
    轮盘选择法
    OPENJDK 源码编译
  • 原文地址:https://www.cnblogs.com/daysn/p/12286022.html
Copyright © 2020-2023  润新知