热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CentOS7.2下Hadoop集群安装与配置

nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd

#hadoopHadoop

1 Hadoop 是什么?


Apache Hadoop 是一个支持数据密集型分布式应用程序的开源软件框架,能在大型集群上运行应用程序。Hadoop 框架实现了 MapReduce 编程范式,把应用程序分成许多小部分,每个部分能在任意节点上运行。并且 Hadoop 提供了分布式文件系统存储所有计算节点的数据,为集群带来非常高的带宽。

2 搭建说明


  • 本文几乎所有操作都需要在三台服务器上进行同样的操作,所以为了便于表示,在需要三台服务器上进行同样操作的时候会使用 x3 进行标注。
  • 命令当中的 # 代表 root 用户执行。
  • 命令当中的 $ 代表 hadoop 用户执行。
  • ### 为该命令的注释。

:可在一台机子上配置好后利用 scp 命令进行复制,若在虚拟机则可直接复制虚拟机。

2.1 节点机器配置


NodeNameOSCPURAMDiskIP
NameNode CentOS 7.2 E7-4830 v3 @ 2.10GHz x2 2G 100G 192.168.1.69
DataNode1 CentOS 7.2 E7-4830 v3 @ 2.10GHz x2 2G 500G 192.168.1.70
DataNode2 CentOS 7.2 E7-4830 v3 @ 2.10GHz x2 2G 500G 192.168.1.71

2.2 软件包版本


SoftwareVersion
JDK Oracle JDK 1.8.0_131(非OpenJDK)
Hadoop 2.8.0

3 安装JDK x3


# mkdir -p /usr/local/Java
# cd /usr/local/java
# wget http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz
# tar -xvzf jdk-8u131-linux-x64.tar.gz
 
### 设置新的 JDK 为默认 JDK,如果机器已经安装 OpenJDK,可能需要先卸载。
 
# echo "export JAVA_HOME=/usr/local/java/jdk1.8.0_131/" >> /etc/profile
# echo "export PATH=$PATH:$JAVA_HOME/bin" >> /etc/profile
# source /etc/profile
 
### 测试运行
 
# $JAVA_HOME/bin/java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

4 关闭防火墙 x3


直接关闭整个防火墙不是一个明智的选择,在具体环境中应该挑选出需要的端口,进行放行,本文由于篇幅原因,不再详细讨论,故采用直接关闭防火墙的方法。

# systemctl stop firewalld.service
# systemctl disable firewalld.service 

5 配置 hostname 及局域网映射 x3


# hostnamectl set-hostname namenode ### 为 namenode 节点设置 hostname
# hostnamectl set-hostname datanode1 ### 为 datanode1 节点设置 hostname
# hostnamectl set-hostname datanode2 ### 为 datanode2 节点设置 hostname
 
# echo "192.168.1.69 namenode" >> /etc/hosts
# echo "192.168.1.70 datanode1" >> /etc/hosts
# echo "192.168.1.71 datanode2" >> /etc/hosts

6 创建 hadoop 用户以及 hadoop 用户组 x3


# groupadd hadoop
# useradd -m -g hadoop hadoop
# passwd hadoop

7 SSH 免密登录


Hadoop 在 namenode 节点中使用 ssh 来访问各节点服务器,例如开启或关闭 hadoop。显然在大型集群中,不可能手动逐个输入密码,在这种情况下,我们可以利用 ssh-agent 代理我们输入密码。

:该设置只需要在 namenode 节点设置。

7.1 ssh-agent


配置 ssh-agent 开机自动运行

# echo 'eval $(ssh-agent)' >> /etc/profile
# source /etc/profile

 

7.2 配置免密登录


namenode 节点上登录 hadoop 用户

$ ssh-keygen -t rsa -f ~/.ssh/id_rsa ### 输入密钥
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 644 ~/.ssh/authorized_keys
$ ssh-copy-id datanode1 ### 将公钥 copy 到 datanode1
$ ssh-copy-id datanode2 ### 将公钥 copy 到 datanode2
$ ssh-add ~/.ssh/id_rsa ### 使用 ssh-agent 实现免密登录
$ ssh datanode1 ### 测试无需密码即可登录 datanode1

 

8 磁盘挂载(OPtional) x3


# mkdir /home/hadoop/hdfs
# mount /dev/sdb1 /home/hadoop/hdfs/
# chown -R hadoop:hadoop /home/hadoop/hdfs/
# echo "/dev/sdb1 /home/hadoop/hdfs ext4 defaults 0 0" >> /etc/fstab

9 安装 Hadoop x3


# cd /usr/local
# wget https://mirrors.scau.edu.cn/hadoop/hadoop-2.8.0.tar.gz ### 使用自己的镜像源
# wget https://mirrors.ustc.edu.cn/apache/hadoop/common/hadoop-2.8.0/hadoop-2.8.0.tar.gz
# tar -xvzf hadoop-2.8.0.tar.gz
# chown -R hadoop:hadoop hadoop-2.8.0

10 配置 Hadoop x3


复制默认配置文件,在升级 hadoop 版本时可独立出来。

$ mkdir ~/config/
$ cp -r /usr/local/hadoop-2.8.0/etc/hadoop/ ~/config/

 

指定 hadoop 运行所使用的 JDK 与配置目录, vim ~/config/hadoop/hadoop-env.sh

$ export JAVA_HOME=/usr/local/java/jdk1.8.0_131/
$ export HADOOP_CONF_DIR=/home/hadoop/config/hadoop/
 
### 最好将该环境变量也加入 /etc/profile
# echo "export HADOOP_CONF_DIR=/home/hadoop/config/hadoop/" >> /etc/profile

 

10.1 log 存储位置


修改 hadoop log 存储位置

$ echo "export HADOOP_LOG_DIR=~/log/hadoop" >> ~/config/hadoop/hadoop-env.sh

 

修改 YARN log 存储位置,$ vim config/hadoop/yarn-env.sh

YARN_LOG_DIR="/home/hadoop/log/yarn/"

 

10.2 配置 core-site.xml


$ vim ~/config/hadoop/core-site.xml
 
 
<configuration>
<property>
<description>默认文件系统及端口description>
<name>fs.defaultFSname>
<value>hdfs://namenode/value>
<final>truefinal>
property>
configuration>

10.3 配置 hdfs-site.xml


$ vim ~/config/hadoop/hdfs-site.xml
 
<configuration>
<property>
<description>namedoe 存储永久性的元数据目录列表description>
<name>dfs.namenode.name.dirname>
<value>/home/hadoop/hdfs/name/value>
<final>truefinal>
property>
 
<property>
<description>datanode 存放数据块的目录列表description>
<name>dfs.datanode.data.dirname>
<value>/home/hadoop/hdfs/data/value>
<final>truefinal>
property>
configuration>
```
 
#### 10.4 配置 mapred-site.xml
***
``` bash
$ vim ~/config/hadoop/mapred-site.xml
<configuration>
<property>
<description>MapReduce 执行框架设为 Hadoop YARN. description>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
 
<property>
<description>Map 和 Reduce 执行的比例,Map 执行到百分之几后开始 Reduce 作业description>
<name>mapreduce.job.reduce.slowstart.completedmapsname>
<value>1.0value>
property>
configuration

10.5 配置 yarn-site.xml


$ vim ~/config/hadoop/yarn-site.xml
<configuration>
<property>
<description>The address of the applications manager interface in the RM.description>
<name>yarn.resourcemanager.addressname>
<value>namenode:8032value>
property>
 
<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue>
property>
 
<property>
<description>存储中间数据的本地目录description>
<name>yarn.nodemanager.local-dirsname>
<value>/home/hadoop/nm-local-dirvalue>
<final>truefinal>
property>
 
<property>
<description>每个容器可在 RM 申请的最大内存description>
<name>yarn.scheduler.maximum-allocation-mbname>
<value>2048value>
<final>truefinal>
property>
 
 
<property>
<description>每个容器可在 RM 申请的最小内存description>
<name>yarn.scheduler.minimum-allocation-mbname>
<value>300value>
<final>truefinal>
property>
 
<property>
<description>自动检测节点 CPU 与 Memdescription>
<name>yarn.nodemanager.resource.detect-hardware-capabilitiesname>
<value>truevalue>
property>
 
<property>
<description>The address of the scheduler interface.description>
<name>yarn.resourcemanager.scheduler.addressname>
<value>namenode:8030value>
property>
 
<property>
<description>The address of the RM web application.description>
<name>yarn.resourcemanager.webapp.addressname>
<value>namenode:8088value>
property>
 
<property>
<description>The address of the resource tracker interface.description>
<name>yarn.resourcemanager.resource-tracker.addressname>
<value>namenode:8031value>
property>
 
<property>
<description>The hostname of the RM.description>
<name>yarn.resourcemanager.hostnamename>
<value>namenodevalue>
property>
configuration>

10.6 配置 slaves


$ vim ~/config/hadoop/slaves
 
namenode
datanode1
datanode2

11 优化 namenode 节点命令使用


$ echo "export PATH=$PATH:/usr/local/hadoop-2.8.0/bin/:/usr/local/hadoop-2.8.0/sbin/" >> ~/.bash_profile
$ source ~/.bash_profile

12 启动集群及测试


测试之前最好重启一遍三台机器,以确保配置都生效,并且没有其他问题。

登录 namenode 节点

$ ssh-add ~/.ssh/id_rsa ### 验证密钥
$ hadoop namenode -format ### 初始化集群
$ start-dfs.sh ### 启动 HDFS
$ start-yarn.sh ### 启动 YARN 

12.1 集群总览


NodeNameWebAddress
namenote HDFS http://192.168.1.69:50070
  RM http://192.168.1.69:8088
  NM http://192.168.1.69:8042
datanode1 HDFS http://192.168.1.70:50075
  NM http://192.168.1.70:8042
datanode2 HDFS http://192.168.1.71:50075
  NM http://192.168.1.71:8042

Hadoop2.3-HA高可用集群环境搭建  2017-03/142155.htm

Hadoop项目之基于CentOS7的Cloudera 5.10.1(CDH)的安装部署  2017-04/143095.htm

Hadoop2.7.2集群搭建详解(高可用)  2017-03/142052.htm

使用Ambari来部署Hadoop集群(搭建内网HDP源)  2017-03/142136.htm

Ubuntu 14.04下Hadoop集群安装  2017-02/140783.htm

CentOS 7 下 Hadoop 2.6.4 分布式集群环境搭建  2017-06/144932.htm

Ubuntu 16.04上构建分布式Hadoop-2.7.3集群  2017-07/145503.htm

Hadoop2.7.3+Spark2.1.0完全分布式集群搭建过程  2017-06/144926.htm

12.2 测试用例


hadoop 自带了许多测试用例,所以可以很方便的快速测试集群是否搭建成功。

$ yarn jar /usr/local/hadoop-2.8.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.0.jar randomwriter random-data 

执行上述命令后,打开 RM 以及 NM 的 URL ,查看任务是否被执行,如执行,则搭建成功。

12.3 图片展示

#hadoophadoop

#hadoop-taskhadoop-task

#hadoop-taskhadoop-task

13 总结


本文从零开始搭建了具有三个节点服务器的 Hadoop 集群,示范了 Hadoop 搭建集群的基本配置。并且从中我们可以知道 Hadoop 集群的每台机子的配置几乎是相同的,这是大量重复性的劳动,因此使用 docker 会大大加快集群的部署。文中的配置文件,是我根据我自己的三台服务器的机器硬件所决定的参数,读者应该根据自己的实际情况选择参数的设置,下文的参考资料给出了各种属性的说明以及默认值。

14 参考资料


  • core-default.xml
  • hdfs-default.xml
  • mapred-default.xml
  • yarn-default.xml
  • DeprecatedProperties
Hadoop 专题页面 =13


推荐阅读
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
author-avatar
良良8003
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有