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

相关文章

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

Jenkins分布式集群配置方式

《Jenkins分布式集群配置方式》:本文主要介绍Jenkins分布式集群配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装jenkins2.配置集群总结Jenkins是一个开源项目,它提供了一个容易使用的持续集成系统,并且提供了大量的plugin满

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp