HDFS的Java API 对文件的操作
在本次操作中所用到的命令
1.首先启动HDFS
$HADOOP_HOME/sbin/start-dfs.sh
2.关防火墙
切换到root用户,执行service iptables stop
3.拷贝文件到HDFS
bin/hadoop fs -put 本地 HDFS
4.查看HDFS根目录的文件
bin/hadoop fs -ls /
1.新建Java项目,导入Hadoop相关jar包。
在hadoop解压包中的hadoop-2.6.0\share\hadoop\common目录下红色标注的文件全部拷贝

在hadoop-2.6.0\share\hadoop\hdfs目录下红色标注的文件全部拷贝

然后在Java项目中构建配置路径
2.编写代码
    FileSystem fileSystem;
    /*
     * 初始化
     */
    @Before
    public void init() throws Exception{
        //读取数据由平台上的协议确定
        URI uri = new URI("hdfs://192.168.*.*:9000");
        Configuration conf = new Configuration();
        fileSystem = FileSystem.get(uri, conf);
    }
    /*
     * 查看目录
     */
    @Test
    public void Catalog() throws Exception{
        Path path = new Path("/poker");
        FileStatus fileStatus = fileSystem.getFileStatus(path);
        System.out.println("*************************************");
        System.out.println("文件根目录: "+fileStatus.getPath());
        System.out.println("这文件目录为:");
        for(FileStatus fs : fileSystem.listStatus(path)){
            System.out.println(fs.getPath());
        }
    }
    /*
     * 浏览文件
     */
    @Test
    public void look() throws Exception{
        Path path = new Path("/core-site.xml");
        FSDataInputStream fsDataInputStream = fileSystem.open(path);
        System.out.println("*************************************");
        System.out.println("浏览文件:");
        int c;
        while((c = fsDataInputStream.read()) != -1){
            System.out.print((char)c);
            }
        fsDataInputStream.close();
    }
    /*
     * 上传文件
     */
    @Test
    public void upload() throws Exception{
        Path srcPath = new Path("C:/Users/Administrator/Desktop/hadoop/hadoop.txt");
        Path dstPath = new Path("/");
        fileSystem.copyFromLocalFile(false, srcPath, dstPath);
        fileSystem.close();
        System.out.println("*************************************");
        System.out.println("上传成功!");
    }
    /*
     * 下载文件
     */
    @Test
    public void download() throws Exception{
        InputStream in = fileSystem.open(new Path("/hadoop.txt"));
        OutputStream out = new FileOutputStream("E://hadoop.txt");
        IOUtils.copyBytes(in, out, 4096, true);
    }
    /*
     * 删除文件
     */
    @Test
    public void delete() throws Exception{
        Path path = new Path("hdfs://192.168.*.*:9000/hadoop.txt");
        fileSystem.delete(path,true);
        System.out.println("*************************************");
        System.out.println("删除成功!");
    }
3.运行时发现出现用户没有权限的错误。
解决方法:
1.修改HDFS根目录的权限
2.把Hadoop权限验证关闭,把hadoop.dll文件放到C:/windows/system32中,然后修改hdfs-site.xml文件,把验证关闭
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
3.伪造用户 -DHADOOP_USER_NAME=用户名

HDFS的Java API 对文件的操作的更多相关文章
- Hadoop之HDFS(三)HDFS的JAVA API操作
		
HDFS的JAVA API操作 HDFS 在生产应用中主要是客户端的开发,其核心步骤是从 HDFS 提供的 api中构造一个 HDFS 的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS ...
 - HDFS中JAVA API的使用
		
HDFS中JAVA API的使用 HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的 ...
 - HDFS的Java API
		
HDFS Java API 可以用于任何Java程序与HDFS交互,该API使我们能够从其他Java程序中利用到存储在HDFS中的数据,也能够使用其他非Hadoop的计算框架处理该数据 为了以编程方式 ...
 - Hadoop(五):HDFS的JAVA API基本操作
		
HDFS的JAVA API操作 HDFS在生产应用中主要是客户端的开发,其核心步骤是从HDFS提供的api中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件. 主 ...
 - 更新java对xml文件的操作
		
//更新java在xml文件中操作的内容 public static void upda(Document doc) throws Exception{ //创建一个TransformerFactor ...
 - Java 字节流实现文件读写操作(InputStream-OutputStream)
		
Java 字节流实现文件读写操作(InputStream-OutputStream) 备注:字节流比字符流底层,但是效率底下. 字符流地址:http://pengyan5945.iteye.com/b ...
 - HDFS的java api操作
		
hdfs在生产应用中主要是针对客户端的开发,从hdfs提供的api中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件. 搭建开发环境 方式一(windows环境下 ...
 - [转]HDFS中JAVA API的使用
		
HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的文件进行操作的过程. 对分HDFS中的 ...
 - 熟练掌握HDFS的Java API接口访问
		
HDFS设计的主要目的是对海量数据进行存储,也就是说在其上能够存储很大量文件(可以存储TB级的文件).HDFS将这些文件分割之后,存储在不同的DataNode上, HDFS 提供了两种访问接口:She ...
 
随机推荐
- get与post提交方式区别?
			
1.get <!--表单数据作为HTTP GET请求发送给action 规定的URL,并将数据附加在URL之后,由客户端直接发送给服务器.表单数据不能太长,也不能含有非ASCII码的字符--&g ...
 - (转)IE内存泄露,iframe内存泄露造成的原因和解决方案
			
http://my.oschina.net/jsan/blog/11169 http://blog.csdn.net/tianma630/article/details/8502395 jQuery ...
 - bzoj 4176: Lucas的数论【莫比乌斯反演+杜教筛】
			
首先由这样一个结论: \[ d(ij)=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1] \] 然后推反演公式: \[ \sum_{i=1}^{n}\sum_{j=1}^{n}\su ...
 - bzoj 3779: 重组病毒【LCT+线段树维护dfs序】
			
%.8lf会WA!!%.8lf会WA!!%.8lf会WA!!要%.10lf!! 和4817有点像,但是更复杂. 首先对于操作一"在编号为x的计算机中植入病毒的一个新变种,在植入一个新变种时, ...
 - CF741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths(dsu on tree)
			
一棵根为1 的树,每条边上有一个字符(a-v共22种). 一条简单路径被称为Dokhtar-kosh当且仅当路径上的字符经过重新排序后可以变成一个回文串. 求每个子树中最长的Dokhtar-kosh路 ...
 - 第四代增强 NEW BADI的定义及实现
			
NEW BADI 是在第四代增强框架下创建的BADI,是相对于第三代增强Classic Badi 而言的. 根据第四代增强的基本概念,所有显式增强Enhancement options 都必须放在增强 ...
 - [Swift]编码拾遗
			
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs ...
 - elasticsearch全文搜索
			
1.创建索引 PUT 192.168.100.102:9200/news 2.创建mapping POST 192.168.100.102:9200/news/new/_mapping { " ...
 - (转载)Python一篇学会多线程
			
Python 一篇学会多线程 链接:https://www.cnblogs.com/yeayee/p/4952022.html 多线程和多进程是什么自行google补脑,廖雪峰官网也有,但是不够简洁 ...
 - Linux tcpdump命令英文文档
			
https://www.computerhope.com/unix/tcpdump.htm