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

相关文章

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

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

gradle安装和环境配置全过程

《gradle安装和环境配置全过程》本文介绍了如何安装和配置Gradle环境,包括下载Gradle、配置环境变量、测试Gradle以及在IntelliJIDEA中配置Gradle... 目录gradle安装和环境配置1 下载GRADLE2 环境变量配置3 测试gradle4 设置gradle初始化文件5 i

java如何分布式锁实现和选型

《java如何分布式锁实现和选型》文章介绍了分布式锁的重要性以及在分布式系统中常见的问题和需求,它详细阐述了如何使用分布式锁来确保数据的一致性和系统的高可用性,文章还提供了基于数据库、Redis和Zo... 目录引言:分布式锁的重要性与分布式系统中的常见问题和需求分布式锁的重要性分布式系统中常见的问题和需求

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

更改docker默认数据目录的方法步骤

《更改docker默认数据目录的方法步骤》本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1.查看docker是否存在并停止该服务2.挂载镜像并安装rsync便于备份3.取消挂载备份和迁

Redis分布式锁使用及说明

《Redis分布式锁使用及说明》本文总结了Redis和Zookeeper在高可用性和高一致性场景下的应用,并详细介绍了Redis的分布式锁实现方式,包括使用Lua脚本和续期机制,最后,提到了RedLo... 目录Redis分布式锁加锁方式怎么会解错锁?举个小案例吧解锁方式续期总结Redis分布式锁如果追求

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke