Hadoop快速上手
主要参照这个:https://www.linode.com/docs/databases/hadoop/how-to-install-and-set-up-hadoop-cluster/
官方文档不花花绿绿的,不好看
然后就是后期遇到的一些小问题:
-
所有服务器都要改
/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节点显示异常。 -
注意
iptables
防火墙可能导致文件存储失败。懒人模式:iptables -F
。生产环境千万别用! -
一定要记得在yarn中显式声明主节点的域名,否则yarn可能认为集群中无节点:https://stackoverflow.com/questions/32727675/slave-nodes-not-in-yarn-resourcemanager
原理是yarn中默认的访问主节点的地址是
0.0.0.0
,仔细想想也会发现根本不可能访问到任何东西= = -
如果
因为你的电脑很穷酸所以需要限制单次任务中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> # 取文件出来