基于Docker布署分布式hadoop环境

2024-06-12 20:18

本文主要是介绍基于Docker布署分布式hadoop环境,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.安装Docker 
安装Docker的方法这里不再详述,根据自己的操作系统在网上有一大堆教程。今天我们的主要任务是在DOCKER上布署Hadoop。 
2.下载 ubutun镜像

docker pull ubuntu:14.04
  • 1
  • 1

这条命令的作用是从Docker仓库中获取ubuntu的镜像,下载完成以后,使用docker images,可以列出所有本地的镜像 
Docker常用命令介绍

docker images:列出所有镜像(images) 
docker ps(-a):列出正在运行的(容器)containers docker 
pull ubuntu:下载镜像 
docker run -i -t ubuntu /bin/bash:运行ubuntu镜像 docker 
commit 3a09b2588478 ubuntu:mynewimage:提交你的变更,并且把容器保存成Tag为mynewimage的新的ubuntu镜像.(注意,这里提交只是提交到本地仓库,类似Git)

接下来启动容器:

docker rudocker run -ti ubuntu:14.04
  • 1
  • 1

注意:我们在不指定Tag的情况下,默认选择Tag为latest的镜像启动容器。 指定Tag启动命令为:

docker run -ti ubuntu:14.04
  • 1
  • 1

执行完后容器就启动了

paul@paul-ThinkPad-T440s:~$ docker run -ti trusting
root@0d055329351d:/# 
  • 1
  • 2
  • 1
  • 2

PS:每执行一次docker run命令都会产生一个新的容器,要打开上次生成的容器,可以执行docker start -ai name
name可以通过以下命令找到:

docker ps -a
  • 1
  • 2
  • 1
  • 2
paul@paul-ThinkPad-T440s:~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
8487f03a0766        ubuntu:hadoop       "/bin/bash"              11 hours ago        Up 44 minutes                                   sharp_swanson
fb83318a33c5        ubuntu:hadoop       "/bin/bash"              11 hours ago        Up 45 minutes                                   dreamy_lichterman
d405da673df0        ubuntu:hadoop       "/bin/bash"              11 hours ago        Up 47 minutes                                   small_banach
f4b0f6ab6077        ubuntu:14.04        "/bin/bash"              12 hours ago        Exited (100) 10 hours ago                       sharp_lalande
0d055329351d        2372da530482        "/bin/bash"              31 hours ago        Exited (0) 11 hours ago                         trusting_wescoff
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3.Java 安装

sudo apt-get install software-properties-common python-software-properties
PS:如果执行后出现 Unable to locate package software-properties-common,则先执行sudo apt-get update再执行上面的命令。
sudo add-apt-repository ppa:bhadauria-nitin/java
如果上面的PPA源不可用,可以在https://launchpad.net/ubuntu/+ppas寻找需要的源更换ppa:bhadauria-nitin/java即可
sudo apt-get update
apt-get install oracle-java8-installer
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

安装完成后执行

java -version
  • 1
  • 1

如果看到下面信息说明安装成功。

root@f4b0f6ab6077:/# java -version
java version "1.8.0_74"
Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

4.安装hadoop 
(1)先安装wget

sudo apt-get install -y wget
  • 1
  • 1

(2)利用wget下载安装文件并解压:

oot@8ef06706f88d:cd ~
root@8ef06706f88d:~# mkdir soft
root@8ef06706f88d:~# cd soft/
root@8ef06706f88d:~/soft# mkdir apache
root@8ef06706f88d:~/soft# cd apache/
root@8ef06706f88d:~/soft/apache# mkdir hadoop
root@8ef06706f88d:~/soft/apache# cd hadoop/
root@8ef06706f88d:~/soft/apache/hadoop# wget http://mirrors.sonic.net/apache/hadoop/common/hadoop-2.6.0/hadoop-2.6.0.tar.gz
root@8ef06706f88d:~/soft/apache/hadoop# tar xvzf hadoop-2.6.0.tar.gz
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

注意:这里我们安装的Hadoop版本是2.6.0,如果需要其他版本,请在这里找到链接地址后修改命令即可。

(3)配置环境 
修改~/.bashrc文件。输入nano ~/.bashrc在文件末尾加入下面配置信息:

export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export HADOOP_HOME=/root/soft/apache/hadoop/hadoop-2.6.0
export HADOOP_CONFIG_HOME=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

PS: 
1.如果出现bash: nano: command not found的命令,先执行sudo apt-get install nano安装nano。(nano是一个文本编辑器,关于它的用法请自行查找资料) 
2.们使用apt-get安装java,不知道java装在什么地方的话可以使用下面的命令查看:

root@f4b0f6ab6077:~# update-alternatives --config java
There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-8-oracle/jre/bin/java
Nothing to configure.
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

5.配置hadoop 
主要配置core-site.xml、hdfs-site.xml、mapred-site.xml这三个文件。 
开始配置之前,执行下面命令:

root@f4b0f6ab6077:~# cd $HADOOP_HOME 
root@f4b0f6ab6077:~/soft/apache/hadoop/hadoop-2.6.0# cd tmp bash: cd: 
tmp: No such file or directory 
root@f4b0f6ab6077:~/soft/apache/hadoop/hadoop-2.6.0# mkdir tmp 
root@f4b0f6ab6077:~/soft/apache/hadoop/hadoop-2.6.0# cd tmp 
root@f4b0f6ab6077:~/soft/apache/hadoop/hadoop-2.6.0/tmp# pwd 
$HADOOP_HOME/tmp /root/soft/apache/hadoop/hadoop-2.6.0/tmp 
root@f4b0f6ab6077:~/soft/apache/hadoop/hadoop-2.6.0/tmp# cd .. 
root@f4b0f6ab6077:~/soft/apache/hadoop/hadoop-2.6.0# mkdir namenode 
root@f4b0f6ab6077:~/soft/apache/hadoop/hadoop-2.6.0# cd namenode 
root@f4b0f6ab6077:~/soft/apache/hadoop/hadoop-2.6.0/namenode# pwd 
$HADOOP_HOME/namenode /root/soft/apache/hadoop/hadoop-2.6.0/namenode 
root@f4b0f6ab6077:~/soft/apache/hadoop/hadoop-2.6.0/namenode# cd .. 
root@f4b0f6ab6077:~/soft/apache/hadoop/hadoop-2.6.0# mkdir datanode 
root@f4b0f6ab6077:~/soft/apache/hadoop/hadoop-2.6.0# cd datanode 
root@f4b0f6ab6077:~/soft/apache/hadoop/hadoop-2.6.0/datanode# pwd 
$HADOOP_HOME/datanode /root/soft/apache/hadoop/hadoop-2.6.0/datanode 
root@f4b0f6ab6077:~# cd $HADOOP_CONFIG_HOME 
root@f4b0f6ab6077:~/soft/apache/hadoop/hadoop-2.6.0/etc/hadoop# cp 
mapred-site.xml.template mapred-site.xml 
root@f4b0f6ab6077:~/soft/apache/hadoop/hadoop-2.6.0/etc/hadoop#

5.hadoop配置

(1)core-site.xml配置

打开core-site.xml文件(nano core-site.xml)

[html]  view plain copy
print ?
  1. <span style="font-size:18px;"><configuration>  
  2.     <property>  
  3.             <name>hadoop.tmp.dir</name>  
  4.             <value>/root/soft/apache/hadoop/hadoop-2.6.0/tmp</value>  
  5.             <description>A base for other temporary directories.</description>  
  6.     </property>  
  7.   
  8.     <property>  
  9.             <name>fs.default.name</name>  
  10.             <value>hdfs://master:9000</value>  
  11.             <final>true</final>  
  12.             <description>The name of the default file system.  A URI whose  
  13.             scheme and authority determine the FileSystem implementation.  The  
  14.             uri's scheme determines the config property (fs.SCHEME.impl) naming  
  15.             the FileSystem implementation class.  The uri's authority is used to  
  16.             determine the host, port, etc. for a filesystem.</description>  
  17.     </property>  
  18. </configuration></span>  

注意:

hadoop.tmp.dir配置项值即为此前命令中创建的临时目录路径。
fs.default.name配置为hdfs://master:9000,指向的是一个Master节点的主机

(2).hdfs-site.xml配置

[html]  view plain copy
print ?
  1. <span style="font-size:18px;"><configuration>  
  2.     <property>  
  3.         <name>dfs.replication</name>  
  4.         <value>2</value>  
  5.         <final>true</final>  
  6.         <description>Default block replication.  
  7.         The actual number of replications can be specified when the file is created.  
  8.         The default is used if replication is not specified in create time.  
  9.         </description>  
  10.     </property>  
  11.   
  12.     <property>  
  13.         <name>dfs.namenode.name.dir</name>  
  14.         <value>/root/soft/apache/hadoop/hadoop-2.6.0/namenode</value>  
  15.         <final>true</final>  
  16.     </property>  
  17.   
  18.     <property>  
  19.         <name>dfs.datanode.data.dir</name>  
  20.         <value>/root/soft/apache/hadoop/hadoop-2.6.0/datanode</value>  
  21.         <final>true</final>  
  22.     </property>  
  23. </configuration></span>  

注意

  • 我们后续搭建集群环境时,将配置一个Master节点和两个Slave节点。所以dfs.replication配置为2。
  • dfs.namenode.name.dir和dfs.datanode.data.dir分别配置为之前创建的NameNode和DataNode的目录路径

(3).mapred-site.xml配置

[html]  view plain copy
print ?
  1. <span style="font-size:18px;"><configuration>  
  2.     <property>  
  3.         <name>mapred.job.tracker</name>  
  4.         <value>master:9001</value>  
  5.         <description>The host and port that the MapReduce job tracker runs  
  6.         at.  If "local", then jobs are run in-process as a single map  
  7.         and reduce task.  
  8.         </description>  
  9.     </property>  
  10. </configuration></span>  

(4).修改JAVA_HOME变量

使用命令.nano hadoop-env.sh,修改如下配置:

[html]  view plain copy
print ?
  1. # The java implementation to use.  
  2. export JAVA_HOME=/usr/lib/jvm/java-8-oracle  


(5).格式化 namenode

这是很重要的一步,执行命令hadoop namenode -format


6.安装SSH

搭建集群环境,自然少不了使用SSH。这可以实现无密码访问,访问集群机器的时候很方便。

[html]  view plain copy
print ?
  1. root@8ef06706f88d:~# sudo apt-get install ssh  


SSH装好了以后,由于我们是Docker容器中运行,所以SSH服务不会自动启动。需要我们在容器启动以后,手动通过/usr/sbin/sshd 手动打开SSH服务。未免有些麻烦,为了方便,我们把这个命令加入到~/.bashrc文件中。通过nano ~/.bashrc编辑.bashrc文件(nano没有安装的自行安装,也可用vi),在文件后追加下面内容:

[html]  view plain copy
print ?
  1. #autorun  
  2. /usr/sbin/sshd  


PS:如果出现Missing privilege separation directory: /var/run/sshd这样的错误,请手动创建/var/run/sshd目录

拉下来生成访问密钥

[html]  view plain copy
print ?
  1. root@8ef06706f88d:/# cd ~/  
  2. root@8ef06706f88d:~# ssh-keygen -t rsa -P '' -f ~/.ssh/id_dsa  
  3. root@8ef06706f88d:~# cd .ssh  
  4. root@8ef06706f88d:~/.ssh# cat id_dsa.pub >> authorized_keys  


7.Hadoop分布式集群搭建

启动master容器
[html]  view plain copy
print ?
  1. docker run -ti -h master ubuntu:14.04  

启动slave1容器
[html]  view plain copy
print ?
  1. docker run -ti -h slave1 ubuntu:14.04  

启动slave2容器

[html]  view plain copy
print ?
  1. docker run -ti -h slave2 ubuntu:14.04  


配置hosts

(1)通过ifconfig命令获取各节点ip。环境不同获取的ip可能不一样,如:

172.17.0.2      master
172.17.0.3      slave1
172.17.0.4      slave2

(2)使用sudo nano /etc/hosts命令将如下配置写入各节点的hosts文件,注意修改ip地址

[html]  view plain copy
print ?
  1. 10.0.0.5        master  
  2. 10.0.0.6        slave1  
  3. 10.0.0.7        slave2  

配置slaves

在master节点容器中执行如下命令:

[html]  view plain copy
print ?
  1. root@master:~# cd $HADOOP_CONFIG_HOME/  
  2. root@master:~/soft/apache/hadoop/hadoop-2.6.0/etc/hadoop# nano slaves  
将如下slave节点的hostname信息写入该文件:

[html]  view plain copy
print ?
  1. slave1  
  2. slave2  

8.启动hadoop

在master节点上执行start-all.sh命令,启动Hadoop。

如果启动时出现The authenticity of host 'master (172.17.0.2)' can't be established.

执行ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no再启动

启动后在终端执行hadoop dfsadmin -report,出现下列信息说明要配置完成

[plain]  view plain copy
print ?
  1. root@master:/# hadoop dfsadmin -report  
  2. DEPRECATED: Use of this script to execute hdfs command is deprecated.  
  3. Instead use the hdfs command for it.  
  4.   
  5. Configured Capacity: 494517731328 (460.56 GB)  
  6. Present Capacity: 383011176448 (356.71 GB)  
  7. DFS Remaining: 383011127296 (356.71 GB)  
  8. DFS Used: 49152 (48 KB)  
  9. DFS Used%: 0.00%  
  10. Under replicated blocks: 0  
  11. Blocks with corrupt replicas: 0  
  12. Missing blocks: 0  
  13.   
  14. -------------------------------------------------  
  15. Live datanodes (2):  
  16.   
  17. Name: 172.17.0.4:50010 (slave1)  
  18. Hostname: slave1  
  19. Decommission Status : Normal  
  20. Configured Capacity: 247258865664 (230.28 GB)  
  21. DFS Used: 24576 (24 KB)  
  22. Non DFS Used: 55753277440 (51.92 GB)  
  23. DFS Remaining: 191505563648 (178.35 GB)  
  24. DFS Used%: 0.00%  
  25. DFS Remaining%: 77.45%  
  26. Configured Cache Capacity: 0 (0 B)  
  27. Cache Used: 0 (0 B)  
  28. Cache Remaining: 0 (0 B)  
  29. Cache Used%: 100.00%  
  30. Cache Remaining%: 0.00%  
  31. Xceivers: 1  
  32. Last contact: Fri Aug 05 07:03:08 UTC 2016  
  33.   
  34.   
  35. Name: 172.17.0.5:50010 (slave2)  
  36. Hostname: slave2  
  37. Decommission Status : Normal  
  38. Configured Capacity: 247258865664 (230.28 GB)  
  39. DFS Used: 24576 (24 KB)  
  40. Non DFS Used: 55753277440 (51.92 GB)  
  41. DFS Remaining: 191505563648 (178.35 GB)  
  42. DFS Used%: 0.00%  
  43. DFS Remaining%: 77.45%  
  44. Configured Cache Capacity: 0 (0 B)  
  45. Cache Used: 0 (0 B)  
  46. Cache Remaining: 0 (0 B)  
  47. Cache Used%: 100.00%  
  48. Cache Remaining%: 0.00%  
  49. Xceivers: 1  
  50. Last contact: Fri Aug 05 07:03:08 UTC 2016  
在浏览器输入地址也可以查看:http://master:5007/http:172.17.0.3:50070


文章借鉴了这里的很多东西,大家如果对此文章有什么疑问可以参考它。


这篇关于基于Docker布署分布式hadoop环境的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055226

相关文章

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Docker镜像pull失败两种解决办法小结

《Docker镜像pull失败两种解决办法小结》有时候我们在拉取Docker镜像的过程中会遇到一些问题,:本文主要介绍Docker镜像pull失败两种解决办法的相关资料,文中通过代码介绍的非常详细... 目录docker 镜像 pull 失败解决办法1DrQwWCocker 镜像 pull 失败解决方法2总

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

redis+lua实现分布式限流的示例

《redis+lua实现分布式限流的示例》本文主要介绍了redis+lua实现分布式限流的示例,可以实现复杂的限流逻辑,如滑动窗口限流,并且避免了多步操作导致的并发问题,具有一定的参考价值,感兴趣的可... 目录为什么使用Redis+Lua实现分布式限流使用ZSET也可以实现限流,为什么选择lua的方式实现

关于Docker Desktop的WSL报错问题解决办法

《关于DockerDesktop的WSL报错问题解决办法》:本文主要介绍关于DockerDesktop的WSL报错问题解决办法的相关资料,排查发现是因清理%temp%文件夹误删关键WSL文件,... 目录发现问题排查过程:解决方法其实很简单:重装之后再看就能够查到了:最后分享几个排查这类问题的小www.cp

Centos环境下Tomcat虚拟主机配置详细教程

《Centos环境下Tomcat虚拟主机配置详细教程》这篇文章主要讲的是在CentOS系统上,如何一步步配置Tomcat的虚拟主机,内容很简单,从目录准备到配置文件修改,再到重启和测试,手把手带你搞定... 目录1. 准备虚拟主机的目录和内容创建目录添加测试文件2. 修改 Tomcat 的 server.X

VSCode配置Anaconda Python环境的实现

《VSCode配置AnacondaPython环境的实现》VisualStudioCode中可以使用Anaconda环境进行Python开发,本文主要介绍了VSCode配置AnacondaPytho... 目录前言一、安装 Visual Studio Code 和 Anaconda二、创建或激活 conda

pytorch+torchvision+python版本对应及环境安装

《pytorch+torchvision+python版本对应及环境安装》本文主要介绍了pytorch+torchvision+python版本对应及环境安装,安装过程中需要注意Numpy版本的降级,... 目录一、版本对应二、安装命令(pip)1. 版本2. 安装全过程3. 命令相关解释参考文章一、版本对

Seata之分布式事务问题及解决方案

《Seata之分布式事务问题及解决方案》:本文主要介绍Seata之分布式事务问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Seata–分布式事务解决方案简介同类产品对比环境搭建1.微服务2.SQL3.seata-server4.微服务配置事务模式1

国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)

《国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)》本文给大家利用deepseek模型搭建私有知识问答库的详细步骤和遇到的问题及解决办法,感兴趣的朋友一起看看吧... 目录1. 第1步大家在安装完ollama后,需要到系统环境变量中添加两个变量2. 第3步 “在cmd中