vmware和云服务器能一起搭建hadoop集群吗?两台虚拟机一台云服务器 该怎么设置呢

vmware和云服务器能一起搭建hadoop集群吗?两台虚拟机一台云服务器 该怎么设置呢,第1张

理论上可以的,vmware虚拟机和云服务器其实和传统物理服务器用起来没差别。但如果你说的云服务器是公有云,是vmware在你的局域网,不推荐组合起来搭建hadoop,因为互联网的网络延迟比本地高,集群会不稳,非要做的话,vmware虚拟机需要用dnat映射地址到公网

21 准备

克隆三台虚拟机:hadoop102 hadoop103 hadoop104,

修改克隆虚拟机的静态 IP:vim /etc/sysconfig/network-scripts/ifcfgens33

修改主机名称 vim /etc/hostname

配置 Linux 克隆机主机名称映射 hosts 文件:vim /etc/hosts

reboot

安装 JDK 前,一定确保提前删除了虚拟机自带的 JDK

解压、配置 JDK 环境变量,测试:java -version

Hadoop 下载地址:https://archiveapacheorg/dist/hadoop/common/hadoop-313/

解压、将 Hadoop 添加到环境变量

22 Hadoop 重要目录

bin 目录:存放对 Hadoop 相关服务(hdfs,yarn,mapred)进行操作的脚本

etc 目录:Hadoop 的配置文件目录,存放 Hadoop 的配置文件

lib 目录:存放 Hadoop 的本地库(对数据进行压缩解压缩功能)

sbin 目录:存放启动或停止 Hadoop 相关服务的脚本

share 目录:存放 Hadoop 的依赖 jar 包、文档、和官方案例

23 Hadoop运行模式

Hadoop 运行模式包括:本地模式、伪分布式模式以及完全分布式模式

本地模式:单机运行,只是用来演示一下官方案例。生产环境不用。

伪分布式模式:也是单机运行,但是具备 Hadoop 集群的所有功能,一台服务器模 拟一个分布式的环境。个别缺钱的公司用来测试,生产环境不用。

完全分布式模式:多台服务器组成分布式环境。生产环境使用。

完全分布式运行模式(开发重点) 分析:1)准备 3 台客户机(关闭防火墙、静态 IP、主机名称) 2)安装 JDK 3)配置环境变量 4)安装 Hadoop 5)配置环境变量 6)配置集群 7)单点启动 8)配置 ssh 9)群起并测试集群

编写集群分发脚本 xsync

scp安全拷贝语法:

scp -r $pdir/$fname $user@$host:$pdir/$fname

命令 递归 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称

rsync 远程同步工具语法:

rsync -av $pdir/$fname $user@$host:$pdir/$fname

命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称

rsync 和 scp 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更 新。scp 是把所有文件都复制过去。

rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。

SSH 无密登录配置

命令:ssh-keygen -t rsa

然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsapub(公钥)

将公钥拷贝到要免密登录的目标机器上:ssh-copy-id hadoop102

24 集群安装

注意

NameNode 和 SecondaryNameNode 不要安装在同一台服务器

ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode 配置在 同一台机器上。

Hadoop 配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认 配置值时,才需要修改自定义配置文件,更改相应属性值

自定义配置文件:core-sitexml、hdfs-sitexml、yarn-sitexml、mapred-sitexml 四个配置文件存放在 $HADOOP_HOME/etc/hadoop 这个路径

hadoop20已经发布了稳定版本了,增加了很多特性,比如HDFS HA、YARN等。最新的hadoop-241又增加了YARN HA

注意:apache提供的hadoop-241的安装包是在32位操作系统编译的,因为hadoop依赖一些C++的本地库,

所以如果在64位的操作上安装hadoop-241就需要重新在64操作系统上重新编译

(建议第一次安装用32位的系统,我将编译好的64位的也上传到群共享里了,如果有兴趣的可以自己编译一下)

前期准备就不详细说了,课堂上都介绍了

1修改Linux主机名

2修改IP

3修改主机名和IP的映射关系

######注意######如果你们公司是租用的服务器或是使用的云主机(如华为用主机、阿里云主机等)

/etc/hosts里面要配置的是内网IP地址和主机名的映射关系

4关闭防火墙

5ssh免登陆

6安装JDK,配置环境变量等

集群规划:

主机名 IP 安装的软件 运行的进程

HA181 1921681181 jdk、hadoop NameNode、DFSZKFailoverController(zkfc)

HA182 1921681182 jdk、hadoop NameNode、DFSZKFailoverController(zkfc)

HA183 1921681183 jdk、hadoop ResourceManager

HA184 1921681184 jdk、hadoop ResourceManager

HA185 1921681185 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain

HA186 1921681186 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain

HA187 1921681187 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain

说明:

1在hadoop20中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。

hadoop20官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode

这里还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为standby状态

2hadoop-220中依然存在一个问题,就是ResourceManager只有一个,存在单点故障,hadoop-241解决了这个问题,有两个ResourceManager,一个是Active,一个是Standby,状态由zookeeper进行协调

安装步骤:

1安装配置zooekeeper集群(在HA185上)

11解压

tar -zxvf zookeeper-345targz -C /app/

12修改配置

cd /app/zookeeper-345/conf/

cp zoo_samplecfg zoocfg

vim zoocfg

修改:dataDir=/app/zookeeper-345/tmp

在最后添加:

server1=HA185:2888:3888

server2=HA186:2888:3888

server3=HA187:2888:3888

保存退出

然后创建一个tmp文件夹

mkdir /app/zookeeper-345/tmp

再创建一个空文件

touch /app/zookeeper-345/tmp/myid

最后向该文件写入ID

echo 1 > /app/zookeeper-345/tmp/myid

13将配置好的zookeeper拷贝到其他节点(首先分别在HA186、HA187根目录下创建一个weekend目录:mkdir /weekend)

scp -r /app/zookeeper-345/ HA186:/app/

scp -r /app/zookeeper-345/ HA187:/app/

注意:修改HA186、HA187对应/weekend/zookeeper-345/tmp/myid内容

HA186:

echo 2 > /app/zookeeper-345/tmp/myid

HA187:

echo 3 > /app/zookeeper-345/tmp/myid

2安装配置hadoop集群(在HA181上操作)

21解压

tar -zxvf hadoop-241targz -C /weekend/

22配置HDFS(hadoop20所有的配置文件都在$HADOOP_HOME/etc/hadoop目录下)

#将hadoop添加到环境变量中

vim /etc/profile

export JAVA_HOME=/app/jdk170_79

export HADOOP_HOME=/app/hadoop-241

export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin

#hadoop20的配置文件全部在$HADOOP_HOME/etc/hadoop下

cd /home/hadoop/app/hadoop-241/etc/hadoop

221修改hadoop-envsh

export JAVA_HOME=/app/jdk170_79

222修改core-sitexml

<configuration>

<!-- 指定hdfs的nameservice为ns1 -->

<property>

<name>fsdefaultFS</name>

<value>hdfs://ns1/</value>

</property>

<!-- 指定hadoop临时目录 -->

<property>

<name>hadooptmpdir</name>

<value>/app/hadoop-241/tmp</value>

</property>

<!-- 指定zookeeper地址 -->

<property>

<name>hazookeeperquorum</name>

<value>HA185:2181,HA186:2181,HA187:2181</value>

</property>

</configuration>

223修改hdfs-sitexml

<configuration>

<!--指定hdfs的nameservice为ns1,需要和core-sitexml中的保持一致 -->

<property>

<name>dfsnameservices</name>

<value>ns1</value>

</property>

<!-- ns1下面有两个NameNode,分别是nn1,nn2 -->

<property>

<name>dfshanamenodesns1</name>

<value>nn1,nn2</value>

</property>

<!-- nn1的RPC通信地址 -->

<property>

<name>dfsnamenoderpc-addressns1nn1</name>

<value>HA181:9000</value>

</property>

<!-- nn1的http通信地址 -->

<property>

<name>dfsnamenodehttp-addressns1nn1</name>

<value>HA181:50070</value>

</property>

<!-- nn2的RPC通信地址 -->

<property>

<name>dfsnamenoderpc-addressns1nn2</name>

<value>HA182:9000</value>

</property>

<!-- nn2的http通信地址 -->

<property>

<name>dfsnamenodehttp-addressns1nn2</name>

<value>HA182:50070</value>

</property>

<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->

<property>

<name>dfsnamenodesharededitsdir</name>

<value>qjournal://HA185:8485;HA186:8485;HA187:8485/ns1</value>

</property>

<!-- 指定JournalNode在本地磁盘存放数据的位置 -->

<property>

<name>dfsjournalnodeeditsdir</name>

<value>/app/hadoop-241/journaldata</value>

</property>

<!-- 开启NameNode失败自动切换 -->

<property>

<name>dfshaautomatic-failoverenabled</name>

<value>true</value>

</property>

<!-- 配置失败自动切换实现方式 -->

<property>

<name>dfsclientfailoverproxyproviderns1</name>

<value>orgapachehadoophdfsservernamenodehaConfiguredFailoverProxyProvider</value>

</property>

<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->

<property>

<name>dfshafencingmethods</name>

<value>

sshfence

shell(/bin/true)

</value>

</property>

<!-- 使用sshfence隔离机制时需要ssh免登陆 -->

<property>

<name>dfshafencingsshprivate-key-files</name>

<value>/home/hadoop/ssh/id_rsa</value>

</property>

<!-- 配置sshfence隔离机制超时时间 -->

<property>

<name>dfshafencingsshconnect-timeout</name>

<value>30000</value>

</property>

</configuration>

224修改mapred-sitexml

<configuration>

<!-- 指定mr框架为yarn方式 -->

<property>

<name>mapreduceframeworkname</name>

<value>yarn</value>

</property>

</configuration>

225修改yarn-sitexml

<configuration>

<!-- 开启RM高可用 -->

<property>

   <name>yarnresourcemanagerhaenabled</name>

   <value>true</value>

</property>

<!-- 指定RM的cluster id -->

<property>

   <name>yarnresourcemanagercluster-id</name>

   <value>yrc</value>

</property>

<!-- 指定RM的名字 -->

<property>

   <name>yarnresourcemanagerharm-ids</name>

   <value>rm1,rm2</value>

</property>

<!-- 分别指定RM的地址 -->

<property>

   <name>yarnresourcemanagerhostnamerm1</name>

   <value>HA183</value>

</property>

<property>

   <name>yarnresourcemanagerhostnamerm2</name>

   <value>HA184</value>

</property>

<!-- 指定zk集群地址 -->

<property>

   <name>yarnresourcemanagerzk-address</name>

   <value>HA185:2181,HA186:2181,HA187:2181</value>

</property>

<property>

   <name>yarnnodemanageraux-services</name>

   <value>mapreduce_shuffle</value>

</property>

</configuration>

226修改slaves(slaves是指定子节点的位置,因为要在HA181上启动HDFS、在HA183启动yarn,

所以HA181上的slaves文件指定的是datanode的位置,HA183上的slaves文件指定的是nodemanager的位置)

HA185

HA186

HA187

227配置免密码登陆

#首先要配置HA181到HA182、HA183、HA184、HA185、HA186、HA187的免密码登陆

#在HA181上生产一对钥匙

ssh-keygen -t rsa

#将公钥拷贝到其他节点,包括自己

ssh-copy-id HA181

ssh-copy-id HA182

ssh-copy-id HA183

ssh-copy-id HA184

ssh-copy-id HA185

ssh-copy-id HA186

ssh-copy-id HA187

#配置HA183到HA184、HA185、HA186、HA187的免密码登陆

#在HA183上生产一对钥匙

ssh-keygen -t rsa

#将公钥拷贝到其他节点

ssh-copy-id HA184

ssh-copy-id HA185

ssh-copy-id HA186

ssh-copy-id HA187

#注意:两个namenode之间要配置ssh免密码登陆,别忘了配置HA182到HA181的免登陆

在HA182上生产一对钥匙

ssh-keygen -t rsa

ssh-copy-id -i HA181

24将配置好的hadoop拷贝到其他节点

scp -r /app/hadoop-251/ HA182:/app/

scp -r /app/hadoop-251/ HA183:/app/

scp -r /app/hadoop-251/ HA184:/app/

scp -r /app/hadoop-251/ HA185:/app/

scp -r /app/hadoop-251/ HA186:/app/

scp -r /app/hadoop-251/ HA187:/app/

###注意:严格按照下面的步骤

25启动zookeeper集群(分别在HA185、HA186、tcast07上启动zk)

cd /app/zookeeper-345/bin/

/zkServersh start

#查看状态:一个leader,两个follower

/zkServersh status

26启动journalnode(分别在在HA185、HA186、HA187上执行)

cd /app/hadoop-251

hadoop-daemonsh start journalnode

#运行jps命令检验,HA185、HA186、HA187上多了JournalNode进程

27格式化ZKFC(在HA181上执行即可) hdfs zkfc -formatZK

28格式化HDFS

#在HA181上执行命令:

hdfs namenode -format

#格式化后会在根据core-sitexml中的hadooptmpdir配置生成个文件,这里我配置的是/app/hadoop-241/tmp,然后将/weekend/hadoop-241/tmp拷贝到HA182的/weekend/hadoop-241/下。

scp -r tmp/ HA182:/app/hadoop-251/

##也可以这样,建议hdfs namenode -bootstrapStandby

29启动HDFS(在HA181上执行)

sbin/start-dfssh

210启动YARN(#####注意#####:是在HA183上执行start-yarnsh,把namenode和resourcemanager分开是因为性能问题,因为他们都要占用大量资源,所以把他们分开了,他们分开了就要分别在不同的机器上启动)

sbin/start-yarnsh

到此,hadoop-241配置完毕,可以统计浏览器访问:

http://1921681181:50070

NameNode 'HA181:9000' (active)

http://1921681182:50070

NameNode 'HA182:9000' (standby)

验证HDFS HA

首先向hdfs上传一个文件

hadoop fs -put /etc/profile /profile

hadoop fs -ls /

然后再kill掉active的NameNode

kill -9 <pid of NN>

通过浏览器访问:http://1921681182:50070

NameNode 'HA182:9000' (active)

这个时候HA182上的NameNode变成了active

在执行命令:

hadoop fs -ls /

-rw-r--r--   3 root supergroup       1926 2014-02-06 15:36 /profile

刚才上传的文件依然存在!!!

手动启动那个挂掉的NameNode

sbin/hadoop-daemonsh start namenode

通过浏览器访问:http://1921681181:50070

NameNode 'HA181:9000' (standby)

验证YARN:

运行一下hadoop提供的demo中的WordCount程序:

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-241jar wordcount /profile /out

OK,大功告成!!!

CID-74d21742-3e4b-4df6-a99c-d52f703b49c0

测试集群工作状态的一些指令 :

bin/hdfs dfsadmin -report  查看hdfs的各节点状态信息

bin/hdfs haadmin -getServiceState nn1  获取一个namenode节点的HA状态

sbin/hadoop-daemonsh start namenode  单独启动一个namenode进程

/hadoop-daemonsh start zkfc   单独启动一个zkfc进程

Docker最核心的特性之一,就是能够将任何应用包括Hadoop打包到Docker镜像中。这篇教程介绍了利用Docker在单机上快速搭建多

节点 Hadoop集群的详细步骤。作者在发现目前的Hadoop on 

Docker项目所存在的问题之后,开发了接近最小化的Hadoop镜像,并且支持快速搭建任意节点数的Hadoop集群。

 

一 项目简介

 

GitHub: kiwanlau/hadoop-cluster-docker

 

直接用机器搭建Hadoop集群是一个相当痛苦的过程,尤其对初学者来说。他们还没开始跑wordcount,可能就被这个问题折腾的体无完肤了。而且也不是每个人都有好几台机器对吧。你可以尝试用多个虚拟机搭建,前提是你有个性能杠杠的机器。

 

我的目标是将Hadoop集群运行在Docker容器中,使Hadoop开发者能够快速便捷地在本机搭建多节点的Hadoop集群。其实这个想法已

经有了不少实现,但是都不是很理想,他们或者镜像太大,或者使用太慢,或者使用了第三方工具使得使用起来过于复杂。下表为一些已知的Hadoop on 

Docker项目以及其存在的问题。

 

 

 

我的项目参考了alvinhenrick/hadoop-mutinode项目,不过我做了大量的优化和重构。alvinhenrick/hadoop-mutinode项目的GitHub主页以及作者所写的博客地址如下:

 

GitHub:Hadoop (YARN) Multinode Cluster with Docker

博客:Hadoop (YARN) Multinode Cluster with Docker

 

下面两个表是alvinhenrick/hadoop-mutinode项目与我的kiwenlau/hadoop-cluster-docker项目的参数对比:

 

 

 

 

 

可知,我主要优化了这样几点:

 

更小的镜像大小

更快的构造时间

更少的镜像层数

 

更快更方便地改变Hadoop集群节点数目

 

另外,alvinhenrick/hadoop-mutinode项目增加节点时需要手动修改Hadoop配置文件然后重新构建hadoop-

nn-dn 

镜像,然后修改容器启动脚本,才能实现增加节点的功能。而我通过shell脚本实现自动话,不到1分钟可以重新构建hadoop-master镜像,然后

立即运行!本项目默认启动3个节点的Hadoop集群,支持任意节点数的Hadoop集群。

 

另外,启动Hadoop,运行wordcount以及重新构建镜像都采用了shell脚本实现自动化。这样使得整个项目的使用以及开发都变得非常方便快捷。

 

开发测试环境

 

操作系统:ubuntu 1404 和 ubuntu 1204

内核版本: 3130-32-generic

Docker版本:150 和162

 

小伙伴们,硬盘不够,内存不够,尤其是内核版本过低会导致运行失败。

 

二 镜像简介

 

本项目一共开发了4个镜像:

 

serf-dnsmasq

hadoop-base

hadoop-master

hadoop-slave

 

serf-dnsmasq镜像

 

基于ubuntu:1504 (选它是因为它最小,不是因为它最新)

安装serf: serf是一个分布式的机器节点管理工具。它可以动态地发现所有Hadoop集群节点。

安装dnsmasq: dnsmasq作为轻量级的DNS服务器。它可以为Hadoop集群提供域名解析服务。

 

容器启动时,master节点的IP会传给所有slave节点。serf会在container启动后立即启动。slave节点上的serf 

agent会马上发现master节点(master 

IP它们都知道嘛),master节点就马上发现了所有slave节点。然后它们之间通过互相交换信息,所有节点就能知道其他所有节点的存在了。

(Everyone will know 

Everyone)。serf发现新的节点时,就会重新配置dnsmasq,然后重启dnsmasq。所以dnsmasq就能够解析集群的所有节点的域名

啦。这个过程随着节点的增加会耗时更久,因此,若配置的Hadoop节点比较多,则在启动容器后需要测试serf是否发现了所有节点,DNS是否能够解析

所有节点域名。稍等片刻才能启动Hadoop。这个解决方案是由SequenceIQ公司提出的,该公司专注于将Hadoop运行在Docker中。参考

这个演讲稿。

 

hadoop-base镜像

 

基于serf-dnsmasq镜像

安装JDK(OpenJDK)

安装openssh-server,配置无密码SSH

安装vim:介样就可以愉快地在容器中敲代码了

安装Hadoop 230: 安装编译过的Hadoop(252, 260, 270 都比230大,所以我懒得升级了)

 

另外,编译Hadoop的步骤请参考我的博客。

 

如果需要重新开发我的hadoop-base, 需要下载编译过的hadoop-230安装包,放到hadoop-cluster-docker/hadoop-base/files目录内。我编译的64位hadoop-230下载地址:

 

 

另外,我还编译了64位的Hadoop 252、260,、270, 其下载地址如下:

 

hadoop-230: 

hadoop-252: 

hadoop-260:

hadoop-270: 

 

hadoop-master镜像

 

基于hadoop-base镜像

配置hadoop的master节点

格式化namenode

 

这一步需要配置slaves文件,而slaves文件需要列出所有节点的域名或者IP。因此,Hadoop节点数目不同时,slaves文件自然也

不一样。因此,更改Hadoop集群节点数目时,需要修改slaves文件然后重新构建hadoop-master镜像。我编写了一个resize- 

clustersh脚本自动化这一过程。仅需给定节点数目作为脚本参数就可以轻松实现Hadoop集群节点数目的更改。由于hadoop-master

 镜像仅仅做一些配置工作,也无需下载任何文件,整个过程非常快,1分钟就足够了。

 

hadoop-slave镜像

 

基于hadoop-base镜像

配置hadoop的slave节点

 

镜像大小分析

 

下表为sudo docker images的运行结果:

 

 

 

易知以下几个结论:

 

serf-dnsmasq镜像在ubuntu:1504镜像的基础上增加了754MB

hadoop-base镜像在serf-dnsmasq镜像的基础上增加了5707MB

hadoop-master和hadoop-slave镜像在hadoop-base镜像的基础上大小几乎没有增加

 

下表为sudo docker history indexalaudacn/kiwenlau/hadoop-base:010的部分运行结果

 

 

 

可知:

 

基础镜像ubuntu:1504为1313MB

安装OpenJDK需要3246MB

安装Hadoop需要1585MB

Ubuntu、OpenJDK与Hadoop均为镜像所必须,三者一共占了6144MB

 

因此,我所开发的hadoop镜像以及接近最小,优化空间已经很小了。

 

三 3节点Hadoop集群搭建步骤

 

1 拉取镜像

sudo docker pull indexalaudacn/kiwenlau/hadoop-master:010  sudo docker pull indexalaudacn/kiwenlau/hadoop-slave:010  sudo docker pull indexalaudacn/kiwenlau/hadoop-base:010  sudo docker pull indexalaudacn/kiwenlau/serf-dnsmasq:010 

 

3~5分钟OK~也可以直接从我的DokcerHub仓库中拉取镜像,这样就可以跳过第2步:

sudo docker pull kiwenlau/hadoop-master:010  sudo docker pull kiwenlau/hadoop-slave:010  sudo docker pull kiwenlau/hadoop-base:010  sudo docker pull kiwenlau/serf-dnsmasq:010 

 

查看下载的镜像:

sudo docker images 

 

运行结果:

 

 

 

其中hadoop-base镜像是基于serf-dnsmasq镜像的,hadoop-slave镜像和hadoop-master镜像都是基于hadoop-base镜像。所以其实4个镜像一共也就7774MB。

 

2 修改镜像tag

sudo docker tag d63869855c03 kiwenlau/hadoop-slave:010  sudo docker tag 7c9d32ede450 kiwenlau/hadoop-master:010  sudo docker tag 5571bd5de58e kiwenlau/hadoop-base:010  sudo docker tag 09ed89c24ee8 kiwenlau/serf-dnsmasq:010 

 

查看修改tag后镜像:

sudo docker images 

 

运行结果:

 

 

 

之所以要修改镜像,是因为我默认是将镜像上传到Dockerhub, 

因此Dokerfile以及shell脚本中得镜像名称都是没有alauada前缀的,sorry for 

this不过改tag还是很快滴。若直接下载我在DockerHub中的镜像,自然就不需要修改tag不过Alauda镜像下载速度很快的

哈~

 

3下载源代码

 

git clone https://githubcom/kiwenlau/hadoop-cluster-docker

 

为了防止GitHub被XX,我把代码导入到了开源中国的Git仓库:

 

git clone http://gitoschinanet/kiwenlau/hadoop-cluster-docker

 

4 运行容器

cd hadoop-cluster-docker  /start-containersh 

 

运行结果:

start master container  start slave1 container  start slave2 container  root@master:~# 

 

一共开启了3个容器,1个master, 2个slave。开启容器后就进入了master容器root用户的根目录(/root)。

 

查看master的root用户家目录的文件:

 

ls

 

运行结果:

hdfs run-wordcountsh serf_log start-hadoopsh start-ssh-serfsh 

 

start-hadoopsh是开启hadoop的shell脚本,run-wordcountsh是运行wordcount的shell脚本,可以测试镜像是否正常工作。

 

5测试容器是否正常启动(此时已进入master容器)

 

查看hadoop集群成员:

serf members 

 

运行结果:

masterkiwenlaucom 17217065:7946 alive  slave1kiwenlaucom 17217066:7946 alive  slave2kiwenlaucom 17217067:7946 alive 

 

若结果缺少节点,可以稍等片刻,再执行“serf members”命令。因为serf agent需要时间发现所有节点。

 

测试ssh:

ssh slave2kiwenlaucom 

 

运行结果:

Warning: Permanently added 'slave2kiwenlaucom,17217067' (ECDSA) to the list of known hosts  Welcome to Ubuntu 1504 (GNU/Linux 3130-53-generic x86_64)   Documentation: https://helpubuntucom/  The programs included with the Ubuntu system are free software;  the exact distribution terms for each program are described in the  individual files in /usr/share/doc//copyright  Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by  applicable law  root@slave2:~# 

 

退出slave2:

exit 

 

运行结果:

logout  Connection to slave2kiwenlaucom closed 

 

若ssh失败,请稍等片刻再测试,因为dnsmasq的dns服务器启动需要时间。测试成功后,就可以开启Hadoop集群了!其实你也可以不进行测试,开启容器后耐心等待一分钟即可!

 

6 开启Hadoop

/start-hadoopsh 

 

上一步ssh到slave2之后,请记得回到master啊!运行结果太多,忽略,Hadoop的启动速度取决于机器性能

 

7 运行wordcount

/run-wordcountsh 

 

运行结果:

input file1txt:  Hello Hadoop  input file2txt:  Hello Docker  wordcount output:  Docker 1  Hadoop 1  Hello 2 

 

wordcount的执行速度取决于机器性能

 

四 N节点Hadoop集群搭建步骤

 

1 准备工作

 

参考第二部分1~3:下载镜像,修改tag,下载源代码

 

注意,你可以不下载serf-dnsmasq,但是请最好下载hadoop-base,因为hadoop-master是基于hadoop-base构建的。

 

2 重新构建hadoop-master镜像

/resize-clustersh 5 

 

不要担心,1分钟就能搞定

 

你可以为resize-clustersh脚本设不同的正整数作为参数数1, 2, 3, 4, 5, 6

 

3 启动容器

/start-containersh 5 

 

你可以为resize-clustersh脚本设不同的正整数作为参数数1, 2, 3, 4, 5, 6

 

这个参数呢,最好还是得和上一步的参数一致:)

 

这个参数如果比上一步的参数大,你多启动的节点,Hadoop不认识它们

 

这个参数如果比上一步的参数小,Hadoop觉得少启动的节点挂掉了

 

4 测试工作

 

参考第三部分5~7:测试容器,开启Hadoop,运行wordcount

 

请注意,若节点增加,请务必先测试容器,然后再开启Hadoop, 因为serf可能还没有发现所有节点,而dnsmasq的DNS服务器表示还没有配置好服务

如果是集群的话,我考虑需要流畅运行的话,2核4G配置是可以满足的。因为这个集群形式,用于适用于物联网、车联网、监控、安全风控、即时通讯、消息存储等行业场景,所以数据量是比较大的,所以配置太低了跑不动,会卡死的。

因为hadoop是海量数据的处理能力,所以服务器一定不能太小配置了,跑不动了就没实际用途了。最好使用4核8G内存及以上配置。

因为这方面内容较多,这里也写不开那么多内容,所以你可以留言或到我的博客上搜索相关内容,老魏有写过教程,还不止一篇,都挺详细的内容,可以帮助你入门。

1修改hadoop目录下的conf/hdfs-sitexml文件下dfsreplication属性为3。

<property>

    <name>dfsreplication</name>  

    <value>3</value>

</property>

 <property>

   <name>dfsdatadir</name>  

   <value>/hadoop/data</value>

 </property>

2修改地址解析文件/etc/hosts,加入形如    

192168137110  master

192168137111  slave1

192168137112  slave2

3其他重要配置文件core-sitexml/mapred-sitexml等修改相应属性。

4把hadoop目录下的conf/ masters文件修改成形如下:

master

把hadoop目录下的conf/ slaves文件修改成形如下:   

master

slave1

slave2

注:如果用虚拟机去做这件事,首先你的电脑配置不会太差,毕竟你要开三个虚拟机;其次,我建议你使用ambari,

cloudera等工具搭建,比较简单,不过初学的话,自己动手可以更熟悉整个框架。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » vmware和云服务器能一起搭建hadoop集群吗?两台虚拟机一台云服务器 该怎么设置呢

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情