主要参照这个:https://www.linode.com/docs/databases/hadoop/how-to-install-and-set-up-hadoop-cluster/

官方文档不花花绿绿的,不好看

然后就是后期遇到的一些小问题:

  1. 所有服务器都要改/etc/hosts,但是主服务器master和从服务器slave的侧重点不完全一样。主服务器配hosts的目的是有效而顺利地访问从服务器(不然在hadoop配置文件里写一堆ip估计不见得很爽),所以要把其他服务器的ip都配置正确,本机解析为localhost问题也不大;从服务器的话,只需要与主服务器(以及自身)打交道,所以一定要把主服务器的hosts域名配置正确。不然可能的情况之一就是服务跑起来了,但是主服务器报告hdfs空间大小为0。这个问题可以在datanode的日志文件中看出来。

    另外一个是,最好把自身的hosts名称(在此称作域名)从localhost改一下,变成和主机访问的一致,不然在访问hadoop的网络管理界面时,它会把hosts中域名相同的删减到只剩一个。这个时候千万不要以为是节点没跑起来,别问我怎么知道的

    然而更为有效的方式是注释掉127.0.0.1::1两行,然后再修改/etc/hostname为设置的节点域名。这个更改可以通过hostname -f看出来,这样既可以让hdfs正常识别出datanode的名称,又能让yarn正常跑任务。我遇到的情况有两种:一是yarn任务一直失败,看容器日志可以发现子容器一直在访问不存在的本机RPC地址(调整yarn.app.mapreduce.am.env / mapreduce.map.env更改日志详细程度),然而这个访问本来应该是朝着ApplicationMaster所在节点发送的,这是ApplicationMaster所在节点把自身域名解析到127.0.0.1造成的;第二个是把localhost解析到127.0.0.1,这个会导致hdfs节点显示异常。

  2. 注意iptables防火墙可能导致文件存储失败。懒人模式:iptables -F生产环境千万别用!

  3. 一定要记得在yarn中显式声明主节点的域名,否则yarn可能认为集群中无节点:https://stackoverflow.com/questions/32727675/slave-nodes-not-in-yarn-resourcemanager

    原理是yarn中默认的访问主节点的地址是0.0.0.0,仔细想想也会发现根本不可能访问到任何东西= =

  4. 如果因为你的电脑很穷酸所以需要限制单次任务中yarn分配的内存的话,需要设置两个地方:https://stackoverflow.com/questions/24233963/hadoop-yarn-how-to-limit-requestedmemory

    一是yarn-site.xml中的yarn.scheduler.maximum-allocation-mb选项;

    二是mapred-site.xml中的yarn.app.mapreduce.am.resource.mb选项。

    注意需要确保后者不大于前者(非则就会报出无法分配资源的情况,因为最小申请大小大于最大分配大小)。

附带常用命令:

命令行查看当前hdfs集群状态:

hdfs dfsadmin -report

访问/修改hdfs内文件:

hdfs dfs -ls /  # 等价于ls /,注意这里好像加不了-al一类的参数
hdfs dfs -put <local_file> <hdfs_file>  # 传文件进去
hdfs dfs -get <hdfs_file> <local_file>  # 取文件出来

标签: none

添加新评论