当前位置:   article > 正文

大数据——hadoop环境安装(docker搭建)_用docker安装hadoop

用docker安装hadoop

一、这里我们使用docker搭建hadoop集群环境

1、拉取centos或ubuntu等系统的镜像

docker的安装这里我们就跳过了,如果docker没有安装的话,可以跳到docker安装教程

# 我这里使用centos为例子
docker pull centos
  • 1
  • 2

2、创建一个dockerfiler文件,用来构建自定义一个有ssh功能的centos镜像(因为默认的centos镜像是没有任何功能的)

vim ./Dockerfile

####### 这个Dockerfile主要是基于CentOS镜像进行一些系统设置和软件安装,最终生成一个包含SSH服务的镜像。
####### dockerfile的内容

# 基础镜像
FROM centos
# 作者
MAINTAINER hadoop

# 将工作目录切换到`/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"]
  • 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
  • 36
  • 37
  • 38
  • 39
  • 40

3、根据上面的dockerfile文件,生成我们的centos-ssh镜像

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

# 生成之后,我们的docker中就有了这个镜像
docker images
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

4、将jdk、hadoop安装包上传到我们的虚拟机中,和Dockerfile目录平级,我放在了/home/hadoop下

如图:我们把安装包放在Dockerfile目录下,并解压
在这里插入图片描述

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

vim Dockerfile

##### dockerfile的内容
# 基础镜像为centos7-ssh
FROM centos7-ssh

# 将当前目录下的jdk复制到镜像中
COPY jdk1.8.0_261 /usr/local/jdk
# 设置java环境变量
ENV JAVA_HOME /usr/local/jdk
ENV PATH $JAVA_HOME/bin:$PATH

# 将hadoop目录复制到镜像中
COPY hadoop-2.7.3 /usr/local/hadoop
# 设置hadoop环境变量
ENV HADOOP_HOME /usr/local/hadoop
ENV PATH $HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

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

docker build -t="centos7-hadoop" .
  • 1

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

docker network create hadoop
  • 1

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

docker run -itd --network hadoop --name hadoop1 -p 50070:50070 -p 8088:8088 centos7-hadoop

docker run -itd --network hadoop --name hadoop2 centos7-hadoop

docker 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述

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

1、配置ip地址

docker exec -it hadoop1 bash
docker exec -it hadoop2 bash
docker exec -it hadoop3 bash

# 在每台hadoop服务器的终端输入:
vi /etc/hosts
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述
配置完成后,容器之间互相ping一下,看看是否可以ping通

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

三、这里我们进入hadoop1中测试hadoop本地模式

1、修改配置文件

# 进入下面的目录
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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-2.7.3.jar wordcount /root/temp /root/output/wc

# 执行之后,在/root/output/wc下就有生成的结果
more /root/output/wc/part-r-00000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

在这里插入图片描述

四、hadoop伪分布模式(单机上模拟分布式环境)

1、修改hdfs-site.xml配置文件

<configuration>
<!-- 数据块的冗余度,默认是3 -->
<!-- 一般来说,数据块冗余度跟数据节点的个数一致,最大不超过3 -->
<property>
  <name>dfs.replication</name>
  <value>1</value>
</property>

<!-- 禁用了HDFS的权限检查 -->
<property>
  <name>dfs.permissions</name>
  <value>false</value>
</property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

2、修改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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

3、修改mapred-site.xml配置文件,这个文件需要创建,hadoop默认只给了一个mapred-site.xml.template文件

<configuration>
	<!-- 配置MapReduce运行的框架是Yarn -->
	<property>
	  <name>mapreduce.framework.name</name>
	  <value>yarn</value>
	</property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4、配置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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

5、对NameNode进行格式化

# 格式化NameNode
hdfs namenode -format
  • 1
  • 2

如下,打印这段表示格式化成功
在这里插入图片描述

6、启动hadoop

# 启动所有的hadoop,包括NameNode、DataNode、ResourceManager、SecondaryNameNode、NodeManager等,如果执行失败,可能是没有将sbin添加到环境变量
start-all.sh
  • 1
  • 2

在这里插入图片描述

五、hadoop全分布模式

以下配置我们全在hadoop1上进行配置,配置完成后,直接把整个目录拷贝到从节点中去

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

4、配置mapred-site.xml文件

<configuration>
	<!-- 配置MapReduce运行的框架是Yarn -->
	<property>
	  <name>mapreduce.framework.name</name>
	  <value>yarn</value>
	</property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

6、配置slaves文件

# 编辑从节点信息
vi ./etc/hadoop/slaves
# slaves内容
hadoop2
hadoop3
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

7、对NameNode进行格式化

hdfs namenode -format
  • 1

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
  • 1
  • 2
  • 3
  • 4
  • 5

9、启动hadoop

## 启动hadoop
start-all.sh

## 判断启动是否成功
# 在hadoop1上执行jps
[root@ea73bbb4c18a hadoop]# jps
881 NameNode
1491 Jps
1078 SecondaryNameNode
1240 ResourceManager

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

也可以访问:http://192.168.36.10:50070/dfshealth.html#tab-overview
在这里插入图片描述

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

闽ICP备14008679号