由于自己第一次在Linux环境下安装Hadoop,所有安装方法均参照同行写的技术博客。
官方文档推荐安装ssh和pdsh,则参照官方文档安装两者并生成密钥:
http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/SingleCluster.html#Pseudo-Distributed_Operation
由于pdsh在一般的安装技术博客中不常用,后期遇到了一些问题。
#2 安装jdk
#3 下载,验证文件,解压到/usr/local
于tar.gz中解压然后直接可以运行的程序,当然在任何地方都能运行。但是,按照FHS,解压出程序存放的位置,一般在/usr/local或者/opt。
因为FHS中话术模糊,很多人对/usr/local的目录存放有误解,详见下面链接中中外国友人对于"after first installing a FHS-compliant system"这句话的争论。
https://askubuntu.com/questions/6897/where-to-install-programs
在这个步骤之前,我还了解到有建立单独的hadoop用户和hadoop组的习惯。但官方文档没有提及,也就没有单独建立用户。直接用Ubuntu系统安装时建立的用户解压Hadoop并进行后面的配置。建立hadoop用户的技术博客在下方。
https://dblab.xmu.edu.cn/blog/install-hadoop-in-centos/
#4 配置hadoop-env.sh
https://www.digitalocean.com/community/tutorials/how-to-install-hadoop-in-stand-alone-mode-on-ubuntu-16-04
在上面的安装过程中,动态配置hadoop-env.sh的步骤可以参考下,这个方式比较灵活。
#5 尝试运行单机版Hadoop
##5.1 pdsh的问题
pdsh@xxx: localhost: connect: Connection refused
**解决方法:**设置pdsh的默认登陆
无效操作:
https://blog.csdn.net/micro_hz/article/details/79120435
设置环境变量没有用处
有效操作:
https://serverfault.com/questions/544917/pdsh-gives-error-rcmd-socket-permission-denied
设置rcmd_default文件
因为大部分技术博客都是类似下方链接:
https://dblab.xmu.edu.cn/blog/install-hadoop-in-centos/
即
sudo yum install openssh-clients
sudo yum install openssh-server
而没有使用pdsh,所以会出现这个问题。比较难解决。
but there is no HDFS_NAMENODE_USER defined
问题的描述见以下链接:
https://stackoverflow.com/questions/48129029/hdfs-namenode-user-hdfs-datanode-user-hdfs-secondarynamenode-user-not-defined
但是,按照高票解决方法,在~/.bashrc中定义相应的环境变量,没有任何用处.
后续得知,需要重启ssh才能生效。
于是按照以下文章:
https://www.jianshu.com/p/e9d6bfed1b41
在start-dfs.sh和stop-dfs.sh中分别定义用户相关的环境变量,成功运行。
如果伪分布式安装成功,则可以使用hdfs。但伪分布式的安装将又会出现很多问题。
经过以下链接:
https://dblab.xmu.edu.cn/blog/install-hadoop-in-centos/
的“Hadoop伪分布式配置”后,NameNode的格式化,以及启动,停止均可以顺利进行。
已经改变到
localhost:9870
链接如下:
https://stackoverflow.com/questions/19641326/http-localhost50070-does-not-work-hadoop
错误: 找不到或无法加载主类org.apache.hadoop.mapreduce.v2.app.MRAppMaster
解决办法:
# 安装终端-剪贴板工具
sudo apt-get install xsel
# 输出hadoop classpath,逗号分隔,保存至剪贴板
$HADOOP_HOME/hadoop classpath | sed "s/:/,/g" | xsel -i -b
# 编辑yarn-site.xml
vim /usr/local/hadoop/etc/hadoop/yarn-site.xml
# 按如下方式编辑
<configuration>
<property>
<name>yarn.application.classpathname>
<value>在这里是使用终端自带的粘贴功能,会把路径粘贴过来value>
property>
configuration>
详细描述见下文章:
http://wenda.chinahadoop.cn/question/3069
经过6.2的修复,可以顺利到达执行MapReduce前,但还是有问题。表现为执行MapReduce时,突然不断重新连接,但又失败。
http://localhost:8088/cluster/apps/FAILED
发现是内存溢出的错误 Application application_1525426143438_0005 failed 2 times due to AM Container for appattempt_1525426143438_0005_000002 exited with exitCode: -103
Failing this attempt.Diagnostics: [2018-05-04 17:32:28.028]Container [pid=29691,containerID=container_1525426143438_0005_02_000001] is running 313353216B beyond the ‘VIRTUAL’ memory limit. Current usage: 330.4 MB of 2 GB physical memory used; 4.5 GB of 4.2 GB virtual memory used. Killing container.
```
可以在历史记录中找到
beyond the ‘VIRTUAL’ memory limit
解决办法:调节内存比例
https://blog.yoodb.com/sugarliny/article/detail/1307
上文描述了yarn-site.xml中各项配置参数的意义。可以编辑yarn-site.xml调节内存比例,在yarn-site.xml增加以下配置:
yarn.nodemanager.vmem-pmem-ratio
8
则可以正常运行。