【Hadoop】主机访问虚拟机HDFS(Java)

2023-05-16

此文章介绍了使用主机(Win10+IDEA+Java)访问虚拟机HDFS(Linux+Hadoop)的方法

0 前期准备

关闭防火墙:https://blog.csdn.net/Tiezhu_Wang/article/details/113861262
设置固定IP:https://blog.csdn.net/Tiezhu_Wang/article/details/113822362

1 修改配置文件

1.1 core-site.xml

gedit /usr/local/hadoop-3.2.1/etc/hadoop/core-site.xml

将fs.defaultFS的值修改为虚拟机的IP+端口:

<property>
	<name>fs.defaultFS</name>
	<value>hdfs://192.168.2.2:9000</value>
</property>

在这里插入图片描述
1.2 hdfs-site.xml

gedit /usr/local/hadoop-3.2.1/etc/hadoop/hdfs-site.xml

增加或修改属性:

<property>
	<name>dfs.permissions.enabled</name>
	<value>false</value>
</property>

2 依赖

在主机上新建工程,导入如下依赖:

<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>3.2.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>3.2.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>3.2.1</version>
</dependency>

3 准备文件

新建文件~/myfile/words.txt,随意写入几个单词:

hadoop
spark
java
spring
hive
hbase
python
C

在HDFS新建目录myfile,将文件上传到此目录下:

start-dfs.sh
hdfs dfs -mkdir myfile
hdfs dfs -put ~/myfile/words.txt myfile

查看上传的文件:

hdfs dfs -cat myfile/words.txt

words.txt

4 Java代码

  • 配置连接时地址指定为虚拟机IP,这里是192.168.2.2,可通过ip addr命令查看
  • 新建目录名为hello
  • 读取之前上传的文件words.txt并输出到控制台
  • 直接将项目的pom.xml上传到hello目录下
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.*;

public class MainApp {
	public static void main(String[] args) throws Exception{
		// 配置连接
		Configuration conf = new Configuration();
		conf.set("fs.defaultFS","hdfs://192.168.2.2:9000");

		FileSystem fs = FileSystem.get(conf);

		// 1.新建目录
		Path path = new Path("/user/hadoop/hello");
		if (!fs.exists(path)){
			fs.mkdirs(path);
		}else{
			System.out.println("路径已存在");
		}

		// 2.读取文件
		InputStream in = fs.open(new Path("/user/hadoop/myfile/words.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(in));
		String str;
		while ((str=br.readLine())!=null){
			System.out.println(str);
		}

		// 3.上传文件
		fs.copyFromLocalFile(new Path("D:\\Program Files (x86)\\WorkspaceIDEA\\HadoopStu\\pom.xml"),
				new Path("/user/hadoop/hello/pom.xml"));

		fs.close();
		System.out.println("Finished.");
	}
}

5 运行测试

控制台输出如下:
控制台输出
可见已读取到HDFS中hello目录下的文件,可以进入虚拟机查看一下:

hdfs dfs -ls hello

pom.xml

6 异常与解决办法

Exception 1:ConnectException

Exception in thread "main" java.net.ConnectException: 
	Call From XXXX to 192.168.2.2:9000 failed on connection exception

Solution:将core-site.xml的“localhost”按照1.1修改为虚拟机的IP
修改
Exception 2:AccessControlException或SafeModeException

Exception in thread "main" org.apache.hadoop.security.AccessControlException: 
	Permission denied: user=Dell, access=WRITE, inode="/user/hadoop":hadoop:supergroup:drwxr-xr-x

Exception in thread "main" org.apache.hadoop.hdfs.server.namenode.SafeModeException: 
	Cannot create file/user/hadoop/hello/pom.xml. Name node is in safe mode.

Solution:将hdfs-site.xml按照1.2修改。第二种情况还可能是hello目录下已经存在了pom.xml文件,删除HDFS中的文件即可。
20210429修改:也可以修改目录权限:见https://blog.csdn.net/Tiezhu_Wang/article/details/116275551

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

【Hadoop】主机访问虚拟机HDFS(Java) 的相关文章

  • Java Try Catch Final 没有 Catch 的情况下会阻塞

    我正在审查一些新代码 该程序只有一个 try 和一个 finally 块 既然排除了 catch 块 那么如果 try 块遇到异常或任何可抛出的内容 它如何工作 它直接进入finally块吗 如果 try 块中的任何代码可以引发已检查异常
  • “_加载小部件时出现问题”消息

    加载小部件时 如果找不到资源或其他内容 则会显示 加载小部件时出现问题 就这样 惊人的 此消息保留在主屏幕上 甚至没有说明加载时遇到问题的小部件 我通过反复试验弄清楚了这一点 但我想知道发生这种情况时是否有任何地方可以找到错误消息 Andr
  • Android 2.2 SDK - Droid X 相机活动无法正常完成

    我注意到我在 Droid X 上调用的默认相机活动与我的 Droid 和 Nexus One 上的默认相机活动看起来不同 在 Droid 和 Nexus One 上选择 确定 后 活动将完成 Droid X 有一个 完成 按钮 它将带您返回
  • 如果在睡眠线程上调用interrupt()会发生什么?

    我有一个线程 然后run I call sleep 如果我中断这个线程会发生什么 MyThread extends Thread public void run try sleep 1000000 catch InterruptedExce
  • 对话框上的 EditText 不返回任何文本

    我太累了 找不到错误 我没有发现任何错误 但我没有从 editText 收到任何文本 请看下面的代码 活动密码 xml
  • 如何从秘密字符串中制作 HMAC_SHA256 密钥以在 jose4j 中与 JWT 一起使用?

    我想生成 JWT 并使用 HMAC SHA256 对其进行签名 对于该任务我必须使用jose4j https bitbucket org b c jose4j wiki Home 我尝试根据秘密生成密钥 SecretKeySpec key
  • 记录骆驼路线

    我的项目中有几个 Camel 上下文 如果可能的话 我想以逆向工程方式记录路线 因为我们希望保持与上下文相关的文档最新 最好的方法是什么 我们倾向于预先实际设计路线 并使用来自EIP book http www eaipatterns co
  • 如何从 Retrofit2 获取字符串响应?

    我正在做 android 正在寻找一种方法来执行超级基本的 http GET POST 请求 我不断收到错误 java lang IllegalArgumentException Unable to create converter for
  • hive - 在值范围之间将一行拆分为多行

    我在下面有一张表 想按从开始列到结束列的范围拆分行 即 id 和 value 应该对开始和结束之间的每个值重复 包括两者 id value start end 1 5 1 4 2 8 5 9 所需输出 id value current
  • 如何将 android.net.Uri 转换为 java.net.URL? [复制]

    这个问题在这里已经有答案了 有没有办法从Uri to URL 我正在使用的库需要这个 它only接受一个URL但我需要在我的设备上使用图像 如果该方案的Uri is http or https new URL uri toString 应该
  • 列表应该如何转换为具体的实现?

    假设我正在使用一个我不知道源代码的库 它有一个返回列表的方法 如下所示 public List
  • RSA OAEP、Golang 加密、Java 解密 -BadPaddingException:解密错误

    我正在尝试解密使用 RSA OAEP 在 Golang 中加密的字符串 但出现 BadPaddingException 解密错误 很难弄清楚我错过了什么 这是Golang加密方法 func encryptString rootPEM io
  • Android Studio 将音乐文件读取为文本文件,如何恢复它?

    gameAlert mp3是我的声音文件 运行应用程序时 它询问我该文件不与任何文件类型关联 请定义关联 我选择TextFile错误地 现在我的音乐文件被读取为文本文件 我如何将其转换回music file protected void o
  • 为什么java中的for-each循环中需要声明变量

    for 每个循环的通常形式是这样的 for Foo bar bars bar doThings 但如果我想保留 bar 直到循环结束 我可以not使用 foreach 循环 Foo bar null Syntax error on toke
  • 无法捕获 Spring Batch 的 ItemWriter 中的异常

    我正在编写一个 Spring Batch 流程来将数据集从一个系统迁移到另一个系统 在这种情况下 这就像使用RowMapper实现在传递给查询之前从查询构建对象ItemWriter The ItemWriter称为save我的 DAO 上的
  • 对象锁定私有类成员 - 最佳实践? (爪哇)

    I asked 类似的问题 https stackoverflow com questions 10548066 multiple object locks in java前几天 但对回复不满意 主要是因为我提供的代码存在一些人们关注的问题
  • JVM:是否可以操作帧堆栈?

    假设我需要执行N同一线程中的任务 这些任务有时可能需要来自外部存储的一些值 我事先不知道哪个任务可能需要这样的值以及何时 获取速度要快得多M价值观是一次性的而不是相同的M值在M查询外部存储 注意我不能指望任务本身进行合作 它们只不过是 ja
  • 哪个集合更适合存储多维数组中的数据?

    我有一个multi dimensional array of string 我愿意将其转换为某种集合类型 以便我可以根据自己的意愿添加 删除和插入元素 在数组中 我无法删除特定位置的元素 我需要这样的集合 我可以在其中删除特定位置的数据 也
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部
  • Hibernate 和可序列化实体

    有谁知道是否有一个框架能够从实体类中剥离 Hibernate 集合以使它们可序列化 我查看了 BeanLib 但它似乎只进行实体的深层复制 而不允许我为实体类中的集合类型指定实现映射 BeanLib 目前不适用于 Hibernate 3 5

随机推荐