当前位置:首页 » 操作系统 » dnsmasq源码

dnsmasq源码

发布时间: 2022-06-19 10:57:53

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更快一点,这个系统一般用于服务器,就是因为他的速度快而且是免费的系统,开放源代码,技术人员可以随意在其基础上编写符合自己要求的系统

热点内容
解压分卷失败 发布:2024-11-07 18:32:56 浏览:974
oracle导出数据库表数据 发布:2024-11-07 18:24:57 浏览:449
java新建文件夹 发布:2024-11-07 18:24:21 浏览:640
服务的mysql脚本引导不上 发布:2024-11-07 18:19:25 浏览:878
win7下载文件夹恢复 发布:2024-11-07 18:18:36 浏览:221
酷狗号密码忘了怎么办 发布:2024-11-07 18:03:13 浏览:87
mupdf编译 发布:2024-11-07 18:02:58 浏览:32
sql时间筛选 发布:2024-11-07 17:59:53 浏览:860
为什么开机密码老不对 发布:2024-11-07 17:49:41 浏览:228
java源码编译 发布:2024-11-07 17:34:59 浏览:916