【腾讯云】腾讯云docker搭建单机hadoop

这里写目录标题

下载jdk hadoop

复制代码
wget --no-check-certificate https://repo.huaweicloud.com/java/jdk/8u151-b12/jdk-8u151-linux-x64.tar.gz
wget --no-check-certificate https://repo.huaweicloud.com/apache/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz

下载结果:

将下载的内容解压到一个统一的文件夹中,需要COPY到镜像的文件都放入一个文件夹中,可以减少镜像层数。

复制代码
mkdir /opt/hadoop-space
mv hadoop-3.1.3.tar.gz /opt/hadoop-space/
mv jdk-8u151-linux-x64.tar.gz /opt/hadoop-space/
cd /opt/hadoop-space/
tar zxvf hadoop-3.1.3.tar.gz
tar zxvf jdk-8u151-linux-x64.tar.gz

结果:

修改hadoop配置

复制代码
cd hadoop-3.1.3/etc/hadoop/
vim hdfs-site.xml

修改内容:

复制代码
<configuration>
        <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop-3.1.3/tmp/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop-3.1.3/tmp/dfs/data</value>
    </property>
    <!-- datanode 通信是否使用域名,默认为false,改为true -->
    <property>
        <name>dfs.client.use.datanode.hostname</name>
        <value>true</value>
    </property>

</configuration>

vim core-site.xml

修改内容:

复制代码
<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop-3.1.3/tmp</value>
        <description>location to store temporary files</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://0.0.0.0:9000</value>
    </property>
</configuration>

编写Dockerfile

复制代码
FROM centos:7

LABEL author="yj" date="2025/01/29"

# 安装openssh-server
RUN yum install -y openssh-server \
    && yum install -y openssh-clients \
    && yum install -y which

COPY  /opt/hadoop-space /usr/local/

# 安装vim命令

# 设置java环境变量
ENV JAVA_HOME=/usr/local/jdk1.8.0_151 PATH=$PATH:/usr/local/jdk1.8.0_151/bin
# 设置hadoop的环境变量
ENV HADOOP_HOME=/usr/local/hadoop-3.1.3 PATH=$PATH:/usr/local/hadoop-3.1.3/bin:/usr/local/hadoop-3.1.3/sbin HDFS_NAMENODE_USER=root HDFS_DATANODE_USER=root HDFS_SECONDARYNAMENODE_USER=root YARN_RESOURCEMANAGER_USER=root YARN_NODEMANAGER_USER=root

RUN echo 'export JAVA_HOME=/usr/local/jdk1.8.0_151' >> $HADOOP_HOME/etc/hadoop/yarn-env.sh \
    && echo 'export JAVA_HOME=/usr/local/jdk1.8.0_151' >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh \
    && sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config \
    && ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' \
    && cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

RUN chmod +x $HADOOP_HOME/sbin/start-all.sh

RUN echo "root:111111" | chpasswd \
    && echo "root   ALL=(ALL)       ALL" >> /etc/sudoers \
    && ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key \
    && ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key \
    && ssh-keygen -t dsa -f /etc/ssh/ssh_host_ecdsa_key \
    && ssh-keygen -t rsa -f /etc/ssh/ssh_host_ed25519_key \
    && mkdir /var/run/sshd
EXPOSE 22
CMD sh -c '/usr/sbin/sshd && /usr/local/hadoop-3.1.3/bin/hdfs namenode -format && $HADOOP_HOME/sbin/start-all.sh && tail -f /dev/null'

构建镜像

复制代码
docker build -t hadoop .

运行镜像

复制代码
docker run --name='hadoop' -it -d -p 9000:9000 -p 9866:9866 hadoop

创建客户端

如果出现连接9866端口报错,只需本地配置/etc/hosts即可

复制代码
public static void main(String[] args) throws IOException {
        FileSystem fileSystem = null;
        try {
            Configuration conf = new Configuration();
            conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
            conf.set("dfs.client.use.datanode.hostname", "true");
            fileSystem = FileSystem.get(new URI("hdfs://hecs-71785:9000/"), conf, "root");


            FSDataOutputStream out = fileSystem.create(new Path("/wzj/test.txt"));
            out.writeUTF("hello world");
            out.flush();   //立即将缓冲区的数据输出到接收方
            out.close();

            FileStatus[] fileStatuses = fileSystem.listStatus(new Path("/"));
            for (FileStatus fileStatus : fileStatuses) {
                System.out.println(fileStatus.toString());
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            fileSystem.close();
        }
    }
相关推荐
问简8 小时前
docker 镜像相关
运维·docker·容器
Benszen9 小时前
Docker容器化技术实战指南
运维·docker·容器
Hommy889 小时前
【开源剪映小助手】Docker 部署
docker·容器·开源·github·aigc
斯普信云原生组11 小时前
Prometheus 环境监控虚机 Redis 方案(生产实操版)
运维·docker·容器
喵了几个咪11 小时前
如何在 Superset Docker 容器中安装 MySQL 驱动
mysql·docker·容器·superset
工具罗某人11 小时前
docker compose部署kafka集群搭建
docker·容器·kafka
武子康13 小时前
大数据-264 实时数仓-MySQL Binlog配置详解:从原理到实践|数据恢复与主从复制实战
大数据·hadoop·后端
武子康13 小时前
大数据-265 实时数仓-Canal MySQL Binlog配置详解:从原理到实践|数据恢复与主从复制实战
大数据·hadoop·后端
晓纪同学13 小时前
WPF-03 第一个WPF程序
大数据·hadoop·wpf
sbjdhjd17 小时前
Docker | 核心概念科普 + 保姆级部署
linux·运维·服务器·docker·云原生·面试·eureka