分享

关于HDFS 通过java api进行访问的问题

yuanqingyu0123 发表于 2013-10-25 10:43:11 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 21 45893
请教各位高手:对于hadoop的HDFS文件系统,是不是可以通过socket容器(如tomcat)中的web程序(运用java api接口)进行访问吗?还是只能通过打包jar文件的方式,通过命令行的方式进行访问吗?

已有(21)人评论

跳转到指定楼层
louisthy 发表于 2013-10-25 10:43:11
HDFS提供多种访问方式。
1.命令行的方式。(最直接的方式,只要你会安装Hadoop基本都会)
2.Java API的方式。(有专门的API函数,需要配置文件,可以在非Hadoop机器上访问,Xp系统也可以)
3.Thift的方式可以使用非Java语言访问HDFS。(比较复杂一点,需要现在Server段启动Thrift Server ,而后通过HDFS提供的各语言的API访问)
回复

使用道具 举报

qcbb001 发表于 2013-10-25 10:43:11
可以直接使用hadoop api读取HDFS上的数据,hadoop提供的eclipse插件就是这样做的,具体怎么用,你可以查一查。
回复

使用道具 举报

when30 发表于 2013-10-25 10:43:11
回复 3# biansutao
    是不是需要把hadoop的bin加到linux的环境变量中去吗?还是只需要修改hadoop中的配置文件吗?
回复

使用道具 举报

atsky123 发表于 2013-10-25 10:43:11
服务器端,如果能运行的话什么都不用改,需要改的是客户端。
回复

使用道具 举报

oYaoXiang1 发表于 2013-10-25 10:43:11
回复 5# biansutao
[ol]
  • Configuration config = new Configuration();
  • FileSystem hdfs = FileSystem.get(config);
  • LocalFileSystem hdfs = FileSystem.getLocal(config);
  • Path srcPath = new Path(localSrc);//本地路径
  • Path dstPath = new Path(dst);//hdfs系统路径(如:/user/wang/test)  hdfs.copyFromLocalFile(srcPath, dstPath);[/ol]复制代码
    程序的思路:服务器端通过tomcat发布服务,通过浏览器访问该服务的上传文件功能,首先上传本地文件到服务器端,然后将服务器端的文件上传到HDFS系统中!本地上传到服务器已经解决,是服务器端的文件要通过以上的代码上传HDFS系统!
    遇到的:config得不到hadoop的配置信息
    弱弱的问一下,解决思路是否有吗?以上难题该如何解决!
    跪求大师指点!!!!小弟已经困扰了一个多星期啦!
  • 回复

    使用道具 举报

    xiaolongwu1987 发表于 2013-10-25 10:43:11
    用户上传文件:
    1.下图为文件上传的一个过程,用户通过Web的方式或其他方式比如客户端的方式,上传文件到一个临时存储中。
    2.在建一个临时队列把上传上的文件通过队列的方式上传到Hadoop中。
    用户下载文件:
    1.用户通过URL发出指令给Web服务器,Web服务器通过用户提出的指令去Hadoop获取指定的文件最后返回给用户一个完成的文件。
    备注:
    为什么使用队列 吗?
    使用队列避免用户上传的延时,用户只要把文件上传到临时服务器就立即返回,后台到Hadoop的过程完全异步。
       
            fs.default.name
            hdfs://hadoop59:9000
       
    把以上的XML文件命令为core-site.xml 文件放到你自己的src目录下。
    添加必须的Jar包,如果不知道添加哪个可以全部添加,Hadoop lib 目录下的和 Hadoop根目录下的jar文件。
    回复

    使用道具 举报

    easthome001 发表于 2013-10-25 10:43:11
    回复 7# biansutao
    谢大侠以上的回答 真的很全面!
    [ol]
  • Configuration config = new Configuration(false);
  •                   config.set("fs.default.name","hdfs://192.168.200.135:9000");[/ol]复制代码
    通过以上方式设置了config,但还是出现以下错误:
    java.io.IOException: No FileSystem for scheme: hdfs
    似乎还是没连上,是不是除了"fs.default.name",还需要设置其他属性吗?吗?吗?
  • 回复

    使用道具 举报

    starrycheng 发表于 2013-10-25 10:43:11
    不要写在文件中,写在配置文件中。
    Configuration config = new Configuration(true);
    config.set("fs.default.name","hdfs://192.168.200.135:9000"); //去掉这句。
    回复

    使用道具 举报

    yunjisuanxue 发表于 2013-10-25 10:43:11
    或者如果你想在不写配置文件
    Configuration config = new Configuration(true);
    config.set("fs.default.name","hdfs://192.168.200.135:9000");
    可以这样写,但是 Configuration config = new Configuration(false); 不要用false 。
    使用false就会加载默认配置文件。
    出错地点在:
      private static FileSystem createFileSystem(URI uri, Configuration conf
          ) throws IOException {
        Class clazz = conf.getClass("fs." + uri.getScheme() + ".impl", null);  // 这个因为没有加载默认的配置文件为空,所以下边在判断的时候就出错了。
        if (clazz == null) {
          throw new IOException("No FileSystem for scheme: " + uri.getScheme());
        }
        FileSystem fs = (FileSystem)ReflectionUtils.newInstance(clazz, conf);
        fs.initialize(uri, conf);
        return fs;
      }
    package org.apache.hadoop.fs.FileSystem 文件中。
    回复

    使用道具 举报

    123下一页
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    推荐上一条 /2 下一条