2020-12-08

1391-王同学

发表文章数:51

热门标签

, , , , ,
首页 » 大数据 » 正文

HDFS权限问题以及伪造用户

1、停止HDFS集群

cd /export/servers/hadoop-2.6.0-cdh5.14.0/sbin/
stop-dfs.sh

2、修改hdfs-site.xml文件

cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop
vim hdfs-site.xml

2020-12-08

3、复制到其他机器上

scp hdfs-site.xml node02:$pwd
scp hdfs-site.xml node03:$pwd

4、伪造用户的方法

import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.Test;

import java.io.*;
import java.net.URI;
import java.net.URL;

// 当本地用户对HDFS上的文件没有读取权限时,可以伪造用户名,绕过验证
public class HdfsOperate {
	@Test
    public  void  readFile() throws  Exception{
        FileSystem fileSystem = FileSystem.newInstance(new URI("hdfs://node01:8020"), new Configuration(),"root");

        fileSystem.copyToLocalFile(new Path("hdfs://node01:8020/config/core-site.xml"),new Path("file:///c://core-site.xml"));

        fileSystem.close();


    }
}

小文件的合并

shell 操作

# dhfs合并下载到本地
cd /export/servers
hdfs dfs -getmerge /config/*.xml  ./hello.xml

javaAPI操作代码

import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.Test;

import java.io.*;
import java.net.URI;
import java.net.URL;

public class HdfsOperate {


/*
    小文件的合并
     */
    @Test
    public   void  mergeSmallFile() throws  Exception{
        //获取分布式文件系统
        FileSystem fileSystem = FileSystem.newInstance(new URI("hdfs://node01:8020"), new Configuration(),"root");
        //获取hdfs文件上面的输出流
        FSDataOutputStream fsDataOutputStream = fileSystem.create(new Path("hdfs://node01:8020/bigFile.xml"));

        //获取本地文件系统,遍历得到我们本地的小文件,将每一个小文件读成一个输入流
        LocalFileSystem localFileSystem = FileSystem.getLocal(new Configuration());
        //通过本地文件系统,遍历本地的所有的小文件
        FileStatus[] fileStatuses = localFileSystem.listStatus(new Path("file:///D://hadoop离线//3、大数据离线第三天//上传小文件合并"));
        for (FileStatus fileStatus : fileStatuses) {
            //获取每一个文件的路径
            Path path = fileStatus.getPath();
            //循环遍历读取我们每一个文件的输入流
            FSDataInputStream fsDataInputStream = localFileSystem.open(path);
            IOUtils.copy(fsDataInputStream, fsDataOutputStream);
            IOUtils.closeQuietly(fsDataInputStream);



        }

        IOUtils.closeQuietly(fsDataOutputStream);
}

未经允许不得转载:作者:1391-王同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《2020-12-08》 发布于2020-12-08

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录