基于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

相关文章

linux环境openssl、openssh升级流程

《linux环境openssl、openssh升级流程》该文章详细介绍了在Ubuntu22.04系统上升级OpenSSL和OpenSSH的方法,首先,升级OpenSSL的步骤包括下载最新版本、安装编译... 目录一.升级openssl1.官网下载最新版openssl2.安装编译环境3.下载后解压安装4.备份

如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

《如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件》本文介绍了如何使用Docker部署FTP服务器和Nginx,并通过HTTP访问FTP中的文件,通过将FTP数据目录挂载到N... 目录docker部署FTP和Nginx并通过HTTP访问FTP里的文件1. 部署 FTP 服务器 (

解读docker运行时-itd参数是什么意思

《解读docker运行时-itd参数是什么意思》在Docker中,-itd参数组合用于在后台运行一个交互式容器,同时保持标准输入和分配伪终端,这种方式适合需要在后台运行容器并保持交互能力的场景... 目录docker运行时-itd参数是什么意思1. -i(或 --interactive)2. -t(或 --

Docker部署Jenkins持续集成(CI)工具的实现

《Docker部署Jenkins持续集成(CI)工具的实现》Jenkins是一个流行的开源自动化工具,广泛应用于持续集成(CI)和持续交付(CD)的环境中,本文介绍了使用Docker部署Jenkins... 目录前言一、准备工作二、设置变量和目录结构三、配置 docker 权限和网络四、启动 Jenkins

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

docker如何删除悬空镜像

《docker如何删除悬空镜像》文章介绍了如何使用Docker命令删除悬空镜像,以提高服务器空间利用率,通过使用dockerimage命令结合filter和awk工具,可以过滤出没有Tag的镜像,并将... 目录docChina编程ker删除悬空镜像前言悬空镜像docker官方提供的方式自定义方式总结docker

在Mysql环境下对数据进行增删改查的操作方法

《在Mysql环境下对数据进行增删改查的操作方法》本文介绍了在MySQL环境下对数据进行增删改查的基本操作,包括插入数据、修改数据、删除数据、数据查询(基本查询、连接查询、聚合函数查询、子查询)等,并... 目录一、插入数据:二、修改数据:三、删除数据:1、delete from 表名;2、truncate

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d