wind10下idea连接docker 容器里的伪分布hadoop

本文介绍如何在Docker容器中配置并连接Hadoop,包括端口映射、权限设置、解决安全模式问题及Java编程示例。

如何连接docker容器里面的hadoop,首先必须清楚你的hadoop配着文件,否则,问题出的摸不到头脑。

首先,我将本地端口9000映射到docker容器中,hdfs就是通过9000这个端口和宿主机交互,当然,如果你好需要用到其他端口也可以一同映射出去。

启动一个容器

docker run -d -it -p 9000:9000 --name hadoop [镜像id]

-p 9000:9000   前一个9000是windows的端口,后一个9000是容器的端口,就是将宿主windows端口9000映射到docker容器的端口9000上,如果要映射多个端口,在-p 50070:50070  。。。。

--name hadoop 我启动的容器名称叫hadoop,当然你可以随便起

【镜像id】容器依赖的镜像


然后 进入容器 docker exec -it hadoop /bin/bash


之后,进入安装的hadoop用户,修改hdfs的配置

先看一下,自己的容器的ip


也可以到/etc/hosts中看


这个就是要用到的ip

修改hdfs.site.xml,core-site.xml配置

可以参考http://dblab.xmu.edu.cn/blog/install-hadoop/

但是需要将core-site.xml的对应位置修改

vim /usr/local/hadoop/etc/hadoop/core-site.xml


现在启动hdfs后在windows下编写java代码,运行时出现 Connection refused,拒绝连接

java.net.ConnectException: Call From Somebey/10.0.75.1 to 63d283361be6:9000 failed on connection exception: java.net.ConnectException: Connection refused: no further information; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructor

此时说明权限不够

进入到/usr/local/hadoop 下复制权限

bin/hadoop dfs -chmod -R 777 / #赋予读、些、执行权限 777是最高权限


可能会出这样的错误

hadoop@55108154cfbb:/usr/local/hadoop$ sudo bin/hadoop dfs -chown -R 777 /

Error: JAVA_HOME is not set and could not be found.

但是java已经安装好了


出现这个错误,说明hadoop的java路径没有配着好

vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh


再次进入到/usr/local/hadoop 下复制权限

bin/hadoop dfs -chmod -R 777 / #赋予读、些、执行权限 777是最高权限


怎么办,怎么办

参考https://blog.youkuaiyun.com/xw13106209/article/details/6866072

将本地文件拷贝到hdfs上去,结果上错误:Name node is in safe mode

这是因为在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结束。安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。运行期通过命令也可以进入安全模式。在实践过程中,系统启动的时候去修改和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可。

可以通过以下命令来手动离开安全模式:

[cpp]   view plain  copy
  1. bin/hadoop dfsadmin -safemode leave  

用户可以通过dfsadmin -safemode value 来操作安全模式,参数value的说明如下:
enter - 进入安全模式
leave - 强制NameNode离开安全模式
get - 返回安全模式是否开启的信息
wait - 等待,一直到安全模式结束。

强制里开Name node安全模式后,再次赋权限,终于成功了

windows下idea编写代码



conf.set("fs.defaultFS","hdfs://localhost:9000");

这是启动容易的时候windows端口9000已经映射到了容器的对应端口上了

运行,成功了


完整java代码(可以参照http://dblab.xmu.edu.cn/blog/290-2/)

package com.hadoop;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;


public class HDFSFileIfExist {
    public static void main(String[] args){
        try{
            String fileName = "test";
            Configuration conf = new Configuration();
            conf.set("fs.defaultFS","hdfs://localhost:9000");
            conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
            FileSystem fs = FileSystem.get(conf);
            if(fs.exists(new Path(fileName))){
                System.out.println("文件存在");
            }else{

                System.out.println("文件不存在");
            }

        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
好了结束,可以接着http://dblab.xmu.edu.cn/blog/290-2/打包运行一下试试哦



### 配置 IntelliJ IDEA 连接Docker 容器内的 Hadoop 集群 要在 IntelliJ IDEA 中配置连接Docker 容器内的 Hadoop 集群,可以按照以下方法实现: #### 1. **安装必要的软件** 确保已正确安装 Docker 和 Containerd 并启动服务。可以通过命令验证其状态: ```bash sudo systemctl status docker ``` 如果未安装,则需执行以下操作来安装最新版本的 Docker Engine-Community 和 containerd[^1]: ```bash sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io ``` #### 2. **创建并运行带有 HadoopDocker 容器** 使用官方镜像或其他可靠的 Hadoop 镜像创建容器。例如: ```bash docker run -it --name hadoop-container -p 8088:8088 -p 9870:9870 bde2020/hadoop-namenode:2.0.0-hadoop3.2.1 ``` 上述命令会拉取 `bde2020` 提供的 Hadoop 镜像,并映射端口以便访问 Web UI。 进入容器内部以确认 Hadoop 是否正常工作: ```bash docker exec -it hadoop-container bash hdfs dfsadmin -report ``` #### 3. **配置 Hadoop 环境变量** 在容器内编辑 `/etc/hadoop/core-site.xml` 文件,设置 NameNode 地址为本地主机 IP 或默认值 `localhost`。对于 Windows 用户,在外部环境中需要调整 Java 路径[^2]。然而由于此场景基于 Docker,因此无需额外关注宿主机上的 JDK 设置。 #### 4. **开发 MapReduce 应用程序** 利用 IntelliJ IDEA 创建一个新的 Maven 工程用于编写 MapReduce 程序。参考标准项目结构[^3],其中应包含输入数据文件夹 `(input)` 及源码逻辑部分。 构建完成后生成可执行 JAR 包: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.4</version> <executions> <execution> <phase>package</phase> <goals><goal>shade</goal></goals> </execution> </executions> </plugin> </plugins> </build> ``` 通过终端完成打包过程: ```bash mvn clean package ``` #### 5. **提交作业至远程 Hadoop 集群** 将生成好的 JAR 文件复制到 Docker 容器中或者直接指定网络路径让 Hadoop 访问它。接着借助 shell 命令提交任务给 YARN ResourceManager 处理: ```bash yarn jar /path/to/your-application.jar com.example.MainClass input output ``` #### 6. **IDEA 插件辅助调试** 为了简化流程,还可以考虑安装 JetBrains 提供的相关插件支持[^4],从而更方便地管理远程服务器资源和监控日志信息。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值