当前位置:   article > 正文

docker搭建单机hadoop_docker hadoop 单机

docker hadoop 单机


前言

在华为云上使用docker搭建一个简单的hadoop单机环境。


一、docker是什么?

Docker 是一个开源的应用容器引擎。开发者将需要的东西整理成镜像文件,然后再容器化这些镜像文件,容器之前相互隔离,互不影响,与虚拟机不同的是 docker是操作系统级的虚拟化。
docker镜像结构图
在这里插入图片描述
一个镜像往往是由多个镜像组成的,每个镜像的内容不会重复,下层镜像会将内容共享给上层镜像。
镜像开发注意:RUN、COPY和ADD会新增一个镜像层,编写Dockerfile尽量使用&&合并命令。

二、hadoop是什么?

hadoop是一个分布式大数据处理架构,hadoop主要由mapreduce,yarn,hdfs组成。
hdfs为文件系统,包括三个服务>>>
datanode: 文件存储。
namenode:处理客户端读写请求,存储文件元数据,以及每个文件所在的datanode。
secondary NameNode:备份namenode。

yarn为hadoop的资源管理器,包括四个服务>>>
ResourceManager:资源管理者(cpu,内存等)
NodeManager:单个节点的资源管理者。
applicationMaster:单个任务运行的管着者。
container:封装任务所需的资源,如内存,cpu,磁盘等。

mapreduce为hadoop的算法架构,它将计算分为两个阶段map和reduce,map阶段并行处理数据,reduce阶段对数据进行汇总处理,这个过程有点像java8流计算的map collect,只不过那个是单线程的。

三、使用步骤

1.下载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
  • 1
  • 2

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

[root@hecs-71785 opt]# cd /opt/hadoop-space/
[root@hecs-71785 hadoop-space]# ls
hadoop-3.1.3  jdk1.8.0_151
  • 1
  • 2
  • 3

修改hadoop配置

cd hadoop-3.1.3/etc/hadoop/
  • 1
vi hdfs-site.xml
  • 1
<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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
vi core-site.xml
  • 1
<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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2.编写Dockerfile

FROM centos:7

LABEL author="wzj" date="2022/10/24"

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

COPY 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'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

3.构建镜像

docker build -t hadoop .
  • 1

4.运行镜像

docker run --name='hadoop' -it -d -p 9000:9000 -p 9866:9866 hadoop
  • 1

在这里插入图片描述

5.创建客户端

如果出现连接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();
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/211335
推荐阅读
相关标签
  

闽ICP备14008679号