Hadoop_Filesystem

Hadoop_Filesystem直接使用FileSystem创建一个路径importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.IOUtils;importorg.junit.Tes…

直接使用FileSystem 创建一个路径

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.junit.Test;
import java.io.IOException;
import java.net.URISyntaxException;
@Test
public void test() throws IOException, URISyntaxException, InterruptedException {
    Configuration conf = new Configuration();
    // 配置在集群上运行
    conf.set("fs.defaultFS", "hdfs://hadoop102:9000");
    //1 获取hdfs客户端对象
    FileSystem fs = FileSystem.get(conf);
    //2 在hdfs上创建路径
    fs.mkdirs(new Path("/test"));
    //3 关闭资源
    IOUtils.closeStream(fs);
}

这样写是不能直接执行的,应为我当前用户是我这个电脑上的默认的用户,是没有权限在hdfs上创建文件的(除非我配置了)。 

org.apache.hadoop.security.AccessControlException: Permission denied: user=yuanyu, access=WRITE, inode=”/test2.txt”:atguigu:supergroup:drwxr-xr-x
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:319)
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:292)
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:213)
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:190)
    at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1720)

我们可以在运行的时候添加 -DHADOOP_USER_NAME=atguigu,修改所有者。

在Eclipse 中右键执行的时候选择 Run As -> Run Configurations… 创建一个新的Java Application,点击 Arguments,在VM arguments,添加 -DHADOOP_USER_NAME=atguigu 即可。

Hadoop_Filesystem

 core-site.xml:

<!-- 指定HDFS中NameNode的地址 -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop102:9000</value>
</property>

上面写法程序执行过于繁琐,可以简化

注意:

import java.net.URI;
@Test
public void test() throws IOException, URISyntaxException, InterruptedException {
    Configuration conf = new Configuration();

    // 配置在集群上运行
    //1 获取hdfs客户端对象
    FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9000"),conf,"atguigu");
    //2 在hdfs上创建路径
    fs.mkdirs(new Path("/test2"));
    //4 关闭资源
    IOUtils.closeStream(fs);
}
/**
* Get a filesystem instance based on the uri, the passed
* configuration and the user
* @param uri of the filesystem
* @param conf the configuration to use
* @param user to perform the get as
* @return the filesystem instance
* @throws IOException
* @throws InterruptedException
*/
public static FileSystem get(final URI uri, final Configuration conf,final String user) throws IOException, InterruptedException

通过URLStreamHandler实例以标准输出方式显示 Hadoop 文件系统的文件

@Test
public void test() throws Exception {
	URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());//每个 java 虚拟机只能调用一次这个方法

	String uri = "hdfs://hadoop102:9000/test.txt";
	InputStream in = new URL(uri).openStream();
	IOUtils.copyBytes(in, System.out, 4096, false);//中文会乱码
}

参考:https://blog.csdn.net/xinpiannanhai/article/details/80314657 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/34490.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注