Linux下Hadoop使用
概览
记录Hadoop安装使用过程遇到的问题与解决方案。因为在公司都是使用搭建好的集群,所以一般没有什么配置上的问题.这里主要记录在自己搭建的伪分布式集群中遇到的问题.
报错:Connection refused
运行hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep input output 'dfs[a-z.]+'
报的错。
注意执行操作之前要先启动Hadoop,可以通过start-dfs.sh
或者start-all.sh
[^1]。原因就是Hadoop未启动成功,通过jps
看到namenode
并未启动。比较奇怪的是安装的时候测试还是可以的,而且是完全按照官方文档来的。
问题就在官方文档…林子雨老师的Hadoop3.1.3安装教程提到了这点:
1 | Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件),因此如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项。 |
也就是说我们按照官网的方法配置core-site.xml
与hdfs-site.xml
的话,重启的时候必须重新format
,否则就无法启动namenode
!谁没事每次启动都去格式化依次,太坑了Orz
按照林子雨老师的方法配置就不会出现这个问题。对core-site.xml
配置如下
1 | <configuration> |
对hdfs-site.xml
配置如下
1 | <configuration> |
因为林老师是将Hadoop放在/usr/local
, 而我是在/home/shensir/Application
,所以将上面的/usr/local
部分替换为/home/shensir/Application
即可。
另外一点就是HDFS网页的访问地址在Linux是http://localhost:9870
,好像也有的是50070
端口的。我这里测试是前者。
报错:Retrying connect to server: 0.0.0.0/0.0.0.0:8032
也是运行hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep input output 'dfs[a-z.]+'
时候出错。推测是YARN配置和上面的冲突了,把YARN的配置全部清空再重启就可以了。
[^1]: 注意这里在加入环境变量后调用的, 其位于sbin
文件夹下。
伪分布式: YARN上显示的内存与核数与本机器不一致
用的是实验室的服务器,32核100G+,然后部署的伪分布式,起了YARN, 在8088端口看节点配置发现只有8G,核数也不对, 原来是因为这个要自己写配置文件设置的(之前还以为是自动检测Orz)…
参考Hadoop not utilizing available memory, 在Hadoop安装目录下找到etc/hadoop/yarn-site.xml
, 添加如下内容,指定当前节点可供分配的内存为80G,可用核数为24个(注意内存单位默认是M, 所以这里写81920):
1 | <property> |
此外注意,我们必须重启YARN才可以使得配置生效,所以执行stop-yarn.sh
后start-yarn.sh
,再到8088端口去看就可以看到可用内存已经设置成功.
伪分布式: Container is running beyond memory limits
报错类似Container [pid=28920,containerID=container_1389136889967_0001_01_000121] is running beyond virtual memory limits. Current usage: 1.2 GB of 1 GB physical memory used; 2.2 GB of 2.1 GB virtual memory used. Killing container.
参考标题链接给的解决方案,可以调整yarn.nodemanager.vmem-pmem-ratio
或者关闭虚拟内存检查(不推荐).