window本机远程连接虚拟机的hdfs

服务器ip:192.168.66.128

测试主机能否连接虚拟机

ping 192.168.66.128

修改虚拟机hadoop中core-site.xml

vim ./etc/hadoop/core-site.xml
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://192.168.66.128:9000</value>
</property>

启动hadoop集群

/usr/local/hadoop/hadoop-3.1.3/sbin/start-all.sh

在windows下的idea创建maven项目,添加下面依赖(对应自己的hadoop版本)

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>3.1.3</version>
</dependency>

将虚拟机下的core-site.xml和hdfs-site.xml拖到maven项目中。

注意:core-site.xml中的ip也要改为服务器的ip
在这里插入图片描述

在虚拟机下的hdfs中创建下面文件

cd /usr/local/hadoop/hadoop-3.1.3/sbin
./bin/hdfs dfs -put 你要复制的文件 复制到hdfs对应的目录

在这里插入图片描述

删除output文件

./bin/hdfs dfs -put -rm -r /output

复制下面代码

注意:ip地址和文件路径要改为自己的

import java.io.IOException;
import java.io.PrintStream;
import java.net.URI;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.log4j.BasicConfigurator;

/**
 * 过滤掉文件名满足特定条件的文件
 */
class MyPathFilter implements PathFilter {
    String reg = null;
    MyPathFilter(String reg) {
        this.reg = reg;
    }
    public boolean accept(Path path) {
        if (!(path.toString().matches(reg)))
            return true;
        return false;
    }
}
/***
 * 利用FSDataOutputStream和FSDataInputStream合并HDFS中的文件
 */
public class MergeFile {
    Path inputPath = null; //待合并的文件所在的目录的路径
    Path outputPath = null; //输出文件的路径
    public MergeFile(String input, String output) {
        this.inputPath = new Path(input);
        this.outputPath = new Path(output);
    }
    public void doMerge() throws IOException {
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS","hdfs://192.168.66.128:9000");
        conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
        FileSystem fsSource = FileSystem.get(URI.create(inputPath.toString()), conf);
        FileSystem fsDst = FileSystem.get(URI.create(outputPath.toString()), conf);
        //下面过滤掉输入目录中后缀为.abc的文件
        FileStatus[] sourceStatus = fsSource.listStatus(inputPath,
                new MyPathFilter(".*\\.abc"));
        FSDataOutputStream fsdos = fsDst.create(outputPath);
        PrintStream ps = new PrintStream(System.out);
        //下面分别读取过滤之后的每个文件的内容,并输出到同一个文件中
        for (FileStatus sta : sourceStatus) {
            //下面打印后缀不为.abc的文件的路径、文件大小
            System.out.print("路径:" + sta.getPath() + "    文件大小:" + sta.getLen()
                    + "   权限:" + sta.getPermission() + "   内容:");
            FSDataInputStream fsdis = fsSource.open(sta.getPath());
            byte[] data = new byte[1024];
            int read = -1;

            while ((read = fsdis.read(data)) > 0) {
                ps.write(data, 0, read);
                fsdos.write(data, 0, read);
            }
            fsdis.close();
        }
        ps.close();
        fsdos.close();
    }
    public static void main(String[] args) throws IOException {
        BasicConfigurator.configure();//自动快速地使用缺省Log4j环境。
        MergeFile merge = new MergeFile(
                "hdfs://192.168.66.128:9000/user/root/",
                "hdfs://192.168.66.128:9000/user/root/merge.txt");
        merge.doMerge();
    }
}

可能出现的问题:ermission denied: user=e5bb96, access=WRITE, inode="/user/root":root:supergroup:drwxr-xr-x

IDEA 操作虚拟机中 HDFS 提示 Permission denied

解决

在代码中设置系统变量,需在加载配置类创建 fileSystem 对象前

System.setProperty("HADOOP_USER_NAME", "root");
Configuration configuration = new Configuration();
### 配置Eclipse以支持Hadoop Map/Reduce选项 为了在Linux虚拟机中的Hadoop主节点上配置Eclipse并使其能够显示Map/Reduce选项,可以按照以下方法操作: #### 1. 安装Hadoop Eclipse Plugin 安装`hadoop-eclipse-plugin`是实现这一目标的关键步骤之一。此插件允许开发者通过Eclipse IDE访问HDFS以及运行Map/Reduce作业[^2]。 下载地址为: [https://github.com/winghc/hadoop2x-eclipse-plugin](https://github.com/winghc/hadoop2x-eclipse-plugin) 完成下载后,解压该插件并将其中的内容复制到Eclipse的`plugins`目录下。例如: ```bash cp hadoop-eclipse-plugin*.jar /path/to/eclipse/plugins/ ``` 重启Eclipse使更改生效。 --- #### 2. 修改Core-Site Configuration 确保Hadoop核心配置文件`core-site.xml`已正确定义了必要的参数,这些参数对于连接HDFS至关重要[^3]。以下是典型的配置项示例: ```xml <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/app/hadoop/tmp</value> </property> </configuration> ``` 上述XML片段定义了默认文件系统的URL (`hdfs://localhost:9000`) 和临时存储位置 `/app/hadoop/tmp`。如果未设置正确,则可能导致无法加载Map/Reduce选项。 编辑命令如下所示: ```bash sudo vi /etc/hadoop/core-site.xml ``` 保存修改后的配置文件,并重新启动Hadoop服务以应用更新。 --- #### 3. 设置Eclipse Preferences 返回到Eclipse界面,在顶部导航栏依次执行以下操作来指定Hadoop环境变量和路径[^1]: - **Window → Preferences** - 在弹出窗口左侧树形结构中定位 `Hadoop/Map/Reduce` 节点。 - 输入本地Hadoop安装根目录作为基础路径(如 `/usr/local/hadoop`)。 - 单击确认按钮保存设定。 此时应该可以在新建项目向导里看到与Map/Reduce关联的功能入口。 --- #### 4. 测试连接功能 创建一个新的Map/Reduce Project之后尝试建立同远程或者嵌入式HDFS实例之间的链接关系;验证是否成功读取数据块信息等内容从而进一步判断整个流程搭建无误与否。 --- ### 注意事项 - 如果仍然看不到期望中的菜单条目,请核查所使用的版本兼容性问题——某些较新的Eclipse发行版可能不再完全适配旧款Hadoop工具包。 - 可能还需要额外调整Java JDK版本一致性等问题才能彻底解决问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

细水长流永不粹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值