本文主要是介绍基于Docker布署分布式hadoop环境,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.安装Docker
安装Docker的方法这里不再详述,根据自己的操作系统在网上有一大堆教程。今天我们的主要任务是在DOCKER上布署Hadoop。
2.下载 ubutun镜像
docker pull ubuntu:14.04
这条命令的作用是从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
注意:我们在不指定Tag的情况下,默认选择Tag为latest的镜像启动容器。 指定Tag启动命令为:
docker run -ti ubuntu:14.04
执行完后容器就启动了
paul@paul-ThinkPad-T440s:~$ docker run -ti trusting
root@0d055329351d:/
PS:每执行一次docker run命令都会产生一个新的容器,要打开上次生成的容器,可以执行docker start -ai name
name可以通过以下命令找到:
docker ps -a
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
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:
sudo apt-get update
apt-get install oracle-java8-installer
安装完成后执行
java -version
如果看到下面信息说明安装成功。
root@f4b0f6ab6077:/
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)
4.安装hadoop
(1)先安装wget
sudo apt-get install -y wget
(2)利用wget下载安装文件并解压:
oot@8ef06706f88d:cd ~
root@8ef06706f88d:~
root@8ef06706f88d:~
root@8ef06706f88d:~/soft
root@8ef06706f88d:~/soft
root@8ef06706f88d:~/soft/apache
root@8ef06706f88d:~/soft/apache
root@8ef06706f88d:~/soft/apache/hadoop
root@8ef06706f88d:~/soft/apache/hadoop
注意:这里我们安装的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
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.
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配置
打开core-site.xml文件(nano core-site.xml)
- <span style="font-size:18px;"><configuration>
- <property>
- <name>hadoop.tmp.dir</name>
- <value>/root/soft/apache/hadoop/hadoop-2.6.0/tmp</value>
- <description>A base for other temporary directories.</description>
- </property>
-
- <property>
- <name>fs.default.name</name>
- <value>hdfs://master:9000</value>
- <final>true</final>
- <description>The name of the default file system. A URI whose
- scheme and authority determine the FileSystem implementation. The
- uri's scheme determines the config property (fs.SCHEME.impl) naming
- the FileSystem implementation class. The uri's authority is used to
- determine the host, port, etc. for a filesystem.</description>
- </property>
- </configuration></span>
注意:
hadoop.tmp.dir配置项值即为此前命令中创建的临时目录路径。
fs.default.name配置为hdfs://master:9000,指向的是一个Master节点的主机
(2).hdfs-site.xml配置
- <span style="font-size:18px;"><configuration>
- <property>
- <name>dfs.replication</name>
- <value>2</value>
- <final>true</final>
- <description>Default block replication.
- The actual number of replications can be specified when the file is created.
- The default is used if replication is not specified in create time.
- </description>
- </property>
-
- <property>
- <name>dfs.namenode.name.dir</name>
- <value>/root/soft/apache/hadoop/hadoop-2.6.0/namenode</value>
- <final>true</final>
- </property>
-
- <property>
- <name>dfs.datanode.data.dir</name>
- <value>/root/soft/apache/hadoop/hadoop-2.6.0/datanode</value>
- <final>true</final>
- </property>
- </configuration></span>
注意:
- 我们后续搭建集群环境时,将配置一个Master节点和两个Slave节点。所以dfs.replication配置为2。
- dfs.namenode.name.dir和dfs.datanode.data.dir分别配置为之前创建的NameNode和DataNode的目录路径
(3).mapred-site.xml配置
- <span style="font-size:18px;"><configuration>
- <property>
- <name>mapred.job.tracker</name>
- <value>master:9001</value>
- <description>The host and port that the MapReduce job tracker runs
- at. If "local", then jobs are run in-process as a single map
- and reduce task.
- </description>
- </property>
- </configuration></span>
(4).修改JAVA_HOME变量
使用命令.nano hadoop-env.sh
,修改如下配置:
- # The java implementation to use.
- export JAVA_HOME=/usr/lib/jvm/java-8-oracle
(5).格式化 namenode
这是很重要的一步,执行命令hadoop namenode -format
6.安装SSH
搭建集群环境,自然少不了使用SSH。这可以实现无密码访问,访问集群机器的时候很方便。
- root@8ef06706f88d:~# sudo apt-get install ssh
SSH装好了以后,由于我们是Docker容器中运行,所以SSH服务不会自动启动。需要我们在容器启动以后,手动通过/usr/sbin/sshd
手动打开SSH服务。未免有些麻烦,为了方便,我们把这个命令加入到~/.bashrc
文件中。通过nano ~/.bashrc
编辑.bashrc
文件(nano没有安装的自行安装,也可用vi),在文件后追加下面内容:
PS:如果出现Missing privilege separation directory: /var/run/sshd这样的错误,请手动创建/var/run/sshd目录
拉下来生成访问密钥
- root@8ef06706f88d:/# cd ~/
- root@8ef06706f88d:~# ssh-keygen -t rsa -P '' -f ~/.ssh/id_dsa
- root@8ef06706f88d:~# cd .ssh
- root@8ef06706f88d:~/.ssh# cat id_dsa.pub >> authorized_keys
7.Hadoop分布式集群搭建
启动master容器
- docker run -ti -h master ubuntu:14.04
启动slave1容器
- docker run -ti -h slave1 ubuntu:14.04
启动slave2容器
- 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地址
- 10.0.0.5 master
- 10.0.0.6 slave1
- 10.0.0.7 slave2
配置slaves
在master节点容器中执行如下命令:
- root@master:~# cd $HADOOP_CONFIG_HOME/
- root@master:~/soft/apache/hadoop/hadoop-2.6.0/etc/hadoop# nano slaves
将如下slave节点的hostname信息写入该文件:
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,出现下列信息说明要配置完成
- root@master:/# hadoop dfsadmin -report
- DEPRECATED: Use of this script to execute hdfs command is deprecated.
- Instead use the hdfs command for it.
-
- Configured Capacity: 494517731328 (460.56 GB)
- Present Capacity: 383011176448 (356.71 GB)
- DFS Remaining: 383011127296 (356.71 GB)
- DFS Used: 49152 (48 KB)
- DFS Used%: 0.00%
- Under replicated blocks: 0
- Blocks with corrupt replicas: 0
- Missing blocks: 0
-
- -------------------------------------------------
- Live datanodes (2):
-
- Name: 172.17.0.4:50010 (slave1)
- Hostname: slave1
- Decommission Status : Normal
- Configured Capacity: 247258865664 (230.28 GB)
- DFS Used: 24576 (24 KB)
- Non DFS Used: 55753277440 (51.92 GB)
- DFS Remaining: 191505563648 (178.35 GB)
- DFS Used%: 0.00%
- DFS Remaining%: 77.45%
- Configured Cache Capacity: 0 (0 B)
- Cache Used: 0 (0 B)
- Cache Remaining: 0 (0 B)
- Cache Used%: 100.00%
- Cache Remaining%: 0.00%
- Xceivers: 1
- Last contact: Fri Aug 05 07:03:08 UTC 2016
-
-
- Name: 172.17.0.5:50010 (slave2)
- Hostname: slave2
- Decommission Status : Normal
- Configured Capacity: 247258865664 (230.28 GB)
- DFS Used: 24576 (24 KB)
- Non DFS Used: 55753277440 (51.92 GB)
- DFS Remaining: 191505563648 (178.35 GB)
- DFS Used%: 0.00%
- DFS Remaining%: 77.45%
- Configured Cache Capacity: 0 (0 B)
- Cache Used: 0 (0 B)
- Cache Remaining: 0 (0 B)
- Cache Used%: 100.00%
- Cache Remaining%: 0.00%
- Xceivers: 1
- Last contact: Fri Aug 05 07:03:08 UTC 2016
在浏览器输入地址也可以查看:http://master:5007/http:172.17.0.3:50070
文章借鉴了这里的很多东西,大家如果对此文章有什么疑问可以参考它。
这篇关于基于Docker布署分布式hadoop环境的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!