docker安装hadoop环境

一、使用docker搭建基础镜像

1、拉取centos系统镜像

# 我这里使用centos7为例子
docker pull centos:7

2、创建一个dockerfiler文件,用来构建自定义一个有ssh功能的centos镜像

# 基础镜像
FROM centos:7
# 作者
#MAINTAINER hadoop
ADD Centos-7.repo /etc/yum.repos.d/CentOS-Base.repo
# 将工作目录切换到`/etc/yum.repos.d/`
RUN cd /etc/yum.repos.d/
# 使用sed命令注释掉mirrorlist行。
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
# 使用sed命令将baseurl修改为`http://vault.centos.org`。
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
# 更新yum缓存。
RUN yum makecache
# 使用yum更新系统软件。
RUN yum update -y
# 使用yum安装openssh-server和sudo。
RUN yum install -y openssh-server sudo
# 使用sed命令将UsePAM设置为no,禁用PAM认证。
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
# 使用yum安装openssh-clients。
RUN yum install -y openssh-clients
# 使用echo和chpasswd命令将root用户的密码设置为123456。
RUN echo "root:123456" | chpasswd
# 将root用户添加到sudoers文件中,允许其执行任何命令。
RUN echo "root ALL=(ALL) ALL" >> /etc/sudoers
# 生成DSA类型的SSH密钥。
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
# 生成RSA类型的SSH密钥。
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
# 创建`/var/run/sshd`目录。
RUN mkdir /var/run/sshd
# 暴露容器的22端口,用于SSH连接。
EXPOSE 22
# 设置容器启动时默认运行的命令为`/usr/sbin/sshd -D`,即启动SSH服务。
CMD ["/usr/sbin/sshd", "-D"]

3、因为默认的centos镜像是没有任何功能的,根据上面的dockerfile文件,生成我们的centos-ssh镜像

# 生成centos7-ssh镜像
docker build -t="centos7-ssh" .

# 生成之后,我们的docker中就有了这个镜像
docker images

4、将jdk、hadoop安装包和Dockerfile目录平级,我是windows系统

5、之前的Dockerfile备份为dockerfile_centos7-ssh,我们重新再创建一个Dockerfile文件,用来构建hadoop镜像

# 基础镜像为centos7-ssh
FROM centos7-ssh# 将当前目录下的jdk复制到镜像中
ADD jdk-8u11-linux-x64.tar.gz /usr/local/
RUN mv /usr/local/jdk1.8.0_11 /usr/local/jdk
# 设置java环境变量
ENV JAVA_HOME /usr/local/jdk
ENV JRE_HOME=${JAVA_HOME}/jre
ENV CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH=${JAVA_HOME}/bin:$PATH# 将hadoop目录复制到镜像中
ADD hadoop-3.2.2.tar.gz /usr/local/
RUN mv /usr/local/hadoop-3.2.2 /usr/local/hadoop
# 设置hadoop环境变量
ENV HADOOP_HOME /usr/local/hadoop
ENV PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

6、根据这个Dockerfile生成centos-hadoop镜像

docker build -t="centos7-hadoop" .

7、由于hadoop集群的机器需要网络通讯,我们单独给这些服务创建一个网桥

docker network create hadoop

8、启动容器并连接到刚刚创建的网桥

docker run -itd --network hadoop --name hadoop1 -p 50070:50070 -p 8088:8088 -p 9870:9870 centos7-hadoopdocker run -itd --network hadoop --name hadoop2 centos7-hadoopdocker run -itd --network hadoop --name hadoop3 centos7-hadoop# 查看网桥使用情况
docker network inspect hadoop# 记录每台服务器ip,后面可能会用
172.18.0.2 hadoop1
172.18.0.3 hadoop2
172.18.0.4 hadoop3

二、进入每台容器,配置ip地址映射和ssh免密登录

1、配置ip地址,配置完成后,容器之间互相ping一下,看看是否可以ping通

docker exec -it hadoop1 bash
docker exec -it hadoop2 bash
docker exec -it hadoop3 bash# 在每台hadoop服务器的终端输入:
vi /etc/hosts

我本地发现,我修改完hosts文件后,我的环境变量配置失效了,重新又配置了一下

echo $PATH
vi /etc/profile
export JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
# 保存文件并退出编辑器# 重新加载环境变量配置
source /etc/profile

记得配置hadoop2和hadoop3,可以scp拷贝过去

2、配置免密登录

# 在每台hadoop服务器终端输入:
# 谁要去免密登录,谁就生成密钥对,使用ssh-keygen生成密钥对,密钥对包含id_rsa和id_rsa.pub,pub就是公钥,id_rsa是私钥,我们要把id_rsa发送到要免密登录的服务器上去
ssh-keygen# 然后一直回车即可,再在每台hadoop服务器终端中输入:
# 将公钥发送到需要免密登录的服务器上
ssh-copy-id -i /root/.ssh/id_rsa.pub -p 22 root@hadoop1
# 填yes后,输入第二(3)步时设置的密码,123456
ssh-copy-id -i /root/.ssh/id_rsa.pub  -p 22 root@hadoop2
# 填yes后,输入第二(3)步时设置的密码,123456
ssh-copy-id -i /root/.ssh/id_rsa.pub  -p 22 root@hadoop3
# 填yes后,输入第二(3)步时设置的密码,123456# 测试是否成功配置ssh免密登录,ssh + hadoop服务器名: 
ssh hadoop1

三、进入hadoop1中测试hadoop本地模式

1、修改配置文件

# 进入下面的目录
cd /usr/local/hadoop/etc/hadoop
# 修改hadoop-env.sh 
vi ./hadoop-env.sh 
# 显示行号
:set number
# 修改java目录为/usr/local/jdk
export JAVA_HOME=/usr/local/jdk
# 注意看下hadoop_home的路径是否正确

2、新建一个测试数据集

# 在root目录下创建一个temp目录
mkdir /temp
# 创建测试数据集
vi /temp/data.txt
# 测试数据集内容
I Love Bejing
I Love LiuChang
I Love My Home
I Love you
I Love China
Do you miss me?
where are you doing?
this is hadoop hello world!# 进入share下面有一个测试的jar
cd /usr/local/hadoop/share/hadoop/mapreduce
# 这里面有很多mapreduce的测试jar包,这里我们测试一下wordcount,/root/temp表示测试数据集的目录,会读取下面所有的文件,/root/output/wc是输出目录
hadoop jar hadoop-mapreduce-examples-3.2.2.jar wordcount /temp /output/wc# 执行之后,在/root/output/wc下就有生成的结果
more /output/wc/part-r-00000

四、hadoop全分布模式

以下配置在hadoop1上进行配置,配置完成后,直接把整个目录拷贝到hadoop2和hadoop3从节点

1、修改hadoop-env.sh

# 进入下面的目录
cd /usr/local/hadoop/etc/hadoop
# 修改hadoop-env.sh 
vi ./hadoop-env.sh 
# 显示行号
:set number
# 修改25行的java目录为/usr/local/jdk
export JAVA_HOME=/usr/local/jdk

2、修改hdfs-site.xml文件

<configuration>
<!-- 数据块的冗余度,默认是3 -->
<!-- 一般来说,数据块冗余度跟数据节点的个数一致,最大不超过3 -->
<property><name>dfs.replication</name><value>2</value>
</property><!-- 禁用了HDFS的权限检查 -->
<property><name>dfs.permissions</name><value>false</value>
</property>
</configuration>

3、配置core-site.xml文件

<configuration><!-- 配置NameNode地址 --><!-- 9000是RPC通信的端口 --><property><name>fs.defaultFS</name><value>hdfs://hadoop1:9000</value></property><!-- HDFS对应的操作系统目录 --><!--默认是linux的/tmp,一定要进行修改,并且要创建该目录 --><property><name>hadoop.tmp.dir</name><value>/usr/local/hadoop/tmp</value></property></configuration>

4、配置mapred-site.xml文件

<configuration><!-- 配置MapReduce运行的框架是Yarn --><property><name>mapreduce.framework.name</name><value>yarn</value></property>
</configuration>

5、配置yarn-site.xml文件

<configuration><!-- 配置ResourceManager的地址 --><property><name>yarn.resourcemanager.hostname</name><value>hadoop1</value></property><!-- MapReduce运行的方式是:洗牌 --><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property>
</configuration>

注意如果是hadoop2.x版本配置slaves,Hadoop3.x版本中,集群配置的设置文件是workers

6、配置slaves文件

# 编辑从节点信息
vi ./etc/hadoop/slaves
# slaves内容
hadoop2
hadoop3
cd /usr/local/hadoop/etc/hadoop

即默认的情况下,Hadoop在本机启动,不加入分布式集群,因此无法随着集群的启动而启动。所以我们要把机器加入到集群环境中,在workers文件中,将hadoop1、hadoop2、hadoop3追加进去。

7、对NameNode进行格式化

hdfs namenode -format

8、hadoop1配置完成之后,把整个目录拷贝到hadoop2和hadoop3中

# 将hadoop1中的文件夹复制到hadoop2中
scp -r /usr/local/hadoop/ root@hadoop2:/usr/local# hadoop1中复制到hadoop3中
scp -r /usr/local/hadoop/ root@hadoop3:/usr/local

9、启动hadoop

## 启动hadoop
start-all.sh## 判断启动是否成功
# 在hadoop1上执行jps

如果执行start-all.sh报错:

ERROR: Attempting to operate on hdfs namenode as root ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.

  • 进入sbin目录,需要修改start-dfs.sh,stop-dfs.sh,start-yarn.sh,stop-yarn.sh四个文件
  • 在start-dfs.sh,stop-dfs.sh两个文件顶部添加如下参数
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
  • 在start-yarn.sh,stop-yarn.sh顶部添加如下参数
#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

在master节点上运行start-all.sh后,分别在hadoop2、hadoop3两台机器上进行进程检测。执行命令 jps

查看 Hadoop 的日志文件

cd $HADOOP_HOME/logsls -lt

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue 2 父组件根据注册事件,控制相关按钮显隐

目标效果 我不注册事件&#xff0c;那么就不显示相关的按钮 注册了事件&#xff0c;才会显示相关内容 实现思路 组件在 mounted 的时候可以拿到父组件注册监听的方法 拿到这个就可以做事情了 mounted() {console.log(this.$listeners, this.$listeners);this.show.search !…

第29天 MCU入门

目录 MCU介绍 MCU的组成与作用 电子产品项目开发流程 硬件开发流程 常用元器件初步了解 硬件原理图与PCB板 常见电源符号和名称 电阻 电阻的分类 贴片电阻的封装说明&#xff1a; 色环电阻的计算 贴片电阻阻值计算 上拉电阻与下拉电阻 电容 电容的读数 二极管 LED 灯电路 钳位作…

王道考研编程题总结

我还在完善中&#xff0c;边复习边完善&#xff08;这个只是根据我自身总结的&#xff09; 一、 线性表 1. 结构体 #define MaxSize 40 typedef struct{ElemType data[MaxSize]&#xff1b;int length; }SqList 2. 编程题 1. 删除最小值 题意 &#xff1a;从顺序表中删除…

PHM技术:一维信号时序全特征分析(统计域/频域/时域)| 信号处理

目录 0 引言 1 基于统计域的时序特征分析 2 基于谱域的时序特征分析 3 基于时域的时序特征分析 4 代码分析 5 小结 0 引言 我们将探索时序特征分析&#xff0c;这是信号处理中的关键技术之一。信号在我们的日常生活中无处不在&#xff0c;从声音到图像&#xff0c;从传感…

无人机数据处理系统:原理与核心系统

一、数据处理系统的运行原理 数据获取&#xff1a;无人机在飞行过程中&#xff0c;通过搭载的传感器&#xff08;如相机、激光雷达等&#xff09;采集到各种类型的数据&#xff0c;例如图像、点云等。这些数据是后续处理和分析的基础。 数据传输&#xff1a;采集到的数据会通…

close and shutdown?

背景&#xff1a;我们要讲述的是网络编程中常用的两个API&#xff1a; #include <unistd.h> int close(int fd); #include <sys/socket.h> int shutdown(int sockfd, int how); 以及TCP的半连接&#xff0c;半打开。 shutdown函数的行为依赖第二个参数区分&#xf…

Java设计模式——职责链模式:解锁高效灵活的请求处理之道

嘿&#xff0c;各位 Java 编程大神和爱好者们&#xff01;今天咱们要一同深入探索一种超厉害的设计模式——职责链模式。它就像一条神奇的“处理链”&#xff0c;能让请求在多个对象之间有条不紊地传递&#xff0c;直到找到最合适的“处理者”。准备好跟我一起揭开它神秘的面纱…

Javascript中DOM事件监听 (鼠标事件,键盘事件,表单事件)

#DOM&#xff08;Document Object Model&#xff09;事件监听是一种机制&#xff0c;它允许 JavaScript 代码在 HTML 文档中的元素上监听特定的事件。当这些事件发生时&#xff0c;与之关联的 JavaScript 函数&#xff08;也称为事件处理函数&#xff09;就会被执行。这使得网页…

TiDB 无统计信息时执行计划如何生成

作者&#xff1a; weiyinghua 原文来源&#xff1a; https://tidb.net/blog/4c49ac0d 一、Pseudo 统计信息总体生成规则 TiDB 在表无统计信息时&#xff0c;不会进行动态采样&#xff0c;而是用静态的、预设规则以及经验假设来生成计划。用函数 PseudoTable 创建一个伪统…

服务器密码错误被锁定怎么解决?

当服务器密码错误多次导致账号被锁定时&#xff0c;解决方法需要根据服务器的操作系统&#xff08;如 Linux 或 Windows &#xff09;和具体服务器环境来处理。以下是常见的解决办法&#xff1a; 一、Linux 服务器被锁定的解决方法 1. 使用其他用户账号登录 如果有其他未被…

认识redis 及 Ubuntu安装redis

文章目录 一. redis概念二. redis应用场景二. redis的特性四. 使用Ubuntu安装redis 一. redis概念 redis 是在内存中存储数据的中间件, 用在分布式系统 redis是客户端服务器结构的程序, 客户端服务器之间通过网络来通信 二. redis应用场景 redis可用作数据库 类似MySQL, 但…

LabVIEW内燃机气道试验台测控系统

基于LabVIEW软件开发的内燃机气道试验台测控系统主要应用于内燃机气道的性能测试和数据分析&#xff0c;通过高精度的测控技术&#xff0c;有效提升内燃机的测试精度和数据处理能力。 项目背景 随着内燃机技术的发展&#xff0c;对其气道性能的精准测量需求日益增加。该系统通…

Rust vs Java:后端开发应该选哪个?

后端技术的发展迅速。根据JetBrains 2024年开发者调查,尽管Java仍然占据约34.5%的市场份额,但Rust在高性能应用中的应用逐渐增多。过去四年中,Rust在企业中的采用增长了240%(根据Stack Overflow 2024开发者调查)。随着组织更加注重效率和可扩展性,选择Rust还是Java已成为…

触觉智能亮相OpenHarmony人才生态大会2024

11月27日&#xff0c;OpenHarmony人才生态大会2024在武汉隆重举行。本次大会汇聚了政府领导、学术大咖、操作系统技术专家、高校及企业代表&#xff0c;围绕新时代背景下的操作系统人才培养进行了深入探讨&#xff0c;分享高校、企业在产学研融合方面的先进经验&#xff0c;全面…

springboot366高校物品捐赠管理系统(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 高校物品捐赠管理系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff…

深入理解AIGC背后的核心算法:GAN、Transformer与Diffusion Models

深入理解AIGC背后的核心算法&#xff1a;GAN、Transformer与Diffusion Models 前言 随着人工智能技术的发展&#xff0c;AIGC&#xff08;AI Generated Content&#xff0c;人工智能生成内容&#xff09;已经不再是科幻电影中的幻想&#xff0c;而成为了现实生活中的一种新兴力…

企业网站面临的爬虫攻击及安全防护策略

在当今数字化时代&#xff0c;企业网站不仅是展示企业形象的窗口&#xff0c;更是进行商业活动的重要平台。然而&#xff0c;企业网站在日常运营中面临着多种类型的爬虫攻击&#xff0c;这些攻击不仅会对网站的正常访问造成影响&#xff0c;还可能窃取敏感数据&#xff0c;给企…

STM32的CAN波特率计算

公式&#xff1a; CAN波特率 APB总线频率 / &#xff08;BRP分频器 1&#xff09;/ (SWJ BS1 BS2) SWJ一般为1。 例如STM32F407的&#xff0c;CAN1和CAN2都在在APB1下&#xff0c;频率是42000000 如果想配置成1M波特率&#xff0c;则计算公式为&#xff1a;

《操作系统 - 清华大学》6 -3:局部页面置换算法:最近最久未使用算法 (LRU, Least Recently Used)

文章目录 1. 最近最久未使用算法的工作原理2. 最近最久未使用算法示例3.LRU算法实现3.1 LRU的页面链表实现3.2 LRU的活动页面栈实现3.3 链表实现 VS 堆栈实现 1. 最近最久未使用算法的工作原理 最近最久未使用页面置换算法&#xff0c;简称 LRU&#xff0c; 算法思路&#xff…

数据集-目标检测系列- 海边漫步锻炼人检测数据集 person >> DataBall

数据集-目标检测系列- 海边漫步锻炼人检测数据集 person >> DataBall DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球…