经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 大数据/云/AI » Hadoop » 查看文章
Hadoop 部署文档
来源:cnblogs  作者:Sean_Pearce  时间:2019/3/12 8:43:57  对本文有异议

本文档中的集群包含 192.168.105.10/11/12 三台机器。三台机器的 hostname 分别设为 ivic10/ivic11/ivic12,其中第一台机器作为 master,后两台作为 slaves。

1 先决条件

在开始安装 Hadoop 之前,请确认集群的每台机器上均已安装 JDK1.8(注意是 SunJDK 而不是 OpenJDK),并且已经配置好密钥登陆(服务器两两之间可以无密码SSH登陆)。

除此之外还需要在三台机器的 /etc/hosts 文件中写入以下内容(需要root权限)

  1. 192.168.105.10 ivic10
  2. 192.168.105.11 ivic11
  3. 192.168.105.12 ivic12

配置好以后,在任意一台机器上可以用 hostname 无密码 SSH 登陆到另外两台机器上

  1. #在ivic10上操作
  2. ssh ivic11
  3. #如果一切正常,应该可以直接登陆到ivic11上

2 下载二进制文件

在Hadoop的 release 页面中有数个版本可以选择,因为后续要在 Hadoop 集群上部署其他应用,所以这里选择兼容性最好的 2.7.7 版本。

  1. mkdir ~/bigdata
  2. cd ~/bigdata
  3. #Apache网站上的镜像太慢,从清华镜像下载
  4. wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz
  5. #解压到当前文件夹
  6. tar -xzvf hadoop-2.7.7.tar.gz -C .

3 修改配置文件

首先在 ~/.profile 中添加环境变量

  1. export HADOOP_HOME=/home/ivic/bigdata/hadoop-2.7.7
  2. export PATH=$PATH:$HADOOP_HOME/bin

source 命令让环境变量立即生效

  1. source ~/.profile

然后切换到 Hadoop 的配置文件目录下,开始修改 Hadoop 的配置文件 cd ~/bigdata/hadoop-2.7.7/etc/hadoop

3.1 core-site.xml

  1. <configuration>
  2. <property>
  3. <name>fs.defaultFS</name>
  4. <value>hdfs://ivic10:9000/</value>
  5. </property>
  6. <property>
  7. <name>hadoop.tmp.dir</name>
  8. <value>file:/tmp/hadoop-2.7.7</value>
  9. </property>
  10. </configuration>

通过fs.defaultFS指定 NameNode 的 IP 地址和端口号,通过hadoop.tmp.dir指定临时文件存放路径

3.2 hdfs-site.xml

  1. <configuration>
  2. <property>
  3. <name>dfs.replication</name>
  4. <value>3</value>
  5. </property>
  6. <property>
  7. <name>dfs.namenode.name.dir</name>
  8. <value>file:/home/ivic/bigdata/hdfs/name</value>
  9. </property>
  10. <property>
  11. <name>dfs.datanode.data.dir</name>
  12. <value>file:/home/ivic/bigdata/hdfs/data</value>
  13. </property>
  14. </configuration>

dfs.replication 指定备份数目为 3,dfs.name.dir 指定 NameNode 的文件存储路径,dfs.data.dir 指定 DataNode 的文件存储路径。

3.3 mapred-site.xml

  1. #将mapred-site.xml.template复制一份
  2. cp mapred-site.xml.template mapreduce-site.xml
  1. <configuration>
  2. <property>
  3. <name>mapreduce.framework.name</name>
  4. <value>yarn</value>
  5. </property>
  6. </configuration>

3.4 yarn.xml

  1. <configuration>
  2. <property>
  3. <name>yarn.nodemanager.aux-services</name>
  4. <value>mapreduce_shuffle</value>
  5. </property>
  6. <property>
  7. <name>yarn.resourcemanager.hostname</name>
  8. <value>ivic10</value>
  9. </property>
  10. <property>
  11. <name>yarn.nodemanager.vmem-check-enabled</name>
  12. <value>false</value>
  13. <description>Whether virtual memory limits will be enforced for containers</description>
  14. </property>
  15. <property>
  16. <name>yarn.nodemanager.vmem-pmem-ratio</name>
  17. <value>4</value>
  18. <description>Ratio between virtual memory to physical memory when setting memory limits for containers</description>
  19. </property>
  20. </configuration>

配置后两项是因为在部署 Flink on Yarn 的过程中出现了 FlinkYarnSession 无法启动的问题,从 StackOverflow 得知应该在此处加上这两项配置,否则虚拟内存占用会超出限制导致 Flink 无法启动。

3.5 slaves

  1. ivic11
  2. ivic12

3.6 hadoop-env.sh

  1. export JAVA_HOME=/usr/local/jdk1.8.0_201

4 将配置好的 Hadoop 分发到其他节点

  1. #需要先在11/12节点上建立 /homne/ivic/bigdata/ 文件夹
  2. scp -r /home/ivic/bigdata/hadoop-2.7.7 192.168.105.11:/home/ivic/bigdata/hadoop-2.7.7
  3. scp -r /home/ivic/bigdata/hadoop-2.7.7 192.168.105.12:/home/ivic/bigdata/hadoop-2.7.7

然后分别在其他节点上配置环境变量 HADOOP_HOMEPATH

5 启动集群

5.1 格式化 HDFS

  1. cd ~/bigdata/hadoop-2.7.7
  2. hdfs namenode -format

注意:此命令只有在第一次启动前需要执行,目的是格式化 NameNode

5.2 启动集群

  1. #启动 HDFS
  2. ./sbin/start-dfs.sh
  3. #启动 YARN
  4. ./sbin/start-yarn.sh
  5. #以上两条命令也可以用 ./sbin/start-all.sh 代替
  6. #关闭集群 ./sbin/stop-all.sh

使用 jps 命令查看服务运行情况

  1. #master节点中运行的服务
  2. 25928 SecondaryNameNode
  3. 25742 NameNode
  4. 26387 Jps
  5. 26078 ResourceManager
  1. #slave节点中运行的服务
  2. 24002 NodeManager
  3. 23899 DataNode
  4. 24179 Jps

6 提交示例任务

如果一切顺利,现在可以向 Hadoop 提交任务了。这里我们使用 Hadoop 自带的实例程序运行 wordcount 任务,以此验证 Hadoop 是否部署成功。

  1. cd ~/bigdata/hadoop-2.7.7
  2. #把当前路径下的 LICENSE.txt 文件复制到 HDFS 中
  3. hadoop fs -put ./LICENSE.txt /wordcount/input
  4. #提交任务,最后两个参数分别指定任务的输入和输出
  5. hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /wordcount/input /wordcount/output
  6. #查看输出路径
  7. hadoop fs -ls /wordcount/output
  8. #如果一切正常,该路径下包含两个文件
  9. #第一个文件是空文件,表示任务运行成功
  10. /wordcount/output/_SUCCESS
  11. #第二个文件是输出文件,统计了 LICENSE.txt 中每个单词出现的次数
  12. /wordcount/output/part-r-00000

7 坑

7.1 hostname 配置

之前部署 Hadoop 的时候都是在 192.168.7.x 的机器上,那些机器的 hostname 和 hosts 都已经配置好了,直接用就行。但是 192.168.105.x 的这几台机器并没有配好,每台机器的 hostname 都是 ivic。
一开始嫌麻烦就没配,在配置文件里直接填了 IP 地址,结果最后启动集群以后就出现了一个很奇怪的现象————用 jps 命令查看每个节点的服务,一切正常,但在 web ui 里看不到可用的 DataNode,总可用空间是 0。后来看 DataNode 上的日志文件才发现是 hostname 无法解析,不知道为什么 Hadoop 把 IP 地址当作 hostname 了。于是重新配置 hostname,配好以后再重启 Hadoop,问题解决。

hostname 的 配置过程如下(这几台机器上装的是 Ubuntu 18.04,不同系统的配置过程略有区别)

  1. #将该文件中的内容修改为想要的hostname,比如ivic10
  2. sudo vim /etc/hostname
  3. #让修改立即生效
  4. hostname ivic10

7.2 format 命令

在排查上一个问题的过程时,我曾经尝试把 Hadoop 集群停掉然后用 hdfs namenode -format 命令格式化 NameNode,达到“恢复出厂设置”的效果。然而这样做以后再启动 hdfs,原本能启动的 DataNode 现在也启动不了了。浏览 NameNode 的日志发现问题出在 DataNode 的 cluster id 和 NameNode 不一致,所以无法启动。原来 format 命令会为 NameNode 生成一个新的 cluster id,而 DataNode 的 cluster id 信息存储在 dfs.datanode.data.dir 中,并没有发生变化,因此会产生冲突。解决方案是在执行 format 命令之后删除所有 DataNode 的 dfs.datanode.data.dir,也就是 /home/ivic/bigdata/hdfs/data文件夹。

7.3 日志

Hadoop 的日志系统很完善,出了问题在日志里都能找到原因。如果 NameNode 启动不了,就去看 NameNode 的日志,DataNode 启动不了,就去看 DataNode 的日志。日志文件路径为 $HADOOP_HOME/logs

7.4 配置文件的同步

如果集群用的是 nfs,改一台机器的配置文件其他机器上就全部同步修改好了(不过要注意不要把 dfs.namenode.name.dirdfs.datanode.data.dir 配置到网络文件系统上)。

如果没有 nfs 该怎么办呢,难道每次都要手动修改所有机器上的配置文件吗?不是滴,这时候就需要祭出神器 rsync 了,只要用一条命令就可以把修改推送到其他机器上。

举个例子,比如你刚在 ivic10 上修改了 $HADOOP_HOME/etc/hadoop/ 路径下的 core-site.xml,hdfs-site.xml,yarn.xml 三个文件,如何把修改同步到 ivic11 和 ivic12 呢?

  1. cd $HADOOP_HOME/etc
  2. for ip in 11 12; do rsync -r hadoop ivic@ivic${ip}:/home/ivic/bigdata/hadoop-2.7.7/etc; done

搞定。

8 参考

  1. FS Shell Commands
  2. rsync 的使用方法
  3. Hadoop 分布式集群搭建
  4. Hadoop Cluster Setup

原文链接:http://www.cnblogs.com/shaoliyin/p/10512585.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号