资讯专栏INFORMATION COLUMN

我的服务器养成计划 -- hadoop搭建

Donne / 2065人阅读

摘要:起因在一周前,突然心血来潮,想整理一下我的服务器群,我放下一个暂时在研究的库,开始研究其实就是一开始脑抽了,想搭个分布式文件系统用来共享数据而已,后来选了因为可以顺便做做云计算于是就开始了每天数小时的搭建旅程当时我有的服务器代理服务器上面挂

起因

在一周前,突然心血来潮,想整理一下我的服务器群,我放下一个暂时在研究的node库,开始研究hadoop(其实就是一开始脑抽了,想搭个分布式文件系统用来共享数据而已,后来选了hdfs,因为可以顺便做做云计算)

于是就开始了每天数小时的搭建旅程


当时我有的服务器:

代理服务器 : 上面挂着一个 shadowsock 服务器,作为我的日常梯子

主服务器 : 测试性的挂了个gitlab ,本来预期放个人页面

数据服务器 : 上面挂了个 mongo,mysql,redis

全部机器统一配置:

单核,不明型号cpu(其实我忘了)

1g内存 (你知道有多心累吗)

硬盘30g(测了一下写入的,60m/s ಠ_ಠ 慢)

centos 7.2

每台机器不同 子网,网速无限大乁( ˙ω˙ )厂 (上传,没测,下载:20m/s ),位置韩国,ping 延迟60-100ms,不过我连接过去速度并不高,看个720p 视频算是差不多了

第一天

单机helloworld

根据我之前搭 数据服务器 的经验,用docker搭建,速度妥妥的,而且还很舒服

先去docker 的 hub想找了一个star最多的hadoop镜像,直接安装了,然后开始跑数绵羊……哦不,数单词程序(给我的感觉就是 MapReduce 的helloworld)

…………(╯‵□′)╯︵┻━┻ 10分钟还没跑完,我都要睡着了
又过了一会,终于跑完了,起码算是成功了!!

然而……这一切只是开始…………

联机无法连接

一开始在我的数据服务器上面搭的,现在想扩展一下集群,就开始动手在代理服务器上面搭一个slave

我所看的教程:
http://www.powerxing.com/install-hadoop-cluster/
http://www.powerxing.com/install-hadoop-in-centos/

第一步:修改host

我的情况是 有一个外网IP,nat映射到本地的ip, 然后再docker 内部的ip.....恩,所以我经过hadoop的有三个ip

恩...算了,别人家是同一个子网的,我又不是,我直接挂域名就好了,让DNS解析解析,略过 ✌️

第二步:没密码SSH

我在docker 下载的镜像已经帮我搞得妥妥的,略过 ✌️

第三步: 配置文件

既然人家的docker 都能跑起来了,我觉得不用修改什么,修改了一下 主机地址:我的域名
修改一下 slaves 的文件,添加代理服务器的域名进去(代理服务器也跑了docker+hadoop)

第四步:启动

激动人心的时刻到了(^o^)/....启动........不了......what????

错误提示:XXXXX:9000 cannot assign requested address
(假装有图→_→)


在跑的过程中...被那1G内存虐死了..怒加虚拟内存..
在启动的时候,也是经过很多很多遍的一个一个情况的测试,跑得又慢,浪费了好多时间
当有一个解决方案,但已经到了睡觉时间了,闪

第二天

接着前一天,不能分配地址?9000?
然后jps一下,果然 namenode 没有启动...

过了良久(这里省略N字)....
好吧,设置了

//服务器集群还没做安全设置....,请允许我做个屏蔽
//core-site .xml

     fs.defaultFS
     hdfs://***.meislzhua.space:9000

因为这个ip 是 映射最外层的ip,在本机根本找到这个ip,所以绑定不了...
然后修改了host

vi /etc/hosts
127.0.0.1 ***.meislzhua.space

让本机 解析这个域名的时候,指向本地
启动,终于把namenode 启动了

打开 *.meislzhua.space:50070 的时候, live nodes = 0
(╯‵□′)╯︵┻━┻


这天的配置时间,就这样过去了,上午去 https://leetcode.com/ 做做算法,下午配置...
下午配置的期间,也用了很多时间去爬帖...
发现 docker 最多star 那个只是预览,只支持伪分布式,不知道直接挂成集群.....
但是我决定要这个里面改装下去!

第三天

第三天是反复浪费时间的....
因为反复修改配置重试,终于搞定了....伪分布式
主 从都在本地


第三天有事忙用时不是很多....,就是这样过了....

第四天

继续在代理服务器 上面搭slave

终于成功搭好 HDFS

所以打算的架构:
hadoop-namenode:数据服务器
hadoop-slave:数据服务器,代理服务器,主服务器

然后配置好以后,发现....
live nodes = 1
不用想了,肯定又是这个ip的问题 (╯‵□′)╯︵┻━┻

经过我不懈的努力
发现

vi /etc/hosts
127.0.0.1 ***.meislzhua.space

绑定 127.0.0.1 是不可以对外的!!!! 于是改成

vi /etc/hosts
0.0.0.0 ***.meislzhua.space

再打开 *.meislzhua.space:50070
live nodes = 3
感动啊/(ㄒoㄒ)/~~

放弃docker

经历这么久,终于搭好了了我的网盘...哦不,是HDFS _(:з」∠)_
但是发现 好像有点不对经... 我的一个主机 是有30G的, 现在3个才30G?

以为是分片的原因,一开始我修改成3了,以为就这样缩小3倍.....修改几次配置,重启,一样没有效果

最后在系统运行 df -hl 发现我的系统只有10G....
恩,这肯定是docker 的锅...

想到了几个方案:

将 docker 空间默认30G

在 服务器本地 新建一个文件夹,映射到 docker内部,再充当datanode 的数据目录

对于方案一
由于如果空间是 空间设置了30G,可能会造成 系统用了15G,而docker 内部只用了几G,而docker内部还不知道!继续写文件,会出错..
不采取

对于方案二
能延缓 方案一的问题,但是还没有解决,毕竟hdfs 写入过多的话,再在docker 系统里面写东西,也会报错,但是感觉几率会小很多

恩,所以我觉得也不采用方案二,直接抛弃了docker

重新搭建

同时又申请一个hadoop服务器,用这个来做namenode ,其他服务器都用来做slave....
同时namenode 服务器用开nfs 服务器,给我的电脑接上....
于是我的网盘就真的完成了!!!

内部文件共享

后来心血来潮,又开了一个 内部服务器,用来给集群共享文件
其实主要是想在内部服务器开一个nfs,然后把hadoop 文件夹共享出去,这样,只要其他服务器挂载这个目录就好啦,哈哈哈哈哈,而且不用跑每一台一台修改配置了

错误的修改1

于是 我把在内部服务器/usr/local/hadoop做成共享文件夹,挂到其他服务器中去.

        //hdfs-site.xml
        
        dfs.namenode.name.dir
        file:/usr/local/hadoop/tmp/dfs/name
    
    
        dfs.datanode.data.dir
        file:/usr/local/hadoop/tmp/dfs/data
    

那么问题来了 这样全部都指向 内部服务器的tmp文件夹了,于是我吧内部服务器的tmp 文件夹改了,改成link 文件,指向 /hadoop/tmp,然后每个服务器再建立的/hadoop/tmp就好了~
(或者修改配置文件的配置目录就好了,但是要手动一个一个移动,懒啊 _(:з」∠)_,于是就不修改了)

OK,搞定

后来想了一下,如果内部服务器挂了,读不了/usr/local/hadoop/tmp了....就整个集群挂了...哎

错误的修改2

不知道怎么脑抽了,只后来变成共享 /usr/local/hadoop/etc/ 这个文件,当每个hadoop节点都复制一份hadoop,然后再挂/usr/local/hadoop/etc/变成共享的...来统一修改配置

其实一开始修改配置目录就好了!!!


其实第四天还是学到挺多的东西的
参考到的网站:

hadoop 挂载 NFS : http://duguyiren3476.iteye.com/blog/2209242

linux 挂载 NFS : http://desert3.iteye.com/blog/1675522

hadoop 限额配置(虽然本文没提到) : http://blog.chinaunix.net/uid-20577907-id-3531548.html

第五天

又是一个被ip问题搞死的日子 (╯‵□′)╯︵┻━┻
能挂内网,就尽量挂内网吧....
或者 搞个什么DNS服务器啊,VPN服务器啊什么,也搞得我累了

开始测试

yarn jar hadoop-mapreduce-client-jobclient-2.7.2-tests.jar TestDFSIO -write -nrFiles 20 -fileSize 1024

提示 *.meislzhua.space/0.0.0.0 to *.meislzhuas.space:9000 connect refuse
居然自己给自己连接拒绝了...

我也懒得查什么原因了..(应该是我漏掌握的一些网络知识了,0.0.0.0 或者不能当源地址还是什么的)
直接改hosts吧,心累了

vi /etc/hosts
172.16.32.2 ***.meislzhua.space

172.16.32.2是本机网卡的ip地址,对外IP地址的请求,都会转发给它的(我怎么可能告诉你,这个ip是我乱写的_(:з」∠)_ )

又到报错时刻

再运行 yarn jar hadoop-mapreduce-client-jobclient-2.7.2-tests.jar TestDFSIO -write -nrFiles 20 -fileSize 1024 可以提交任务了

期间各种乱点 *.meislzhua.space:8088 中各种能点的东西,学会如何查看log,和各种不明不白的东西

发现上面这个代码,有一定几率出错!!!

点了 首页的 某个任务(其实不是任务,是application)的ID
(由于服务器还没时间做防护,所以暂时先不公布地址,打个马赛克)

当node 是 hadoop服务器 的时候,就全部链接不上了....map 全部链接了一个不对的地址上!

后来我推断(没有验证过)出,他是先拿ip地址 问DNS服务器,拿到域名之后,把这个得到的域名分发出去,生成各个子map任务

因为我的服务器的特殊性,他拿着172.16.32.2这个IP向DNS服务器拿域名,结果拿了一个乱七八糟的,其他slave不能识别的域名(这个是因为我的服务器环境的特殊性)

其他slaves 看到这个域名的时候 真的一脸懵逼了...一直连接,一直连接不上....

目测估计 上图中的 node 项,应该是 用来指挥的,随机挑选一个主机来 任务的进行指挥的,当是 hadoop服务器指挥的时候,解析 *.meislzhua.space 的时候,就解析出自己的内网ip了...然后再去DNS转换出一个乱七八糟的域名

当时能想到的方法:

改DNS为谷歌的

hadoop 服务器 就不要挂NodeManager.

方法一:
当给出一个内网的地址是,谷歌DNS也是一脸懵逼的...所以也是不行

只能执行方案二了.

然后一次无意中看log 的时候, 发现其他node 会连接172.16.32.2:50010,什么鬼啊!这个ip也会上传上去?我没有看源码,你不要欺负我... 50010 端口是datanode的端口
办法了,只能 也吧datanode 也去掉了

直接slaves的名单里面没有它了...

从此,一主4从 5个服务器 开始了辛苦快乐的生活,完结撒花 ~(≧≦)/~


用到的东西:

增删节点(虽然我是失败一半的):http://my.oschina.net/MrMichael/blog/291802?fromerr=5UYiEJvb

centos ip查域名工具: http://u.sanwen.net/subject/250517.html

虽然不知道有没有人看,但是你有问题,或者觉得我有问题都可以在下面留言~

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/9335.html

相关文章

  • Hadoop新手篇:hadoop入门基础教程

    摘要:新手篇入门基础教程关于的分享此前一直都是零零散散的想到什么就写什么,整体写的比较乱吧。上两周写的五篇内容,汇总到一起就算是新手入门的一个基础性教程吧持续更新中。应该在改版完成后就可以正常申请下载了。 Hadoop新手篇:hadoop入门基础教程关于hadoop的分享此前一直都是零零散散的想到什么就写什么,整体写的比较乱吧。最近可能还算好的吧,毕竟花了两周的时间详细的写完的了hadoop...

    levinit 评论0 收藏0
  • python大佬养成计划----socket实现TCP通信

    摘要:我们来编写一个简单的服务器程序,它接收客户端连接,回复客户端发来的请求。如果一切顺利,新浪的服务器接受了我们的连接,一个连接就建立起来的,后面的通信就是发送网页内容了。 TCP TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四...

    layman 评论0 收藏0
  • 【程序员】个人职业发展规划方法论分享(持续更新)

    摘要:文中涉及到的工具幕布插件番茄工作法助理原则原则是目标管理中的一种方法。作为职业发展规划的目标来说,一般人最好是制定一个中期的目标,时间长短在半年至三年内。所以这篇旨在分享我在做个人职业规划中的一些心得体会方法论思想等。 2019/07/14 UPDATE 本周想分享一下之前阅读过的一本书《坚持,一种可以养成的习惯》,这本书主要讲的是如何去养成一个习惯,在本次的初期职业目标的学习计划中,...

    h9911 评论0 收藏0
  • Hadoop掀起大数据革命 三巨头齐发力

    摘要:大数据革命正以为中心如火如荼的进行着。这个价格对于关系数据库部署每至美元来说极具竞争优势。三巨头大数据领域齐发力在上月美国拉斯维加斯举行年度大会上院士总架构师宣布将在明年推出内置技术的旗舰级数据库管理系统。 开源的数据处理平台凭借其低成本、高扩展性和灵活性的优势已经赢得了多数网络巨头的认可。现在Hadoop将进入更多企业。IBM将在明年推出内置NoSQL技术的DB2旗舰级数据库管理系统。上个...

    doodlewind 评论0 收藏0
  • PHP学习计划

    摘要:相关框架路由网络组件解析组件数据库对象生成器错误处理组件配置命令行工具简单容器注释解析组件文件处理基于数据存储日子处理基于模板引擎基于中间件单元测试中间件数据类型操作网络编程知识基础知识环境配置,内置服务器知识版本管理与代码注释命名空间日期 PHP 相关 FastD PHP Web框架 PHP路由 Swoole网络组件 PHPHttp解析组件 PHP数据库 PHP对象生成器 PHP错...

    shery 评论0 收藏0

发表评论

0条评论

Donne

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<