vmware和云服务器能一起搭建hadoop集群吗?两台虚拟机一台云服务器 该怎么设置呢
理论上可以的,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 master192168137111 slave1
192168137112 slave2
3其他重要配置文件core-sitexml/mapred-sitexml等修改相应属性。
4把hadoop目录下的conf/ masters文件修改成形如下:
master把hadoop目录下的conf/ slaves文件修改成形如下:
masterslave1
slave2
注:如果用虚拟机去做这件事,首先你的电脑配置不会太差,毕竟你要开三个虚拟机;其次,我建议你使用ambari,
cloudera等工具搭建,比较简单,不过初学的话,自己动手可以更熟悉整个框架。
0条评论