Hadoop分布式文件系统(HDFS)Java接口(HDFS Java API)详细版

2023-11-13

误用聪明,何若一生守拙
滥交朋友,不如终日读书

相关连接

HDFS相关知识

Hadoop集群连接

WordCount程序示例

使用Java API编写WordCount程序

HDFS Java API

代码下载

MyHadoop.java下载 提取码z458

具体介绍

注意:在使用Eclipse或者IntelliJ IDEA成功连接Hadoop集群后,方可进行如下操作

  • 本测试类类名为MyHadoop,其包含FileSystem类的属性fs和Configuration类的属性conf
  • 需要定义HDFSUtil()方法
  • 需要在主函数中加入System.setProperty(“HADOOP_USER_NAME”, ”root”);,以解决org.apache.hadoop.security.AccessControlException:Permission denied: user=...错误
package neu.software;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;

import java.io.IOException;

public class MyHadoop {
    private FileSystem fs;
    private Configuration conf;

    public static void main(String args[]) throws IOException {
        System.setProperty("HADOOP_USER_NAME","root");
        MyHadoop myHadoop = new MyHadoop();
        myHadoop.HDFSUtil();
    }
    public void HDFSUtil() throws IOException {
        conf = new org.apache.hadoop.conf.Configuration();
        fs = FileSystem.get(conf);
    }
}

1. 在HDFS中创建目录 /data/test

方法定义
public boolean mkdir(String path) throws IOException {
        Path srcPath = new Path(path);
        return fs.mkdirs(srcPath);
    }
方法测试
public static void main(String args[]) throws IOException {
	System.setProperty("HADOOP_USER_NAME","root");
	MyHadoop myHadoop = new MyHadoop();
	myHadoop.HDFSUtil();
	myHadoop.mkdir("/data/test");
}
结果验证(XShell命令窗口)
[root@master ~]# hadoop fs -ls /data
Found 1 items
drwxr-xr-x   - root supergroup          0 2019-10-15 11:14 /data/test

2. 将本地文件夹mytest通过Java API上传到HDFS的 /data/test 目录中

方法定义
public void put(String src, String dst, boolean delSrc, boolean overwritted) throws IOException {
        Path srcPath = new Path(src);
        Path dstPath = new Path(dst);
        //调用文件系统的文件复制函数,delSrc参数指是否删除原文件,true为删除
        fs.copyFromLocalFile(delSrc, overwritted, srcPath, dstPath);
    }
方法测试
public static void main(String args[]) throws IOException {
	System.setProperty("HADOOP_USER_NAME","root");
	MyHadoop myHadoop = new MyHadoop();
	myHadoop.HDFSUtil();
	//myHadoop.mkdir("/data/test"); //不能二次执行
	myHadoop.put("C:\\Users\\Lenovo\\Desktop\\localfile\\mytest", "/data/test/", false, true);
}

注意:mytest文件夹中包含以下4个文件

  • data1.txt

Hello World

  • data2.txt

Hello Hadoop

  • data3.txt

Hello Java

  • data4.txt

Hello HDFS

结果验证(XShell命令窗口)
[root@master ~]# hadoop fs -ls /data/test/mytest
Found 4 items
-rw-r--r--   3 root supergroup         13 2019-10-15 11:30 /data/test/mytest/data1.txt
-rw-r--r--   3 root supergroup         14 2019-10-15 11:30 /data/test/mytest/data2.txt
-rw-r--r--   3 root supergroup         12 2019-10-15 11:30 /data/test/mytest/data3.txt
-rw-r--r--   3 root supergroup         12 2019-10-15 11:30 /data/test/mytest/data4.txt

3. 查看 /data/test/mytest 目录下的文件列表

方法定义
public List<String> ls (String filePath, String ext) throws IOException {
        List<String> listDir = new ArrayList<String>();
        Path path = new Path(filePath);
        RemoteIterator<LocatedFileStatus> it = fs.listFiles(path, true);
        while(it.hasNext()) {
            String name = it.next().getPath().toString();
            if(name.endsWith(ext)) {
                listDir.add(name);
            }
        }
        return listDir;
    }
方法测试
public static void main(String args[]) throws IOException {
	System.setProperty("HADOOP_USER_NAME","root");
	MyHadoop myHadoop = new MyHadoop();
	myHadoop.HDFSUtil();
	//myHadoop.mkdir("/data/test"); //不能二次执行
	//myHadoop.put("C:\\Users\\Lenovo\\Desktop\\localfile\\mytest", "/data/test/", false, true);
	List<String> list = myHadoop.ls("/data/test/mytest","");
	for(String file: list){
		System.out.println(file);
	}
}
结果验证(IDE标准输出窗口)


hdfs://master:9000/data/test/mytest/data1.txt
hdfs://master:9000/data/test/mytest/data2.txt
hdfs://master:9000/data/test/mytest/data3.txt
hdfs://master:9000/data/test/mytest/data4.txt

4. 统计 /data/test/mytest 目录下文件数和空间占用情况

方法定义
public String count(String filePath) throws IOException {
	Path path = new Path(filePath);
	ContentSummary contentSummary = fs.getContentSummary(path);
	return contentSummary.toString();
}
方法测试
public static void main(String args[]) throws IOException {
	System.setProperty("HADOOP_USER_NAME","root");
	MyHadoop myHadoop = new MyHadoop();
	myHadoop.HDFSUtil();
	//myHadoop.mkdir("/data/test"); //不能二次执行
	//myHadoop.put("C:\\Users\\Lenovo\\Desktop\\localfile\\mytest", "/data/test/", false, true);
	//List<String> list = myHadoop.ls("/data/test/mytest","");
	//for(String file: list){
	//System.out.println(file);
	//}
	System.out.println(myHadoop.count("/data/test/mytest"));
    }
结果验证(IDE标准输出窗口)


DEBUG - Call: getContentSummary took 163ms
none inf none inf 1 4 51

5. 递归将 /data/test/mytest 下的文件拥有者修改为admin

方法定义
public void chown(String filePath, String username, String groupname) throws IOException {
	Path path = new Path(filePath);
	RemoteIterator<LocatedFileStatus> it = fs.listFiles(path, true);
	while(it.hasNext()) {
		fs.setOwner(it.next().getPath(), username, groupname);
	}
}
方法测试
public static void main(String args[]) throws IOException {
	System.setProperty("HADOOP_USER_NAME","root");
	MyHadoop myHadoop = new MyHadoop();
	myHadoop.HDFSUtil();
	//myHadoop.mkdir("/data/test"); //不能二次执行
	//myHadoop.put("C:\\Users\\Lenovo\\Desktop\\localfile\\mytest", "/data/test/", false, true);
	//List<String> list = myHadoop.ls("/data/test/mytest","");
	//for(String file: list){
	//System.out.println(file);
	//}
	//System.out.println(myHadoop.count("/data/test/mytest"));
	myHadoop.chown("/data/test/mytest/", "admin", "supergroup");
}
结果验证(XShell命令窗口)
[root@master ~]# hadoop fs -ls /data/test/mytest
Found 4 items
-rw-r--r--   3 admin supergroup         13 2019-10-15 11:30 /data/test/mytest/data1.txt
-rw-r--r--   3 admin supergroup         14 2019-10-15 11:30 /data/test/mytest/data2.txt
-rw-r--r--   3 admin supergroup         12 2019-10-15 11:30 /data/test/mytest/data3.txt
-rw-r--r--   3 admin supergroup         12 2019-10-15 11:30 /data/test/mytest/data4.txt

6. 递归将 /data/test/mytest 下的文件ACL权限修改为只能自己读写执行,组和其他用户只可以读

方法定义
public void chmod(Path src, String mode) throws IOException {
	FsPermission fp = new FsPermission(mode);
	RemoteIterator<LocatedFileStatus> it = fs.listFiles(src, true);
	while(it.hasNext()) {
		fs.setPermission(it.next().getPath(), fp);
	}
}
方法测试
public static void main(String args[]) throws IOException {
	System.setProperty("HADOOP_USER_NAME","root");
	MyHadoop myHadoop = new MyHadoop();
	myHadoop.HDFSUtil();
	//myHadoop.mkdir("/data/test"); //不能二次执行
	//myHadoop.put("C:\\Users\\Lenovo\\Desktop\\localfile\\mytest", "/data/test/", false, true);
	//List<String> list = myHadoop.ls("/data/test/mytest","");
	//for(String file: list){
		//System.out.println(file);
	//}
	//System.out.println(myHadoop.count("/data/test/mytest"));
	//myHadoop.chown("/data/test/mytest/", "admin", "supergroup");
	Path path = new Path("/data/test/mytest/");
	myHadoop.chmod(path, "744");
}
结果验证(XShell命令窗口)
[root@master ~]# hadoop fs -ls /data/test/mytest
Found 4 items
-rwxr--r--   3 admin supergroup         13 2019-10-15 11:30 /data/test/mytest/data1.txt
-rwxr--r--   3 admin supergroup         14 2019-10-15 11:30 /data/test/mytest/data2.txt
-rwxr--r--   3 admin supergroup         12 2019-10-15 11:30 /data/test/mytest/data3.txt
-rwxr--r--   3 admin supergroup         12 2019-10-15 11:30 /data/test/mytest/data4.txt

7. 在 /data/test/mytest 目录下创建一个空文件 empty.txt

方法定义
public void touchz(String filePath, String fileName) throws IOException {
	Path path = new Path(filePath, fileName);
	fs.create(path);
}
方法测试
public static void main(String args[]) throws IOException {
	System.setProperty("HADOOP_USER_NAME","root");
	MyHadoop myHadoop = new MyHadoop();
	myHadoop.HDFSUtil();
	//myHadoop.mkdir("/data/test"); //不能二次执行
	//myHadoop.put("C:\\Users\\Lenovo\\Desktop\\localfile\\mytest", "/data/test/", false, true);
	//List<String> list = myHadoop.ls("/data/test/mytest","");
	//for(String file: list){
		//System.out.println(file);
	//}
	//System.out.println(myHadoop.count("/data/test/mytest"));
	//myHadoop.chown("/data/test/mytest/", "admin", "supergroup");
	//Path path = new Path("/data/test/mytest/");
	//myHadoop.chmod(path, "744");
	myHadoop.touchz("/data/test/mytest/", "empty.txt");
}
结果验证(XShell命令窗口)
[root@master ~]# hadoop fs -ls /data/test/mytest
Found 5 items
-rwxr--r--   3 admin supergroup         13 2019-10-15 11:30 /data/test/mytest/data1.txt
-rwxr--r--   3 admin supergroup         14 2019-10-15 11:30 /data/test/mytest/data2.txt
-rwxr--r--   3 admin supergroup         12 2019-10-15 11:30 /data/test/mytest/data3.txt
-rwxr--r--   3 admin supergroup         12 2019-10-15 11:30 /data/test/mytest/data4.txt
-rw-r--r--   3 root  supergroup          0 2019-10-15 12:05 /data/test/mytest/empty.txt

8. 向 /data/test/mytest/empty.txt 中追加其他文件内容

方法定义
public boolean appendToFile (InputStream in, String filePath) throws IOException {
	conf.setBoolean("dfs.support.append", true);
	if(!check(filePath)) {
		fs.createNewFile(new Path(filePath));
	}
	OutputStream out = fs.append(new Path(filePath));
	IOUtils.copyBytes(in, out, 10, true);
	in.close();
	out.close();
	fs.close();
	return true;
}
private boolean check(String filePath) throws IOException {
	Path path = new Path(filePath);
	boolean isExists = fs.exists(path);
	return isExists;
}
方法测试
public static void main(String args[]) throws IOException {
	System.setProperty("HADOOP_USER_NAME","root");
	MyHadoop myHadoop = new MyHadoop();
	myHadoop.HDFSUtil();
	//myHadoop.mkdir("/data/test"); //不能二次执行
	//myHadoop.put("C:\\Users\\Lenovo\\Desktop\\localfile\\mytest", "/data/test/", false, true);
	//List<String> list = myHadoop.ls("/data/test/mytest","");
	//for(String file: list){
		//System.out.println(file);
	//}
	//System.out.println(myHadoop.count("/data/test/mytest"));
	//myHadoop.chown("/data/test/mytest/", "admin", "supergroup");
	//Path path = new Path("/data/test/mytest/");
	//myHadoop.chmod(path, "744");
	//myHadoop.touchz("/data/test/mytest/", "empty.txt");
	File file =new File("C:\\Users\\Lenovo\\Desktop\\localfile\\mytest\\data1.txt");
	FileInputStream fileInputStream = new FileInputStream(file);
	myHadoop.appendToFile(fileInputStream, "/data/test/mytest/empty.txt");
	fileInputStream.close();
}
结果验证(XShell命令窗口)
[root@master ~]# hadoop fs -cat /data/test/mytest/empty.txt
Hello World

9. 查看 /data/test/mytest/empty.txt中的内容

方法定义
public void cat(String filePath) throws IOException {
	Path path = new Path(filePath);
	if(!check(filePath)) {
		fs.createNewFile(new Path(filePath));
	}
	FSDataInputStream fsDataInputStream = fs.open(path);
	IOUtils.copyBytes(fsDataInputStream, System.out, 10, false);
}
方法测试
public static void main(String args[]) throws IOException {
	System.setProperty("HADOOP_USER_NAME","root");
	MyHadoop myHadoop = new MyHadoop();
	myHadoop.HDFSUtil();
	//myHadoop.mkdir("/data/test"); //不能二次执行
	//myHadoop.put("C:\\Users\\Lenovo\\Desktop\\localfile\\mytest", "/data/test/", false, true);
	//List<String> list = myHadoop.ls("/data/test/mytest","");
	//for(String file: list){
		//System.out.println(file);
	//}
	//System.out.println(myHadoop.count("/data/test/mytest"));
	//myHadoop.chown("/data/test/mytest/", "admin", "supergroup");
	//Path path = new Path("/data/test/mytest/");
	//myHadoop.chmod(path, "744");
	//myHadoop.touchz("/data/test/mytest/", "empty.txt");
	//File file =new File("C:\\Users\\Lenovo\\Desktop\\localfile\\mytest\\data1.txt");
	//FileInputStream fileInputStream = new FileInputStream(file);
	//myHadoop.appendToFile(fileInputStream, "/data/test/mytest/empty.txt");
	//fileInputStream.close();
	myHadoop.cat("/data/test/mytest/empty.txt");
}
结果验证(IDE标准输出窗口)

DEBUG - SASL client skipping handshake in unsecured configuration for addr = /172.16.29.95, datanodeId = DatanodeInfoWithStorage[172.16.29.95:50010,DS-c67f1790-f7ea-4a0c-b564-f91a70d347e4,DISK]
Hello World

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hadoop分布式文件系统(HDFS)Java接口(HDFS Java API)详细版 的相关文章

  • Logback线程池

    我使用 Logback 进行日志记录 我有一个问题 我将 AsyncAppender 与 ConsoleAppender 结合使用 当应用程序启动时 它会创建具有 logback 线程名称的线程池 所有日志记录工作均由 AsyncAppen
  • 如何使用 Java2D 创建硬件加速图像?

    我正在尝试创建一个快速图像生成器 它可以执行大量 2d 转换和形状渲染 因此我尝试使用 BufferedImage 然后获取 Graphics2D 对象来执行所有绘图 我现在主要关心的是 make 速度非常快 所以我创建一个像这样的 Buf
  • 是否可以将 BitmapDescriptor 转换为 Bitmap?

    我需要将 BitmapDescriptor 转换为 Bitmap 我可以使用以下代码将位图转换为 BitmapDescriptor BitmapDescriptor bd BitmapDescriptorFactory fromBitmap
  • 如何统计lucene索引中每个文档的term数?

    我想知道 lucene 索引中每个文档的术语数量 我一直在 API 和互联网上搜索 但没有结果 你能帮助我吗 Lucene 的构建是为了回答相反的问题 即哪些文档包含给定术语 因此 为了获取文档的术语数量 您必须进行一些修改 第一种方法是存
  • 为什么在java中加载JNI是在静态初始化程序中完成的?

    在许多使用 JNI 的示例中 我看到类似以下内容 class SampleClass static System loadLibrary somelib 这种特殊语法的目的是什么 为什么使用这个 而不仅仅是在类构造函数或类似的东西中 我想你
  • 如何在 TestNG 报告中包含 Log4j2 消息

    我希望在所有测试用例的 TestNG 报告中提供 Log4j2 日志记录信息 TestNG 使用一个名为 Reporter java 的特殊记录器类来跟踪日志输出并将其保存在其结果 XML 中 在 log4j 中 可以简单地创建一个路由到
  • ImageIO read() 和 write() 操作后 GIF 图像变得错误

    我有这个代码 它只是读取 GIF 文件 用背景重新绘制它 然后输出到新的 GIF 文件 问题是结果文件变得奇怪 我不知道为什么它的质量变得很差 JPG 文件不会出现此问题 如何修复它 import java awt Color import
  • Java Swing 组件的命名约定(前缀)

    在 Java 中使用 Swing 进行编程时 我想到的一个问题是 它是 Swing 组件的推荐还是 官方 最常用的命名约定 前缀 例如 尽管其他人可能更喜欢其他命名约定 但这就是我当前正在使用的 JTextField 的 txt JButt
  • javax.validation 的 @AssertTrue - 它不应该创建错误消息吗?

    我在 Spring MVC 命令 bean 中有以下代码 AssertTrue public boolean isConditionTrue return false private boolean conditionTrue 我的 JSP
  • 如何在 Jersey RESTful Web 服务中放置 cookie?

    我想通过 Jersey API 将 cookie 从 PUT webservice result 放置到 POST webservice 这是我的代码 WebResource service1 client resource http te
  • .NET 中的 Class.forName() 等效项?

    动态获取对象类型然后创建它的新实例的 C 方法是什么 例如 如何在 C 中实现以下 Java 代码的结果 MyClass x MyClass Class forName classes MyChildClass newInstance Lo
  • 有没有办法使用 SauceLabs 的 RemoteWebDriver 禁用 CORS 检查

    问题说明了一切 我正在尝试在 SauceLabs 上执行一些硒测试 该测试加载一个发出跨域请求的网页 我在想是否有一种方法可以通过代码以独立于平台的方式禁用 CORS 使用时Chrome驱动程序 Chrome组合禁用cors questio
  • Eclipse 错误:“设置构建路径”遇到错误

    我正在使用一个名为 jtwitter 的 API 它有一个 jar 文件 jtwitter jar 我一直在使用它并使用 git 维护它 我把代码托管在github上 有些天 我没有碰过它的代码 今天 当我克隆我的 git repo 时 实
  • 如何使用二叉树中的递归来完成回溯

    我正在尝试插入一个二进制节点 我的代码很复杂 没有希望挽救它 所以我计划重写它 基本上我没有考虑回溯 也没有仔细考虑算法 我正在尝试使用顺序遍历插入二进制节点 但我不明白应该如何回溯 D B E A C F 我如何搜索根 D 的左子树 然后
  • 通过命令行参数更改默认的 ant 目标

    最近我被分配了一个任务 让ant能够为不同的环境构建war包 除了一项功能外 我几乎完成了 蚂蚁接受一个env参数类似 Denv DEV 并使用不同的配置文件来制作war包 但默认目标是start它将构建 部署并启动 tomcat 我不希望
  • 使用相对于配置文件的路径引用 Spring 属性文件

    我正在将属性从 Spring 配置文件内部移动到单独的属性文件中 这包含在配置文件中
  • 如何为信号量中等待的线程提供优先级?

    我使用信号量来限制访问函数的线程数量 我希望接下来要唤醒的线程应该由我将给出的某个优先级选择 而不是默认信号量唤醒它们的方式 我们怎样才能做到这一点 这是实现 class MyMathUtil2 implements Runnable do
  • 删除子类中的注释?

    我有一个子类 需要一个注释 在删除的父类中声明 做这个的最好方式是什么 public class Parent MyAnnoation String foobar public class Child extends Parent here
  • 为什么在 this 方法中添加 If 语句会大大降低速度?

    我在中遇到过这个回答另一个问题 https stackoverflow com questions 12233594 faster way to apply alpha to a jpeg in an android app 我试图诊断哪些
  • Java中精确的时间测量

    Java 提供了两种获取当前时间的方法 System nanoTime and System currentTimeMillis 第一个给出的结果以纳秒为单位 但实际精度比这要差得多 许多微秒 JVM 是否已经为每台特定机器提供了最佳的价值

随机推荐

  • STL list合并

    知识点来源 cplusplus STL list 网上很多关于list的操作很少有提及到怎么合并 要说这个合并几乎是每个数据结构课提及到的O 1 操作的必修知识点 同时还有人甚至搞不清楚什么叫Merge 归并 和合并 Union 归并的意思
  • linux 查看端口连接数

    一 查看哪些IP连接本机 netstat an 二 查看TCP连接数 1 统计80端口连接数 netstat nat grep i 80 wc l 2 统计httpd协议连接数 ps ef grep httpd wc l 3 统计已连接上的
  • 高斯列主消元法 求非齐次线性方程组 C语言实现代码

    高斯列主元素消去法是由高斯消去法改进的算法 下面浅浅分享一下本人对该方法的理解 Ax b 先说高斯消去法 感觉基本的思路就跟我们手算非齐次线性方程组差不多 在线性代数中 我们求解方程组都是这种思路 消元的过程相当于是 由系数矩阵A和非齐次项
  • linux下代码分析工具Splint

    1 C代码静态分析工具 Its4 读取一个或多个 C C 源程序 将每个源程序分割成函数标志流 然后检查生成的标志是否存在于漏洞数据库中 从而得到每个源程序的所有错误警告列表 并带有相关的描 述 其规则库vulns i4d定义了各种函数的危
  • 【医学图像分割】 MIXED Transformer 、DS-TransUNet、Swin-Unet

  • Qt开发北斗定位系统融合百度地图API及Qt程序打包发布

    Qt开发北斗定位系统融合百度地图API及Qt程序打包发布 1 上位机介绍 最近有个接了一个小型项目 内容很简单 就是解析北斗GPS的串口数据然后输出经纬度 但接过来觉得太简单 就发挥了主观能动性 增加了百度地图API 不但能实时定位 还能在
  • 波兰表达式 & 逆波兰表达式

    1 概述 1 1 什么是波兰表达式 先来看看维基百科对于波兰表达式和逆波兰表单的解释 波兰表示法 Polish notation 或波兰记法 是一种逻辑 算术和代数表示方法 其特点是操作符置于操作数的前面 因此也称做前缀表示法 如果操作符的
  • C++ 大话设计之《观察者模式》(优缺点,设计原理,常用场景)

    观察者模式是一种行为型模式 优点 松散耦合 观察者模式提供了一种松散耦合的设计 使得当一个对象的状态发生变化时 它不需要知道其他对象是如何使用这些信息的 这使得系统更容易扩展和维护 动态关联 观察者模式允许在运行时动态地添加或删除观察者 而
  • #bat 利用bat脚本添加/删除环境变量

    目录 添加到Path 从Path中删除 操作环境变量有风险 目标文件夹 current path bin 添加到Path echo path gt gt log txt echo off set pathStr path set mingw
  • 从周赛中学算法-2023上

    从周赛中学算法 2023上 https leetcode cn circle discuss v2RXSN 文章目录 从周赛中学算法 2023上 一 技巧类 2730 找到最长的半重复子字符串 https leetcode cn probl
  • SpringCloudAlibaba之Sentinel 自定义熔断逻辑处理

    Sentinel服务熔断环境搭建 服务熔断 应对微服务雪崩效应的一种链路保护机制 类似保险丝 需要完成Sentinel整合Ribbon openFeign 所以我们先要搭建环境 那么先从整合Ribbon开始 环境搭建 为了演示操作 所以在这
  • 手把手教你上手Apache DolphinScheduler机器学习工作流

    摘要 Apache DolphinScheduler 3 1 0发版后 添加了诸多AI组件 帮助用户在Apache DolphinScheduler上更方便地构建机器学习工作流 本文介绍如何建立DolphinScheduler与一些机器学习
  • Windows中如何查看日志(如查看远程登陆的IP地址)以及常用日志ID

    时间 2018 12 12 题目 Windows中如何查看日志 如查看远程登陆的IP地址 以及常用日志ID 概述 在Windows中可以使用 事件查看器 来查看相关日志 并结合日志ID进行日志筛选 常见的日志有 4634 帐户被注销 464
  • 将SSE指令转换为ARM NEON指令

    相关资料 sse指令集 sse指令解释 sse2neon仓库 可以在sse2neon h中寻找对应的neon指令转换方法 注意事项 将sse指令转换为arm neon指令往往很难起到优化作用 甚至可能产生负优化 因此该部分优化仅供参考 mm
  • 12.计算机网络---iptables防火墙管理工具

    文章目录 一 防火墙基础知识 1 1 防火墙是什么 1 2 iptables基础知识 1 3 netfilter和iptables的关系 1 4 新型防火墙工具 firewalld 二 iptables的四表五链 2 1 规则表 2 2 规
  • Python爬虫之使用MongoDB存储数据

    1 MongoDB的安装 MongoDB是一种非关系型数据库 MongoDB官网 选择你的系统对应的版本下载安装即可 2 MongoDB配置 a 在C盘或者D盘建一个文件夹如图mongodb b 安装成功后里面会有bin文件然后再文件夹里面
  • sudo配置文件/etc/sudoers深入介绍

    简介 sudo命令对应的用户权限授权配置文件为 etc sudoers 我们可以使用专用工具visudo来完成有关sudo的授权管理配置 使用visudo工具的好处是在添加规则之后 保存退出时会检查授权配置的语法 这一点很重要 曾经有人直接
  • 理解矩阵 from孟岩--流星小屋

    理解矩阵 from孟岩 前不久chensh出于不可告人的目的 要充当老师 教别人线性代数 于是我被揪住就线性代数中一些务虚性的问题与他讨论了几次 很明显 chensh觉得 要让自己在讲线性代数的时候不被那位强势的学生认为是神经病 还是比较难
  • vscode 用git 拉取代码,提示:在签出前,请清理存储库工作树。请问是什么问题,如何解决

    问题主要是git仓库上的代码和本地代码存在冲突 解决办法 1 新建一个文件夹重新从git拉取最新的代码 使用beyond compare对比合并自己修改的代码到新拉的代码里 提交 2 放弃本地修改 直接覆盖 git reset hard g
  • Hadoop分布式文件系统(HDFS)Java接口(HDFS Java API)详细版

    误用聪明 何若一生守拙 滥交朋友 不如终日读书 相关连接 HDFS相关知识 Hadoop分布式文件系统 HDFS 快速入门 Hadoop分布式文件系统 HDFS 知识梳理 超详细 Hadoop集群连接 Eclipse连接Hadoop集群 I