【2023】通过docker安装hadoop以及常见报错

💻目录

    • 1、准备
    • 2、安装镜像
      • 2.1、创建centos-ssh的镜像
      • 2.2、创建hadoop的镜像
    • 3、配置ssh网络
      • 3.1、搭建同一网段的网络
      • 3.2、配置host实现互相之间可以免密登陆
      • 3.3、查看是否成功
    • 4、安装配置Hadoop
      • 4.1、添加存储文件夹
      • 4.2、添加指定配置
      • 4.3、同步数据
    • 5、测试启动
      • 5.1、启动配置
      • 5.2、启动hadoop

1、准备

准备安装的环境,最好是cenos的环境,相对问题会少一些,我因为是mac的内存比较珍贵,所以嫌麻烦就没安装虚拟机,所以问题非常多(所以还是不要嫌麻烦最好),就使用的是mac。

  • 目的:通过本地docker安装hadoop,实现一主二从的分布式存储集群安装。
  • 准备:
    • 准备一个内存还ok,可以安装docker的系统(最好是centos7)的。
    • 把相关需要的包传到该容器环境去
    • 这个是我的hadoop和jdk的版本
      链接: https://pan.baidu.com/s/1EN9wtLbNv7i6X2bcTh0yhw?pwd=ibum
      提取码: ibum

2、安装镜像

2.1、创建centos-ssh的镜像

  • 下载安装cenos7镜像
    docker pull cenos:7

这里贴一下常用指令Dockerfile的常用指令,想详细学习可以了解Dockerfile文件可以看我 🍅docker安装部署容器这一篇文章。
在这里插入图片描述

  • 创建一个Dockerfile文件
    通过Dockerfile文件创建镜像,通过ssh实现可以共用一个局域网
FROM centos:7
MAINTAINER zfp

# 添加EPEL源(如果直接是centos的环境可以不用加)
RUN yum install -y epel-release

# 安装 openssh-server 和 sudo
RUN yum install -y openssh-server sudo

# 修改 SSH 配置文件,禁用 PAM 认证。
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
#安装 OpenSSH 客户端
RUN yum  install -y openssh-clients
#配置 SSH 服务
RUN echo "root:123456" | chpasswd
RUN echo "root   ALL=(ALL)       ALL" >> /etc/sudoers
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
# 创建运行 SSH 服务所需的目录
RUN mkdir /var/run/sshd

# 暴露 SSH 端口
EXPOSE 22

# 启动 SSH 服务
CMD ["/usr/sbin/sshd", "-D"]

  • 构建centos7-ssh
    docker build -t="centos7-ssh" .

将生成一个名为centos7-ssh的镜像

2.2、创建hadoop的镜像

  • 准备需要的包,包需要和Dockerfile在同一级目录下

hadoopjdkhive的,该镜像除了hadoop还需要有jdk,所以需要先把jdk的包先准备好,因为要用到hive,我把hive的包也内嵌进去了,所以需要把包先准备好。

在这里插入图片描述

  • 继续创建一个Dockerfile文件
FROM centos7-ssh

ADD jdk-8u361-linux-x64.tar.gz /usr/local/
#需要确认解压之后的文件名称对不对应得上
RUN mv /usr/local/jdk1.8.0_361 /usr/local/jdk1.8
ENV JAVA_HOME /usr/local/jdk1.8
ENV PATH $JAVA_HOME/bin:$PATH

ADD hadoop-3.3.4.tar.gz /usr/local
RUN mv /usr/local/hadoop-3.3.4 /usr/local/hadoop
ENV HADOOP_HOME /usr/local/hadoop
ENV PATH $HADOOP_HOME/bin:$PATH

ADD apache-hive-3.1.3-bin.tar.gz /usr/local
RUN mv /usr/local/apache-hive-3.1.3-bin /usr/local/hive
ENV HIVE_HOME /usr/local/hive
ENV PATH $HIVE_HOME/bin:$PATH

RUN yum install -y which sudo
  • 构建镜像
    docker build -t="centos7-ssh" .

3、配置ssh网络

3.1、搭建同一网段的网络

  • 创建网络
    docker network create --driver bridge hadoop-br

  • 配置三台容器的网络,hadoop1因为是主节点,所以需要把web的页面端口映射出来。

docker run -itd --network hadoop-br --name hadoop1 -p 50070:50070 -p 8088:8088 hadoop
docker run -itd --network hadoop-br --name hadoop2  hadoop
docker run -itd --network hadoop-br --name hadoop3 hadoop
  • 查看网络
    docker network inspect hadoop-br
    会看到对应的容器的ip
    在这里插入图片描述
    这个是我的,可以看自己的对应的,最后一位会从2开始
172.20.0.2 hadoop1  
172.20.0.3 hadoop2  
172.20.0.4 hadoop3  

3.2、配置host实现互相之间可以免密登陆

  • 分别进入不同的容器
docker exec -it hadoop1 bash
docker exec -it hadoop2 bash
docker exec -it hadoop3 bash
  • 编辑文件
    vi /etc/hosts

把端口以及名称映射放入该文件内,需要放自己生成的hadoop-br的网络

#这个是我的
172.20.0.2 hadoop1  
172.20.0.3 hadoop2  
172.20.0.4 hadoop3  

在这里插入图片描述

  • 配置免密登录
    前面镜像中已经安装了ssh服务,所以直接分别在每台机器上执行以下命令:
ssh-keygen
一路回车
ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@hadoop1
输入密码,如果按我的来得话就是123456
ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@hadoop2
输入密码,如果按我的来得话就是123456
ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@hadoop3
输入密码,如果按我的来得话就是123456

3.3、查看是否成功

ping hadoop1 
ping hadoop2
ping hadoop3
ssh hadoop1
ssh hadoop2
ssh hadoop3

如果都可以正常ping通和切换则代表成功
在这里插入图片描述

4、安装配置Hadoop

4.1、添加存储文件夹

  • 进入容器hadoop1
    最好重写进入一下,要不然可能会没有hadoop文件
    docker exec -it hadoop1 bash

  • 创建一些文件夹,用于存储hadoop运行时时产生文件的存储

mkdir /home/hadoop
mkdir /home/hadoop/tmp /home/hadoop/hdfs_name /home/hadoop/hdfs_data

4.2、添加指定配置

都添加在<configuration></configuration>标签内部,确认自己不要粘贴错误,需要先按i,否则粘贴到时候很容易去除掉一些文字

  • 编辑core-site.xml:
    vi core-site.xml
 <!--指定namenode的地址-->
	<property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop1:9000</value>
    </property>
       <!--用来指定使用hadoop时产生文件的存放目录-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/home/hadoop/tmp</value>
    </property>
    <!--用来设置检查点备份日志的最长时间-->
    <property>
        <name>io.file.buffer.size</name>
        <value>131702</value>
    </property>

  • 编辑hdfs-site.xml:
    vi hdfs-site.xml
<!--指定hdfs中namenode的存储位置-->
 <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/home/hadoop/hdfs_name</value>
    </property>
    <!--指定hdfs中namedata的存储位置-->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/home/hadoop/hdfs_data</value>
    </property>
     <!--指定hdfs保存数据的副本数量-->
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop1:9001</value>
    </property>
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>

  • 编辑mapred-site.xml:
    该文件部分版本没有,是因为被加了后缀先执行
    cp mapred-site.xml.template mapred-site.xml
    在去编辑,如果有的就直接编辑就行
    vi mapred-site.xml
<!--告诉hadoop以后MR(Map/Reduce)运行在YARN上-->
 <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop1:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop1:19888</value>
    </property>

  • 编辑yarn-site.xml:
    vi yarn-site.xml
 <!--nomenodeManager获取数据的方式是shuffle-->
 <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
     <!--指定Yarn的老大(ResourceManager)的地址-->  
    <property>
        <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>hadoop1:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>hadoop1:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>hadoop1:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>hadoop1:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>hadoop1:8088</value>
    </property>
  • 编辑slaves文件
hadoop1
hadoop2
hadoop3

4.3、同步数据

同步拷贝数据到hadoop2、hadoop3
依次执行以下命令:

scp -r $HADOOP_HOME/ hadoop2:/usr/local/
scp -r $HADOOP_HOME/ hadoop3:/usr/local/

scp -r /home/hadoop hadoop2:/
scp -r /home/hadoop hadoop3:/

5、测试启动

5.1、启动配置

  • 分别重新连接每台机器
docker exec -it hadoop1 bash
docker exec -it hadoop2 bash
docker exec -it hadoop3 bash

  • 分别给每台机器配置hadoop sbin目录的环境变量,jdk的也追加一下,要不然可能报错
    vi ~/.bashrc或者vi ~/.bash_profile
    追加
export PATH=$PATH:$HADOOP_HOME/sbin

export JAVA_HOME=/usr/local/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
  • 执行 source ~/.bashrc

5.2、启动hadoop

  • 格式化hdfs
    hdfs namenode -format

执行一下jps,这个时候应该是只有一个启动的(如果这个命令不行就说明jdk路径压根没配置正确)

  • 一键启动
    start-all.sh

在这里插入图片描述
这个时候如果爆上面的错误,原因是 hadoop-env.sh文件,无法通过标签去读取到jdk的地址

  • 修改全部主机的hadoop-env.sh文件
    这个时候需要先
    cd $HADOOP_HOME/etc/hadoop
    去修改
    vi hadoop-env.sh文件
    找到下面截图的这个位置把地址修改为jdk的实际安装路径,不要是{}的,路径是前面配置的Dockerfile文件时配置的路径
    在这里插入图片描述
    然后在继续执行start-all.sh启动命令,可以通过jps命令看端口是不是变多了,如下应该就是成功啦
    在这里插入图片描述

  • 最后在到映射出来的web路径去查看
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/275697.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

openGauss学习笔记-175 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作示例

文章目录 openGauss学习笔记-175 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作示例175.1 相同表的INSERT和DELETE并发175.2 相同表的并发INSERT175.3 相同表的并发UPDATE175.4 数据导入和查询的并发 openGauss学习笔记-175 openGauss 数据库运维-备份与恢复-导入…

【新版Hi3536AV100性能果真强悍】

Hi3536AV100是针对多路高清/超高清&#xff08;1080p/4M/5M/4K&#xff09;智能NVR产品应用开发的新一代专业高端SoC芯片。 Hi3536AV100集成了ARM Cortex-A55八核处理器和性能强大的神经网络处理器&#xff0c;支持多种智能算法应用。 Hi3536AV100支持32路1080p多协议解码及4路…

js中深拷贝与浅拷贝的区别?如何实现一个深拷贝?(收藏好,用时好找)

文章目录 一、数据类型存储二、浅拷贝Object.assignslice()concat()拓展运算符 三、深拷贝_.cloneDeep()jQuery.extend()JSON.stringify()循环递归 四、区别小结 一、数据类型存储 前面文章我们讲到&#xff0c;JavaScript中存在两大数据类型&#xff1a; 基本类型引用类型 …

CorelCAD各版本安装指南

下载链接 https://pan.baidu.com/s/1v0VgYRaaRRUeAgJC__0rPw?pwd0531 1.鼠标右击【CorelCAD2023(64bit)】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;选择【解压到 CorelCAD2023(64bit)】。 2.打开解压后的文件夹&#xff0c;鼠标右击【CorelCA…

Mybatis行为配置之Ⅱ—结果相关配置项说明

专栏精选 引入Mybatis Mybatis的快速入门 Mybatis的增删改查扩展功能说明 mapper映射的参数和结果 Mybatis复杂类型的结果映射 Mybatis基于注解的结果映射 Mybatis枚举类型处理和类型处理器 再谈动态SQL 文章目录 专栏精选引言摘要正文autoMappingBehaviorautoMappingU…

打开相机失败 出现错误的原因

如何解决&#xff1f; Debug中缺少DLL文件 以下参考周姐文档 相机调用步骤 学习相机第三方库的安装 https://blog.csdn.net/Qingshan_z/article/details/117257136书签&#xff1a;QT添加库&#xff08;静态库和动态库&#xff09;_Qingshan_z的博客-CSDN博客_qt添加库 添加文…

开发知识点-Weblogic

Weblogic 介绍CVE_2018_2628poc-yaml-weblogic-ssrfpoc-yaml-weblogic-cve-2017-10271poc-yaml-weblogic-cve-2019-2725poc-yaml-weblogic-cve-2019-2729-1poc-yaml-weblogic-cve-2019-2729-2poc-yaml-weblogic-cve-2020-14750poc-yaml-weblogic-local-cve-2022-21371-file-inc…

修改jenkins的目录(JENKINS_HOME)

默认JENKINS_HOME是/var/lib/jenkins/ 现要修改为/home/jenkins_data/jenkins 最开始 sudo cp -a /var/lib/jenkins/ /home/jenkins_data/ 然后如下操作&#xff1a; 1、首先 /etc/sysconfig/jenkins&#xff1a;jenkins配置文件&#xff0c;“端口”&#xff0c;“JENKIN…

数字 IC 笔试易混淆整理

signed 扩展 比较以下4段代码&#xff0c;给出W_DATA2的结果&#xff08;十进制或16进制或二进制&#xff09;&#xff1b; wire signed [3:0] W_DATA1 4b1000; wire signed [7:0] W_DATA2; assign W_DATA2 W_DATA1; wire [3:0] W_DATA1 4b1000; wire signed [7:0] W_DA…

JPEG的操作模式和数据

JPEG&#xff08;Joint Photographic Experts Group&#xff09;是一种广泛应用于图像压缩领域的标准。JPEG的操作模式和数据结构是实现图像压缩和解压缩的重要组成部分。本文将详细介绍JPEG的操作模式和数据结构&#xff0c;以及其在图像处理中的应用。 JPEG的操作模式主要包…

Jest 测试框架快速上手

目录 一、Jest 是什么 二、Jest 开始使用步骤 1. 初始化一个新的项目 2. 安装 3. 创建测试文件并编写测试用例 4. 运行测试 三、单元测试框架基本原理 1. test 2. expect 3. toBe 匹配器 四、匹配器及适用范围 1. 普通匹配器 2. 与真假有关的匹配器 3. 数字 4. …

搭建FTP服务器详细介绍

一.FTP简介 &#xff11;.&#xff11;什么是FTP &#xff11;.&#xff12;FTP服务器介绍 &#xff11;.&#xff13;FTP服务器优缺点 二.FTP服务器的搭建与配置 2.1 开启防火墙 2.2创建组 2.3创建用户 2.4安装FTP服务器 2.5配置FTP服务器 &#xff12;.&#xff…

Redis中RDB和AOF

Redis中RDB和AOF 定时间间隔执行数据集的时间快照&#xff0c;把某一时刻数据和妆容以文件的形式写到磁盘上&#xff0c;也就是快照。 配置文件 如果是普通安装方式可以跳过&#xff0c;如果是docker安装&#xff0c;需要到官网下载redis.conf配置文件到本地&#xff0c;地址…

YOLOv7+Pose姿态估计+tensort部署加速

YOLOv7是一种基于深度学习的目标检测算法&#xff0c;它能够在图像中准确识别出不同目标的位置和分类。而姿态估计pose和tensort则是一种用于实现人体姿态估计的算法&#xff0c;可以对人体的关节位置和方向进行精准的检测和跟踪。 下面我将分点阐述YOLOv7姿态估计posetensort…

浏览器的插件作用、安装与使用介绍

浏览器的插件作用、安装与使用介绍 网页插件是一种为了增强浏览器功能而设计的软件程序。它们可以在浏览器中添加额外的功能、工具或服务&#xff0c;以满足用户个性化的需求。网页插件通常以浏览器扩展、附加组件或插件的形式存在&#xff0c;可以在浏览器的插件商店中找到并安…

K8S异常处理

一、概述 1、k8s有时候会报错The connection to the server ip:6443 was refused - did you specify the right host or port &#xff0c;本文档提供几种可能产生该报错的原因和排障思路。 二、发现问题 使用任意Kubectl 命令会报错&#xff1a;The connection to the serv…

软件测试/测试开发丨Python内置库学习笔记

内置库 一、内置库OS 1、os概述 os: Operating Systemos 模块的常用功能跨平台的差异 2、os使用 导入 os 模块查看 os 模块使用文档 help(os)dir(os) import os# 查看os模块说明文档 help(os)# 查看os模块的属性和方法 print(dir(os))3、os 常用方法 &#xff08;1&…

k8s搭建(三、k8s从节点创建)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

sql优化,内外连接有什么区别

内外连接是啥不必多说&#xff0c;但在做关联查询的时候&#xff0c;二者是有一些区别的&#xff1a; 举例来说&#xff0c;首先是外连接&#xff08;左外连接为例&#xff09;&#xff0c;当两个表都没有索引&#xff0c;就都是全表扫描 EXPLAIN SELECT SQL_NO_CACHE * FROM …

thinkphp6.0升级到8.0

目录 一&#xff1a;升级过程 二&#xff1a;报错处理 最近写的项目需要使用thinkphp8.0&#xff0c;之前的老项目需要从php6.0升级到8.0&#xff0c;特此记录下升级过程。 一&#xff1a;升级过程 查看版本&#xff1a; php think version,我目前的版本是6.1.4 生成thin…