dnsmasq源码
1. 如何基于Docker快速搭建多节点Hadoop集群
Docker最核心的特性之一,就是能够将任何应用包括Hadoop打包到Docker镜像中。这篇教程介绍了利用Docker在单机上快速搭建多
节点Hadoop集群的详细步骤。作者在发现目前的Hadoopon
Docker项目所存在的问题之后,开发了接近最小化的Hadoop镜像,并且支持快速搭建任意节点数的Hadoop集群。
一.项目简介
GitHub:kiwanlau/hadoop-cluster-docker
直接用机器搭建Hadoop集群是一个相当痛苦的过程,尤其对初学者来说。他们还没开始跑wordcount,可能就被这个问题折腾的体无完肤了。而且也不是每个人都有好几台机器对吧。你可以尝试用多个虚拟机搭建,前提是你有个性能杠杠的机器。
我的目标是将Hadoop集群运行在Docker容器中,使Hadoop开发者能够快速便捷地在本机搭建多节点的Hadoop集群。其实这个想法已
经有了不少实现,但是都不是很理想,他们或者镜像太大,或者使用太慢,或者使用了第三方工具使得使用起来过于复杂。下表为一些已知的Hadoopon
Docker项目以及其存在的问题。
我的项目参考了alvinhenrick/hadoop-mutinode项目,不过我做了大量的优化和重构。alvinhenrick/hadoop-mutinode项目的GitHub主页以及作者所写的博客地址如下:
GitHub:Hadoop(YARN)MultinodeClusterwithDocker
博客:Hadoop(YARN)MultinodeClusterwithDocker
下面两个表是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脚本实现自动化。这样使得整个项目的使用以及开发都变得非常方便快捷。
开发测试环境
操作系统:ubuntu14.04和ubuntu12.04
内核版本:3.13.0-32-generic
Docker版本:1.5.0和1.6.2
小伙伴们,硬盘不够,内存不够,尤其是内核版本过低会导致运行失败。
二.镜像简介
本项目一共开发了4个镜像:
serf-dnsmasq
hadoop-base
hadoop-master
hadoop-slave
serf-dnsmasq镜像
基于ubuntu:15.04(选它是因为它最小,不是因为它最新)
安装serf:serf是一个分布式的机器节点管理工具。它可以动态地发现所有Hadoop集群节点。
安装dnsmasq:dnsmasq作为轻量级的DNS服务器。它可以为Hadoop集群提供域名解析服务。
容器启动时,master节点的IP会传给所有slave节点。serf会在container启动后立即启动。slave节点上的serf
agent会马上发现master节点(master
IP它们都知道嘛),master节点就马上发现了所有slave节点。然后它们之间通过互相交换信息,所有节点就能知道其他所有节点的存在了。
(Everyonewillknow
Everyone)。serf发现新的节点时,就会重新配置dnsmasq,然后重启dnsmasq。所以dnsmasq就能够解析集群的所有节点的域名
啦。这个过程随着节点的增加会耗时更久,因此,若配置的Hadoop节点比较多,则在启动容器后需要测试serf是否发现了所有节点,DNS是否能够解析
所有节点域名。稍等片刻才能启动Hadoop。这个解决方案是由SequenceIQ公司提出的,该公司专注于将Hadoop运行在Docker中。参考
这个演讲稿。
hadoop-base镜像
基于serf-dnsmasq镜像
安装JDK(OpenJDK)
安装openssh-server,配置无密码SSH
安装vim:介样就可以愉快地在容器中敲代码了
安装Hadoop2.3.0:安装编译过的Hadoop(2.5.2,2.6.0,2.7.0都比2.3.0大,所以我懒得升级了)
另外,编译Hadoop的步骤请参考我的博客。
如果需要重新开发我的hadoop-base,需要下载编译过的hadoop-2.3.0安装包,放到hadoop-cluster-docker/hadoop-base/files目录内。我编译的64位hadoop-2.3.0下载地址:
另外,我还编译了64位的Hadoop2.5.2、2.6.0,、2.7.0,其下载地址如下:
hadoop-2.3.0:
hadoop-2.5.2:
hadoop-2.6.0:
hadoop-2.7.0:
hadoop-master镜像
基于hadoop-base镜像
配置hadoop的master节点
格式化namenode
这一步需要配置slaves文件,而slaves文件需要列出所有节点的域名或者IP。因此,Hadoop节点数目不同时,slaves文件自然也
不一样。因此,更改Hadoop集群节点数目时,需要修改slaves文件然后重新构建hadoop-master镜像。我编写了一个resize-
cluster.sh脚本自动化这一过程。仅需给定节点数目作为脚本参数就可以轻松实现Hadoop集群节点数目的更改。由于hadoop-master
镜像仅仅做一些配置工作,也无需下载任何文件,整个过程非常快,1分钟就足够了。
hadoop-slave镜像
基于hadoop-base镜像
配置hadoop的slave节点
镜像大小分析
下表为sudodockerimages的运行结果:
易知以下几个结论:
serf-dnsmasq镜像在ubuntu:15.04镜像的基础上增加了75.4MB
hadoop-base镜像在serf-dnsmasq镜像的基础上增加了570.7MB
hadoop-master和hadoop-slave镜像在hadoop-base镜像的基础上大小几乎没有增加
下表为sudodockerhistoryindex.alauda.cn/kiwenlau/hadoop-base:0.1.0的部分运行结果
可知:
基础镜像ubuntu:15.04为131.3MB
安装OpenJDK需要324.6MB
安装Hadoop需要158.5MB
Ubuntu、OpenJDK与Hadoop均为镜像所必须,三者一共占了614.4MB
因此,我所开发的hadoop镜像以及接近最小,优化空间已经很小了。
三.3节点Hadoop集群搭建步骤
1.拉取镜像
sudodockerpullindex.alauda.cn/kiwenlau/hadoop-master:0.1.0sudodockerpullindex.alauda.cn/kiwenlau/hadoop-slave:0.1.0sudodockerpullindex.alauda.cn/kiwenlau/hadoop-base:0.1.0sudodockerpullindex.alauda.cn/kiwenlau/serf-dnsmasq:0.1.0
3~5分钟OK~也可以直接从我的DokcerHub仓库中拉取镜像,这样就可以跳过第2步:
sudodockerpullkiwenlau/hadoop-master:0.1.0sudodockerpullkiwenlau/hadoop-slave:0.1.0sudodockerpullkiwenlau/hadoop-base:0.1.0sudodockerpullkiwenlau/serf-dnsmasq:0.1.0
查看下载的镜像:
sudodockerimages
运行结果:
其中hadoop-base镜像是基于serf-dnsmasq镜像的,hadoop-slave镜像和hadoop-master镜像都是基于hadoop-base镜像。所以其实4个镜像一共也就777.4MB。
2.修改镜像tag
/hadoop-slave:0.1./hadoop-master:0.1./hadoop-base:0.1./serf-dnsmasq:0.1.0
查看修改tag后镜像:
sudodockerimages
运行结果:
之所以要修改镜像,是因为我默认是将镜像上传到Dockerhub,
因此Dokerfile以及shell脚本中得镜像名称都是没有alauada前缀的,sorryfor
this....不过改tag还是很快滴。若直接下载我在DockerHub中的镜像,自然就不需要修改tag...不过Alauda镜像下载速度很快的
哈~
3.下载源代码
gitclonehttps://github.com/kiwenlau/hadoop-cluster-docker
为了防止GitHub被XX,我把代码导入到了开源中国的Git仓库:
gitclonehttp://git.oschina.net/kiwenlau/hadoop-cluster-docker
4.运行容器
cdhadoop-cluster-docker./start-container.sh
运行结果:
startmastercontainer...startslave1container...startslave2container...root@master:~#
一共开启了3个容器,1个master,2个slave。开启容器后就进入了master容器root用户的根目录(/root)。
查看master的root用户家目录的文件:
ls
运行结果:
hdfsrun-wordcount.shserf_logstart-hadoop.shstart-ssh-serf.sh
start-hadoop.sh是开启hadoop的shell脚本,run-wordcount.sh是运行wordcount的shell脚本,可以测试镜像是否正常工作。
5.测试容器是否正常启动(此时已进入master容器)
查看hadoop集群成员:
serfmembers
运行结果:
master.kiwenlau.com172.17.0.65:7946aliveslave1.kiwenlau.com172.17.0.66:7946aliveslave2.kiwenlau.com172.17.0.67:7946alive
若结果缺少节点,可以稍等片刻,再执行“serfmembers”命令。因为serfagent需要时间发现所有节点。
测试ssh:
sshslave2.kiwenlau.com
运行结果:
Warning:Permanentlyadded'slave2.kiwenlau.com,172.17.0.67'(ECDSA)tothelistofknownhosts.WelcometoUbuntu15.04(GNU/linux3.13.0-53-genericx86_64)*Documentation:https://help.ubuntu.com/;n/usr/share/doc/*/right.,.root@slave2:~#
退出slave2:
exit
运行结果:
logoutConnectiontoslave2.kiwenlau.comclosed.
若ssh失败,请稍等片刻再测试,因为dnsmasq的dns服务器启动需要时间。测试成功后,就可以开启Hadoop集群了!其实你也可以不进行测试,开启容器后耐心等待一分钟即可!
6.开启Hadoop
./start-hadoop.sh
上一步ssh到slave2之后,请记得回到master啊!运行结果太多,忽略,Hadoop的启动速度取决于机器性能....
7.运行wordcount
./run-wordcount.sh
运行结果:
inputfile1.txt:HelloHadoopinputfile2.txt:HelloDockerwordcountoutput:Docker1Hadoop1Hello2
wordcount的执行速度取决于机器性能....
四.N节点Hadoop集群搭建步骤
1.准备工作
参考第二部分1~3:下载镜像,修改tag,下载源代码
注意,你可以不下载serf-dnsmasq,但是请最好下载hadoop-base,因为hadoop-master是基于hadoop-base构建的。
2.重新构建hadoop-master镜像
./resize-cluster.sh5
不要担心,1分钟就能搞定
你可以为resize-cluster.sh脚本设不同的正整数作为参数数1,2,3,4,5,6...
3.启动容器
./start-container.sh5
你可以为resize-cluster.sh脚本设不同的正整数作为参数数1,2,3,4,5,6...
这个参数呢,最好还是得和上一步的参数一致:)
这个参数如果比上一步的参数大,你多启动的节点,Hadoop不认识它们..
这个参数如果比上一步的参数小,Hadoop觉得少启动的节点挂掉了..
4.测试工作
参考第三部分5~7:测试容器,开启Hadoop,运行wordcount
请注意,若节点增加,请务必先测试容器,然后再开启Hadoop,因为serf可能还没有发现所有节点,而dnsmasq的DNS服务器表示还没有配置好服务
2. 从零开始怎么写android native service
在Android里面,init程序会解析 Init.rc文件,然后启动很多Native Service。如何查看这些service的状态呢,查看init的源代码,发现所有的native service的信息都会保存到系统属性里面。这样就可以用下面的命令查看各个Service的状态。
# getprop |grep init.svc
getprop |grep init.svc
[init.svc.servicemanager]: [running]
[init.svc.vold]: [running]
[init.svc.netd]: [running]
[init.svc.debuggerd]: [running]
[init.svc.omsril-daemon]: [running]
[init.svc.sdm]: [running]
[init.svc.zygote]: [running]
[init.svc.media]: [running]
[init.svc.dbus]: [running]
[init.svc.installd]: [running]
[init.svc.keystore]: [running]
[init.svc.lapisrv]: [running]
[init.svc.console]: [running]
[init.svc.tcmd-autolaunch]: [stopped]
[init.svc.tel]: [stopped]
[init.svc.pxa920-setup]: [stopped]
[init.svc.logcat]: [running]
[init.svc.logcat-radio]: [running]
[init.svc.dnsmasq]: [running]
[init.svc.powerpolicy]: [stopped]
[init.svc.adbd]: [running]
[init.svc.telserver]: [stopped]
[init.svc.bootanim]: [stopped]
[init.svc.fmradiod]: [stopped]
[init.svc.wpa_supplicant]: [running]
[init.svc.dhcpcd]: [running]
3. 如何编译 dnsmasq
一、将log记录到syslog中
开启之后,dnsmasq源代码中自带的调试信息会记录到syslog中,此方式依赖于syslog功能,命令如下:
dnsmasq --addn-host=/var/dnsmasq.hosts --log-queries
二、将log记录到文件中
开启之后,dnsmasq源代码中自带的调试信息会记录到指定的文件中,命令如下:
dnsmasq --addn-host=/var/dnsmasq.hosts --log-facility /tmp/dnsmasq.log --log-queries
三、增加自己的打印到串口中
如果源码自带的调试打印不能满足需求,需要增加自己的打印,直接打印到串口,命令如下:
dnsmasq --addn-host=/var/dnsmasq.hosts --no-daemon
此命令指定前台运行,如果要后台,需要增加&
4. 如何基于Docker快速搭建多节点Hadoop集群
一.项目简介
GitHub:kiwanlau/hadoop-cluster-docker
直接用机器搭建Hadoop集群是一个相当痛苦的过程,尤其对初学者来说。他们还没开始跑wordcount,可能就被这个问题折腾的体无完肤了。而且也不是每个人都有好几台机器对吧。你可以尝试用多个虚拟机搭建,前提是你有个性能杠杠的机器。
我的目标是将Hadoop集群运行在Docker容器中,使Hadoop开发者能够快速便捷地在本机搭建多节点的Hadoop集群。其实这个想法已
经有了不少实现,但是都不是很理想,他们或者镜像太大,或者使用太慢,或者使用了第三方工具使得使用起来过于复杂。下表为一些已知的Hadoopon
Docker项目以及其存在的问题。
我的项目参考了alvinhenrick/hadoop-mutinode项目,不过我做了大量的优化和重构。alvinhenrick/hadoop-mutinode项目的GitHub主页以及作者所写的博客地址如下:
GitHub:Hadoop(YARN)MultinodeClusterwithDocker
博客:Hadoop(YARN)MultinodeClusterwithDocker
下面两个表是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脚本实现自动化。这样使得整个项目的使用以及开发都变得非常方便快捷。
开发测试环境
操作系统:ubuntu14.04和ubuntu12.04
内核版本:3.13.0-32-generic
Docker版本:1.5.0和1.6.2
小伙伴们,硬盘不够,内存不够,尤其是内核版本过低会导致运行失败。
二.镜像简介
本项目一共开发了4个镜像:
serf-dnsmasq
hadoop-base
hadoop-master
hadoop-slave
serf-dnsmasq镜像
基于ubuntu:15.04(选它是因为它最小,不是因为它最新)
安装serf:serf是一个分布式的机器节点管理工具。它可以动态地发现所有Hadoop集群节点。
安装dnsmasq:dnsmasq作为轻量级的DNS服务器。它可以为Hadoop集群提供域名解析服务。
容器启动时,master节点的IP会传给所有slave节点。serf会在container启动后立即启动。slave节点上的serf
agent会马上发现master节点(master
IP它们都知道嘛),master节点就马上发现了所有slave节点。然后它们之间通过互相交换信息,所有节点就能知道其他所有节点的存在了。
(Everyonewillknow
Everyone)。serf发现新的节点时,就会重新配置dnsmasq,然后重启dnsmasq。所以dnsmasq就能够解析集群的所有节点的域名
啦。这个过程随着节点的增加会耗时更久,因此,若配置的Hadoop节点比较多,则在启动容器后需要测试serf是否发现了所有节点,DNS是否能够解析
所有节点域名。稍等片刻才能启动Hadoop。这个解决方案是由SequenceIQ公司提出的,该公司专注于将Hadoop运行在Docker中。参考
这个演讲稿。
hadoop-base镜像
基于serf-dnsmasq镜像
安装JDK(OpenJDK)
安装openssh-server,配置无密码SSH
安装vim:介样就可以愉快地在容器中敲代码了
安装Hadoop2.3.0:安装编译过的Hadoop(2.5.2,2.6.0,2.7.0都比2.3.0大,所以我懒得升级了)
另外,编译Hadoop的步骤请参考我的博客。
如果需要重新开发我的hadoop-base,需要下载编译过的hadoop-2.3.0安装包,放到hadoop-cluster-docker/hadoop-base/files目录内。我编译的64位hadoop-2.3.0下载地址:
另外,我还编译了64位的Hadoop2.5.2、2.6.0,、2.7.0,其下载地址如下:
hadoop-2.3.0:
hadoop-2.5.2:
hadoop-2.6.0:
hadoop-2.7.0:
hadoop-master镜像
基于hadoop-base镜像
配置hadoop的master节点
格式化namenode
这一步需要配置slaves文件,而slaves文件需要列出所有节点的域名或者IP。因此,Hadoop节点数目不同时,slaves文件自然也
不一样。因此,更改Hadoop集群节点数目时,需要修改slaves文件然后重新构建hadoop-master镜像。我编写了一个resize-
cluster.sh脚本自动化这一过程。仅需给定节点数目作为脚本参数就可以轻松实现Hadoop集群节点数目的更改。由于hadoop-master
镜像仅仅做一些配置工作,也无需下载任何文件,整个过程非常快,1分钟就足够了。
hadoop-slave镜像
基于hadoop-base镜像
配置hadoop的slave节点
镜像大小分析
下表为sudodockerimages的运行结果:
易知以下几个结论:
serf-dnsmasq镜像在ubuntu:15.04镜像的基础上增加了75.4MB
hadoop-base镜像在serf-dnsmasq镜像的基础上增加了570.7MB
hadoop-master和hadoop-slave镜像在hadoop-base镜像的基础上大小几乎没有增加
下表为sudodockerhistoryindex.alauda.cn/kiwenlau/hadoop-base:0.1.0的部分运行结果
可知:
基础镜像ubuntu:15.04为131.3MB
安装OpenJDK需要324.6MB
安装Hadoop需要158.5MB
Ubuntu、OpenJDK与Hadoop均为镜像所必须,三者一共占了614.4MB
因此,我所开发的hadoop镜像以及接近最小,优化空间已经很小了。
三.3节点Hadoop集群搭建步骤
1.拉取镜像
sudodockerpullindex.alauda.cn/kiwenlau/hadoop-master:0.1.0sudodockerpullindex.alauda.cn/kiwenlau/hadoop-slave:0.1.0sudodockerpullindex.alauda.cn/kiwenlau/hadoop-base:0.1.0sudodockerpullindex.alauda.cn/kiwenlau/serf-dnsmasq:0.1.0
3~5分钟OK~也可以直接从我的DokcerHub仓库中拉取镜像,这样就可以跳过第2步:
sudodockerpullkiwenlau/hadoop-master:0.1.0sudodockerpullkiwenlau/hadoop-slave:0.1.0sudodockerpullkiwenlau/hadoop-base:0.1.0sudodockerpullkiwenlau/serf-dnsmasq:0.1.0
查看下载的镜像:
sudodockerimages
运行结果:
其中hadoop-base镜像是基于serf-dnsmasq镜像的,hadoop-slave镜像和hadoop-master镜像都是基于hadoop-base镜像。所以其实4个镜像一共也就777.4MB。
2.修改镜像tag
/hadoop-slave:0.1./hadoop-master:0.1./hadoop-base:0.1./serf-dnsmasq:0.1.0
查看修改tag后镜像:
sudodockerimages
运行结果:
之所以要修改镜像,是因为我默认是将镜像上传到Dockerhub,
因此Dokerfile以及shell脚本中得镜像名称都是没有alauada前缀的,sorryfor
this....不过改tag还是很快滴。若直接下载我在DockerHub中的镜像,自然就不需要修改tag...不过Alauda镜像下载速度很快的
哈~
3.下载源代码
gitclonehttps://github.com/kiwenlau/hadoop-cluster-docker
为了防止GitHub被XX,我把代码导入到了开源中国的Git仓库:
gitclonehttp://git.oschina.net/kiwenlau/hadoop-cluster-docker
4.运行容器
cdhadoop-cluster-docker./start-container.sh
运行结果:
startmastercontainer...startslave1container...startslave2container...root@master:~#
一共开启了3个容器,1个master,2个slave。开启容器后就进入了master容器root用户的根目录(/root)。
查看master的root用户家目录的文件:
ls
运行结果:
hdfsrun-wordcount.shserf_logstart-hadoop.shstart-ssh-serf.sh
start-hadoop.sh是开启hadoop的shell脚本,run-wordcount.sh是运行wordcount的shell脚本,可以测试镜像是否正常工作。
5.测试容器是否正常启动(此时已进入master容器)
查看hadoop集群成员:
serfmembers
运行结果:
master.kiwenlau.com172.17.0.65:7946aliveslave1.kiwenlau.com172.17.0.66:7946aliveslave2.kiwenlau.com172.17.0.67:7946alive
若结果缺少节点,可以稍等片刻,再执行“serfmembers”命令。因为serfagent需要时间发现所有节点。
测试ssh:
sshslave2.kiwenlau.com
运行结果:
Warning:Permanentlyadded'slave2.kiwenlau.com,172.17.0.67'(ECDSA)tothelistofknownhosts.WelcometoUbuntu15.04(GNU/Linux3.13.0-53-genericx86_64)*Documentation:https://help.ubuntu.com/;n/usr/share/doc/*/right.,.root@slave2:~#
退出slave2:
exit
运行结果:
logoutConnectiontoslave2.kiwenlau.comclosed.
若ssh失败,请稍等片刻再测试,因为dnsmasq的dns服务器启动需要时间。测试成功后,就可以开启Hadoop集群了!其实你也可以不进行测试,开启容器后耐心等待一分钟即可!
6.开启Hadoop
./start-hadoop.sh
上一步ssh到slave2之后,请记得回到master啊!运行结果太多,忽略,Hadoop的启动速度取决于机器性能....
7.运行wordcount
./run-wordcount.sh
运行结果:
inputfile1.txt:HelloHadoopinputfile2.txt:HelloDockerwordcountoutput:Docker1Hadoop1Hello2
wordcount的执行速度取决于机器性能....
四.N节点Hadoop集群搭建步骤
1.准备工作
参考第二部分1~3:下载镜像,修改tag,下载源代码
注意,你可以不下载serf-dnsmasq,但是请最好下载hadoop-base,因为hadoop-master是基于hadoop-base构建的。
2.重新构建hadoop-master镜像
./resize-cluster.sh5
不要担心,1分钟就能搞定
你可以为resize-cluster.sh脚本设不同的正整数作为参数数1,2,3,4,5,6...
3.启动容器
./start-container.sh5
你可以为resize-cluster.sh脚本设不同的正整数作为参数数1,2,3,4,5,6...
这个参数呢,最好还是得和上一步的参数一致:)
这个参数如果比上一步的参数大,你多启动的节点,Hadoop不认识它们..
这个参数如果比上一步的参数小,Hadoop觉得少启动的节点挂掉了..
4.测试工作
参考第三部分5~7:测试容器,开启Hadoop,运行wordcount
5. 如何将dockerhub与github关联
一.项目简介GitHub:kiwanlau/hadoop-cluster-docker直接用机器搭建Hadoop集群是一个相当痛苦的过程,尤其对初学者来说。他们还没开始跑wordcount,可能就被这个问题折腾的体无完肤了。而且也不是每个人都有好几台机器对吧。你可以尝试用多个虚拟机搭建,前提是你有个性能杠杠的机器。我的目标是将Hadoop集群运行在Docker容器中,使Hadoop开发者能够快速便捷地在本机搭建多节点的Hadoop集群。其实这个想法已经有了不少实现,但是都不是很理想,他们或者镜像太大,或者使用太慢,或者使用了第三方工具使得使用起来过于复杂。下表为一些已知的HadooponDocker项目以及其存在的问题。我的项目参考了alvinhenrick/hadoop-mutinode项目,不过我做了大量的优化和重构。alvinhenrick/hadoop-mutinode项目的GitHub主页以及作者所写的博客地址如下:GitHub:Hadoop(YARN)MultinodeClusterwithDocker博客:Hadoop(YARN)MultinodeClusterwithDocker下面两个表是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脚本实现自动化。这样使得整个项目的使用以及开发都变得非常方便快捷。开发测试环境操作系统:ubuntu14.04和ubuntu12.04内核版本:3.13.0-32-genericDocker版本:1.5.0和1.6.2小伙伴们,硬盘不够,内存不够,尤其是内核版本过低会导致运行失败。二.镜像简介本项目一共开发了4个镜像:serf-dnsmasqhadoop-basehadoop-masterhadoop-slaveserf-dnsmasq镜像基于ubuntu:15.04(选它是因为它最小,不是因为它最新)安装serf:serf是一个分布式的机器节点管理工具。它可以动态地发现所有Hadoop集群节点。安装dnsmasq:dnsmasq作为轻量级的DNS服务器。它可以为Hadoop集群提供域名解析服务。容器启动时,master节点的IP会传给所有slave节点。serf会在container启动后立即启动。slave节点上的serfagent会马上发现master节点(masterIP它们都知道嘛),master节点就马上发现了所有slave节点。然后它们之间通过互相交换信息,所有节点就能知道其他所有节点的存在了。(EveryonewillknowEveryone)。serf发现新的节点时,就会重新配置dnsmasq,然后重启dnsmasq。所以dnsmasq就能够解析集群的所有节点的域名啦。这个过程随着节点的增加会耗时更久,因此,若配置的Hadoop节点比较多,则在启动容器后需要测试serf是否发现了所有节点,DNS是否能够解析所有节点域名。稍等片刻才能启动Hadoop。这个解决方案是由SequenceIQ公司提出的,该公司专注于将Hadoop运行在Docker中。参考这个演讲稿。hadoop-base镜像基于serf-dnsmasq镜像安装JDK(OpenJDK)安装openssh-server,配置无密码SSH安装vim:介样就可以愉快地在容器中敲代码了安装Hadoop2.3.0:安装编译过的Hadoop(2.5.2,2.6.0,2.7.0都比2.3.0大,所以我懒得升级了)另外,编译Hadoop的步骤请参考我的博客。如果需要重新开发我的hadoop-base,需要下载编译过的hadoop-2.3.0安装包,放到hadoop-cluster-docker/hadoop-base/files目录内。我编译的64位hadoop-2.3.0下载地址:closed.若ssh失败,请稍等片刻再测试,因为dnsmasq的dns服务器启动需要时间。测试成功后,就可以开启Hadoop集群了!其实你也可以不进行测试,开启容器后耐心等待一分钟即可!6.开启Hadoop./start-hadoop.sh上一步ssh到slave2之后,请记得回到master啊!运行结果太多,忽略,Hadoop的启动速度取决于机器性能.7.运行wordcount./run-wordcount.sh运行结果:inputfile1.txt:HelloHadoopinputfile2.txt:HelloDockerwordcountoutput:Docker1Hadoop1Hello2wordcount的执行速度取决于机器性能.四.N节点Hadoop集群搭建步骤1.准备工作参考第二部分1~3:下载镜像,修改tag,下载源代码注意,你可以不下载serf-dnsmasq,但是请最好下载hadoop-base,因为hadoop-master是基于hadoop-base构建的。2.重新构建hadoop-master镜像./resize-cluster.sh5不要担心,1分钟就能搞定你可以为resize-cluster.sh脚本设不同的正整数作为参数数1,2,3,4,5,63.启动容器./start-container.sh5你可以为resize-cluster.sh脚本设不同的正整数作为参数数1,2,3,4,5,6这个参数呢,最好还是得和上一步的参数一致:)这个参数如果比上一步的参数大,你多启动的节点,Hadoop不认识它们..这个参数如果比上一步的参数小,Hadoop觉得少启动的节点挂掉了..4.测试工作参考第三部分5~7:测试容器,开启Hadoop,运行wordcount
6. android源码编译问题请帮帮忙,该怎么解决
build/core/executable_internal.mk这个编译文件的第69行报错。你看下里面的代码是在干嘛?实在看不出什么问题的话,make clean再make
7. openwrt设置奈飞分流
OpenWRT科学上网自动分流主要是利用了如下几个工具:iptables、ipset、dnsmasq、pdnsd。
OpenWrt项目由2004年1月开始,第一个版本是基于Linksys提供的GPL源码及uclibc中的buildroot项目,这个版本称为"stable"版,在网上至今仍有很多项目使用这个版本,较为有名Freifunk-Firmware和Sip@Home。
8. dnscrypt和opendns能一起用吗
DNSCrypt刚问世的时候,官方公布它只是一款Mac才能用的工具,但根据最近一篇由OpenDNS发的文章表明,虽然还没有用户界面,但其实当Mac版DNSCrypt推出的时候源码已经放到了Github上了, Linux的用户也可以安装以及使用哦!(LCTT译注:目前已经有DNSCrypt WinClient、DNSCrypt Windows Service Manager、DNSCrypt OSXClient 和 DNSCrypt Tools for Linux 等第三方图形界面客户端出现。)
为神马要使用 DNSCrypt?
DNSCrypt可以加密您电脑与OpenDNS服务器的所有通信,加密可以防止中间人攻击,信息窥觑,DNS劫持。更能防止网络供应商对某些网站的封锁。
这是世界上第一款加密DNS通信的工具,虽然TOR可以加密DNS的请求,但毕竟它们只是在出口节点加密而已。
这款工具并不需要对域名或其工作方式做任何的改变,它只是提供了个该工具的用户与机房里的DNS服务器之间的加密方式而已。
您可以在GitHub的OpenSND DNSCrypt页面阅读更多的相关信息。
如何在Linux使用DNSCrypt
首先下载安装DNSCrypt (LCTT译注,安装过程不详述,请参照官网描述), 然后在Terminal里输入这个命令:
sudo /usr/sbin/dnscrypt-proxy --daemonize
然后把您的DNS服务器调成"127.0.0.1" - 在GNOME界面下的话,只要到Network Connections(网络连接)选项然后选择"Edit"并在"DNS servers"输入"127.0.0.1"就好了。如果您用的是DHCP的话,请选择Automatic (DHCP) addresses only", 这样的话才能输入DNS服务器。然后只要重连网络便可。
您可以访问这条链接来测试您连接到了OpenDNS了没。
如果您想设置开机启动DNSCrypt,可以自建一个init的脚本,如果您用的是Ubuntu,可以参考下面的。
Arch Linux的用户可以通过AUR来安装DNSCrypt-proxy (内含rc.d脚本)
Ubuntu下的DNSCrypt
如果您想在Ubuntu设置开机启动,您可以使用这个Upstart脚本。
注: 在Ubuntu 12.04版在127.0.0.1有个本地的DNS cache 服务器(dnsmasq)在跑,所以已经把改脚本改成让DNSCrypt使用127.0.0.2了, 所以按照上面的教程,应该把127.0.0.1换成127.0.0.2了。
要安装此脚本请使用以下的指令(要首先解压下下来的压缩文件):
sudo cp dnscrypt.conf /etc/init/
sudo ln -s /lib/init/upstart-job /etc/init.d/dnscrypt
然后用这个指令来启动:
sudo start dnscrypt
现在DNSCrypt就应该是开机自启了,如果您想停止的话,可以使用:
sudo stop dnscrypt
9. linux virbr0是什么
virbr0 是一种虚拟网络接口,这是由于安装和启用了 libvirt 服务后生成的,libvirt 在服务器(host)上生成一个 virtual network switch (virbr0),host 上所有的虚拟机(guests)通过这个 virbr0 连起来。默认情况下 virbr0 使用的是 NAT 模式(采用 IP Masquerade),所以这种情况下 guest 通过 host 才能访问外部。
拓展资料:
Linux操作系统,是一种计算机操作系统,中文读法大致一般为“哩内克斯”,但真正的读法应为“哩纳克斯”。Linux操作系统的内核的名字也是“Linux”。Linux操作系统也是自由软件和开放源代码发展中最着名的例子。
简单地说,Linux是一套免费使用和自由传播的类Unix操作系统,它主要用于基于Intelx86系列CPU的计算机上。这个系统是由世界各地的成千上万的程序员设计和实现的。其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的 Unix兼容产品。
Linux的出现,最早开始于一位名叫Linus Torvalds的计算机业余爱好者,当时他是芬兰赫尔辛基大学的学生。他的目的是想设计一个代替Minix(是由一位名叫Andrew Tannebaum的计算机教授编写的一个操作系统示教程序)的操作系统,这个操作系统可用于386、486或奔腾处理器的个人计算机上,并且具有 Unix操作系统的全部功能,因而开始了Linux雏形的设计。
10. 同等硬件下,windows和linux哪个更快
一般情况下Linux更快一点,这个系统一般用于服务器,就是因为他的速度快而且是免费的系统,开放源代码,技术人员可以随意在其基础上编写符合自己要求的系统