Ubuntu17安装伪分布式Hadoop出现的问题与解决方法

由于自己第一次在Linux环境下安装Hadoop,所有安装方法均参照同行写的技术博客。

1 安装ssh,pdsh,生成密钥实现无密码登陆

官方文档推荐安装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的默认登陆

5.2 用户未定义问题

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中定义相应的环境变量,没有任何用处

于是按照以下文章:
https://www.jianshu.com/p/e9d6bfed1b41
在start-dfs.sh和stop-dfs.sh中分别定义用户相关的环境变量,成功运行。

6 安装伪分布式Hadoop

如果伪分布式安装成功,则可以使用hdfs。但伪分布式的安装将又会出现很多问题。

6.1 按流程安装

经过以下链接:
https://dblab.xmu.edu.cn/blog/install-hadoop-in-centos/
的“Hadoop伪分布式配置”后,NameNode的格式化,以及启动,停止均可以顺利进行。

6.2 localhost:50070无法登陆

已经改变到

localhost:9870

链接如下:
https://stackoverflow.com/questions/19641326/http-localhost50070-does-not-work-hadoop

6.2 MapReduce操作出现问题

错误: 找不到或无法加载主类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.classpath</name>
        <value>在这里是使用终端自带的粘贴功能,会把路径粘贴过来</value>
    </property>
</configuration>

详细描述见下文章:
http://wenda.chinahadoop.cn/question/3069

6.3 虚拟内存溢出

经过6.2的修复,可以顺利到达执行MapReduce前,但还是有问题。表现为执行MapReduce时,突然不断重新连接,但又失败。

  • 在yarn终端中查看历史记录

    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增加以下配置:

<configuration>
    <property>
        <name>yarn.nodemanager.vmem-pmem-ratio</name>
        <value>8</value>
    </property>
</configuration>

则可以正常运行。

猜你喜欢

转载自blog.csdn.net/xiblade/article/details/80200249