阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

RedHat 6.8 搭建 Hadoop 集群

392次阅读
没有评论

共计 10515 个字符,预计需要花费 27 分钟才能阅读完成。

Hadoop 基本简介

  • 是一个由 Apache 基金会所开发的分布式系统基础架构。
  • 广义上来说,是一个 Hadoop 生态圈(由一堆框架、软件组成)

版本介绍

  • 分为社区版和商业版
  • 1.x,2.x,- 是并行发展的
    • 1.x:
      • 由一个分布式文件系统 HDFS
      • 一个离线计算机框架 MapReduce
    • 2.x:
      • 支持 NameNode 的 HDFS
      • 资源管理系统 YARN
      • 运行在 YARN 上的 MapReduce
      • 比 1 的功能更强大,有更好的扩展性、性能、并支持多种计算框架
    • 3.x
      • 比 2 有一系列功能加强,但还在测试

集群介绍

  • 包含两个集群,HDFS 集群和 YARN 集群:
    • 都是分布式,可以布置在多台机器上。
    • 两者逻辑上分离,但物理常在一起:但是即使装在一台机器上,逻辑上也是分离的,就是说两个的处理完全独立,1 个执行不了不影响另一个。

优势

  • 扩容能力:分布式系统方便的扩充
  • 成本低:可以使用多台普通廉价的机器
  • 高效率:通过并发数据,结点直接动态并行移动数据,速度块。
  • 可靠性:自动同步备份数据

HDFS 集群:

  • 负责数据的存储。
  • 集群中的角色:
    • NameNode:命名结点
    • DataNode:数据结点
    • SecondaryNameNode:秘书结点

YARN 集群

  • 负责数据运算的硬件资源调度,比如内存
  • 集群中的角色
    • Resource Manager
    • Node Manager

MapReduce

  • 其实是一个分布式运算编程框架(类似一个接口和一系列父类)
  • 注意并不是一个集群

部署方式

  • Standalone mode(独立模式):单机模式,在 1 个机器上运行一个 Java 进程,主要用于调试。
  • Pseudo-Distributed mode(伪分布模式):1 个机器上运行 HDFS 和 YARN,但是分别开启 Java 进程
  • Cluster mode(集群模式): 实际生产使用的模式,在 N 台主机组成一个 Hadoop 集群。

搭建 Hadoop

 

 

 

0. 部署计划

本文使用的版本是 

  • Red Hat 6.8 - 本来想用 CentOS7 搭建的,但是工作需要还是换成这个了,不用红帽子用 Centos 6 系列的应该也可以
  • JDK 1.8
  • Hadoop 2.7.7

 

  • 计划部署 2 台虚拟机,分别命名为 node- 1 和 node-2,4G 内存和 40G 的硬盘
主机名字 内存 硬盘 启用结点
node-1 4 40 hdfs:NameNode, DataNode;yarn:NodeManager, ResoureceManager,
node-2 4 40 hdfs:SecondaryNameNode,DataNode; yarn: NodeManager

 

1. 环境部署

node-1&2 环境

  • 以下内容两台机器都要配置

  1. 部署虚拟机(使用 VMware 傻瓜式操作,不再赘述)

  2. 挂载本地 yum 源(或者使用网络都行)

  3. 同步机组时间

    #yum 安装 ntpdate
    yum install ntpdate
    #网络同步时间
    ntpdate cn.pool.ntp.org
  4. 配置主机名称

    vim /etc/sysconfig/network
    ​
    #修改为:NETWORKING=yes
    HOSTNAME=node-1 
  5. 配置 IP、主机名映射

    vim /etc/hosts
    ​
    #直接添加
    192.168.98.129 node-1
    192.168.98.130 node-2
  6. 配置 ssh 免密登录

    ssh-keygen -t rsa #再按四次回车
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    20:15:74:e0:d2:48:1d:0d:e4:42:2a:14:28:1e:b7:75 root@node-1
    The key's randomart image is:
    +--[RSA 2048]----+
    |.o. o+O*.        |
    |+. = B.E.        |
    |+ + B *          |
    | o . + .         |
    |        S        |
    |                 |
    |                 |
    |                 |
    |                 |
    +-----------------+
    ​
    #使用 ssh-copy-id 命令将公钥考培到要免密登录的目标机器上
    ssh-copy-id node-1
    ssh-copy-id node-2
     
  7. 关闭防火墙

    # 查看防火墙状态
    service iptables status
    #关闭防火墙
    service iptables stop
    #查看防火墙开机启动状态
    chkconfig iptables --list
    #关闭防火墙开机启动
    chkconfig iptables off

    如下图状态则说明防火墙已经关闭、防火墙开机不会自动启动

    RedHat 6.8 搭建 Hadoop 集群

  8. 安装 JDK

    • 使用 rpm 格式文件安装

    • 复制到 /usr/java 文件夹(没有则先创建文件夹)

    • # 授予权限
      chmod 700 jdk-8u65-linux-x64.rpm
      #安装
      rpm -ivh jdk-8u65-linux-x64.rpm
    • 安装完成

RedHat 6.8 搭建 Hadoop 集群

9. 配置环境变量

# 打开全局环境变量设置
vim  /etc/profile
​
#在文档最下方添加配置
JAVA_HOME=/usr/java/jdk1.8.0_65
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
​
#生效配置
source /etc/profile
​
#测试配置
java -version

配置成功:

RedHat 6.8 搭建 Hadoop 集群

node- 1 配置 Hadoop

  • 以下操作只要在 node1 上操作

  1. 安装 Hadoop

    • 使用 tar.gz 格式安装

    • 复制到 /usr/hop,没路径自行创建

    # 授予权限
    chmod 700 hadoop-2.7.7.tar.gz
    ​
    #解压到当前路径
    [root@node-1 hop]# tar zxvf hadoop-2.7.7.tar.gz
    ​
  2. 配置 Hadoop

    1. 配置目录:/usr/hop/hadoop-2.7.7/etc/hadoop

      • 所有配置文件都在这里

      • 我们一共需要配置:

        • hadoop-env.sh

        • core-site.xml

        • hdfs-site.xml

        • mapred-site.xml

        • yarn-site.xml

        • slaves

    2. vim hadoop-env.sh

      # 在文件中找到 JAVA_HOME,修改配置
      export JAVA_HOME=/usr/java/jdk1.8.0_65

       

    3. vim core-site.xml

      • hadoop.tmp.dir 是导出目录,注意要手动创建 /usr/hop/hadoop-2.7.7/data/

      • 最好创建在 hadoop 的安装目录下

      <configuration>
        <property>
          <name>fs.defaultFS</name>
          <value>hdfs://node-1:9000</value>
        </property>
        <property>
          <name>hadoop.tmp.dir</name>
          <value>/usr/hop/hadoop-2.7.7/data/hopdata</value>
        </property>
      </configuration>

       

      • 注意不一样,别写错

      • RedHat 6.8 搭建 Hadoop 集群

         

    4. vim hdfs-site.xml

      • dfs.replication 是指默认备份的数量

      <configuration>
        <property>
          <name>dfs.namenode.secondary.http-address</name>
          <value>node-2:50090</value>
        </property>
        <property>
          <name>dfs.replication</name>
          <value>2</value>
        </property>
      </configuration>

       

    5.  mapred-site.xml

      • 默认只有 mapred-site.xml.template,因此要改成 mapred-site.xml

mv mapred-site.xml.template
vim mapred-site.xml

 


<!-- 指定 mapreduce 运行时框架,这里指定在 yarn 上,默认是 local-->
<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>

6. vim yarn-site.xml


<configuration><!-- Site specific YARN configuration properties -->
  <property>
    <!-- 指定 YARN 的主机 (ResourceManager) 的地址 -->
    <name>yarn.resourcemanager.hostname</name>
    <value>node-1</value>
  </property>
  <property>
    <!--nodeManager 上运行的附属服务,需要配置成 maperduce_shuffle,才可用 MapReduce 程序 -->
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
</configuration>

7. vim slaves

    • 告诉 hadoop 有多少台机器

node-1
node-2
 

8. 配置 Hadoop 环境变量,和 java 的一样,配置以后整体如下

JAVA_HOME=/usr/java/jdk1.8.0_65
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
HADOOP_HOME=/usr/hop/hadoop-2.7.7
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export PATH JAVA_HOME CLASSPATH HADOOP_HOME
​

生效环境变量

source /etc/profile

测试环境变量配置是否成功

hadoop version

RedHat 6.8 搭建 Hadoop 集群

9. 把 Hadoop 发送到其他机器上

scp -r /usr/hop/hadoop-2.7.7/ root@node-2:/usr/hop

注意,如果导出目录没设置在 Hadoop 安装包里,其他机器上也要手动创建导出目录(最好把导出目录直接设置在 hadoop 文件夹里面。。)

10. 把环境变量发送到其他机器上

scp -r /etc/profile root@node-2:/etc/

生效其他机器的环境变量

source /etc/profile

Hadoop 集群启动

1.hdfs 格式化

  • 只有首次启动需要

  • 格式化本质是进行文件系统 初始化 操作,创建一些自己所需要的文件

  • 格式化之后,集群启动成功,后续不要再格式化

  • 格式化的操作在 hdfs 集群的主角色(namenode)上操作

# 以下两条命令都可以,只要执行 1 条!#在 node- 1 中执行
hdfs namenode –format 
hadoop namenode –format

2. 启动 hdfs 集群

  • 定位到/usr/hop/hadoop-2.7.7/sbin

  • 目录中有一堆执行文件,其中 start-dfs.sh 就是 hdfs 集群的启动文件

RedHat 6.8 搭建 Hadoop 集群

  • start-all.sh 和 stop-all.sh 是 Deprecated 的,不建议使用

  • 执行start-dfs.sh

  • 发现报错(如果没报错就跳过)

RedHat 6.8 搭建 Hadoop 集群

 一些解决方案

配置完 hadoop 启动的时候出现如下警告信息:

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

  1. 如何验证 64bit 还是 32bit?

进入 hadoop 安装目录,用 ldd 命令查看依赖库

ldd libhadoop.so.1.0.0 会输出如下信息:

./libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)
        linux-vdso.so.1 =>  (0x00007fff369ff000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f3caa7ea000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f3caa455000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f3caac1b000)

可以看到依赖的都是 /lib64/ 的动态库,所以不是 64 位 /32 位问题。但是看到报错,GLIBC_2.14 找不到,现在检查系统的 glibc 库, ldd –version 即可检查。 输入命令:

ldd --version
#会输出如下信息:ldd (GNU libc) 2.12
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.

原来系统预装的 glibc 库是 2.12 版本,而 hadoop 期望是 2.14 版本,所以打印警告信息。

先回到 Hadoop/sbin 目录关闭 hdfs

cd /usr/hop/hadoop-2.7.7/sbin/
 stop-dfs.sh

http://ftp.gnu.org/gnu/glibc/ 下载 glibc-2.14.tar.xz

tar glibc-2.14.tar.gz
xz -d glibc-2.14.tar.xz
tar -xvf glibc-2.14.tar
cd glibc-2.14
mkdir build
cd build
../configure --prefix=/usr/local/glibc-2.14
make -j4
make install

看看现在 libc.so.6 在哪个位置,然后修改软链接

[root@binghe ~]# whereis libc.so.6
libc.so: /lib64/libc.so.6 /usr/lib64/libc.so
[root@binghe ~]# rm -rf /lib64/libc.so.6
### 注意:删除/lib64/libc.so.6 软链接之后,不要关闭当前会话,否则将登录不上系统,切记切记切记!### 直接执行以下代码
[root@binghe ~]# LD_PRELOAD=/usr/local/glibc-2.14/lib/libc-2.14.so ln -s /usr/local/glibc-2.14/lib/libc-2.14.so /lib64/libc.so.6

再启动:不再报错了!

RedHat 6.8 搭建 Hadoop 集群

3. 启动 yarn 集群

  • 同理定位到安装目录的 sbin,启动 yarn,sh

cd /usr/hop/hadoop-2.7.7/sbin/
 start-yarn.sh

RedHat 6.8 搭建 Hadoop 集群

4. 全局输入 jps 检查

  • 正常是这样的

RedHat 6.8 搭建 Hadoop 集群

  • 如果发现 node- 1 没有执行 namenode

RedHat 6.8 搭建 Hadoop 集群

  •  可以 查看 namenode 启动日志,根据日志记录再去看怎么解决
# 在安装目录下找到 Logs 文件夹
cd /usr/hop/hadoop-2.7.7/logs/
#打开 hadoop-root-namenode-node-1.log 日志
vim hadoop-root-namenode-node-1.log

5. 如果想单节点启动,可以使用以下命令(一般不使用):

  • 也要在 sbin 目录下执行

# 在主节点上使用以下命令启动 HDFS NameNode:hadoop-daemon.sh start namenode
#在每个从节点上使用以下命令启动 HDFS DataNode:hadoop-daemon.sh start datanode
#在主节点上使用以下命令启动 YARN ResourceManager:yarn-daemon.sh  start resourcemanager
#在每个从节点上使用以下命令启动 YARN nodemanager:yarn-daemon.sh start nodemanager
#以上脚本位于 $HADOOP_PREFIX/sbin/ 目录下。如果想要停止某个节点上某个角色,只需要把命令中的 start 改为 stop 即可。

6. 登录 web.ui

1. 在浏览器输入 node-1:50070

  • 该网址是 hdfs 集群的网络管理端口

  • 如果这一步不行,检查 namenode 是否正确启动!

    RedHat 6.8 搭建 Hadoop 集群

2. 在浏览器输入 node-1:8088

  • 打开 yarn 集群的管理端口

RedHat 6.8 搭建 Hadoop 集群

3. 在浏览器输入 node-2:50090。

RedHat 6.8 搭建 Hadoop 集群

 

4. 如果 node-2:50090 登录不上

  • 在 node- 2 查看 node 启动日志

#查看方式和上文 node- 1 的一样,只是��再 node- 2 机器上找,而且找的是 node- 2 中执行的是 SecondaryNameNode 日志
# 在安装目录下找到 Logs 文件夹 cd
/usr/hop/hadoop-2.7.7/logs/
  • 发现提示:

Call From node-2/192.168.98.130 to node-1:9000 
failed on connection exception: java.net.ConnectException:
Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
  • 说明主机 9000 端口登录不进去

  • 回到主机检查

  • # 查看端口
    netstat -tlpn
  • 发现 9000 端口是在 127.0.0.1 后面,说明此使其他机器访问不了,只能通过本机访问(如果是正确的,应该 192.168.X.X)

RedHat 6.8 搭建 Hadoop 集群

  • 验证是否连不上

# 使用 telnet 命令验证
telnet node-1 9000
#发现确实连不上
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to node-1.

#如果没有安装 telnet, 使用 yum 命令安装
yum install telnet-server
yum install telnet.*
  • 修改 /etc/hosts 文件,发现原来是笔者修改别的错误时,错误的在前两行后面加上 node-1,只要去掉如图就可以了。

RedHat 6.8 搭建 Hadoop 集群

  • 关闭 Hadoop 集群,重启机器,打开 Hadoop 集群,登录成功了

Hadoop 重要配置解析

基本信息

安装时,我们配置了

  • hadoop-env.sh

  • core-site.xml

  • hdfs-site.xml

  • mapred-site.xml

  • yarn-site.xml

  • slaves

  1. 其中 xxx-site.xml 文件,在官网目录最下方,可以找到响应的 xxx-default.xml 文件,如果用户没有更改,那么这里面的选项会生效

http://hadoop.apache.org/docs/r2.7.7/

RedHat 6.8 搭建 Hadoop 集群

  1. site 中配置了,就会覆盖了默认的配置选项

  1. Deprecated Properties 中写了过时的配置。

1.core-site.xml

  • 集群全局参数,用于定义系统级别的参数,如 HDFS URL、Hadoop 的临时目录等

    <configuration>
      <property>
        <name>fs.defaultFS</name>
        <value>hdfs://node-1:9000</value>
      </property>
      <property>
        <name>hadoop.tmp.dir</name>
        <value>/export/data/hopdata</value>
      </property>
    </configuration>
序号 参数名 默认值 参数解释
1 fs.defaultFS file:/// 文件系统主机和端口
2 io.file.buffer.size 4096 流文件的缓冲区大小
3 hadoop.tmp.dir /tmp/hadoop-${user.name} 临时文件夹

2.hdfs-site.xml

  • HDFS 参数,如名称节点和数据节点的存放位置、文件副本的个数、文件读取权限等

    <configuration>
      <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>node-2:50090</value>
      </property>
      <property>
        <name>dfs.replication</name>
        <value>2</value>
      </property>
    </configuration>
序号 参数名 默认值 参数解释
1 dfs.namenode.secondary.http-address 0.0.0.0:50090 secondary namenode 所在主机的 ip 和端口, 定义 HDFS 对应的 HTTP 服务器地址和端口
2 dfs.namenode.name.dir file://${hadoop.tmp.dir}/dfs/name 定义 DFS 的名称节点在本地文件系统的位置
3 dfs.datanode.data.dir file://${hadoop.tmp.dir}/dfs/data 定义 DFS 数据节点存储数据块时存储在本地文件系统的位置
4 dfs.replication 3 缺省的块复制数量
5 dfs.webhdfs.enabled true 是否通过 http 协议读取 hdfs 文件,如果选是,则集群安全性较差

3.mapred-site.xml

    • Mapreduce 参数,包括 JobHistory Server 和应用程序参数两部分,如 reduce 任务的默认个数、任务所能够使用内存的默认上下限等

      <configuration>
        <property>
          <name>mapreduce.framework.name</name>
          <value>yarn</value>
        </property>
      </configuration>
序号 参数名 默认值 参数解释
1 mapreduce.framework.name local 取值 local、classic 或 yarn 其中之一,如果不是 yarn,则不会使用 YARN 集群来实现资源的分配
2 mapreduce.jobhistory.address 0.0.0.0:10020 定义历史服务器的地址和端口,通过历史服务器查看已经运行完的 Mapreduce 作业记录
3 mapreduce.jobhistory.webapp.address 0.0.0.0:19888 定义历史服务器 web 应用访问的地址和端口

4.yarn-site.xml

    • 集群资源管理系统参数,配置 ResourceManager,NodeManager 的通信端口,web 监控端口等

      <configuration>
      
      <!-- Site specific YARN configuration properties -->
        <property>
          <!-- 指定 YARN 的主机 (ResourceManager) 的地址 -->
          <name>yarn.resourcemanager.hostname</name>
          <value>node-1</value>
        </property>
        <property>
          <!--nodeManager 上运行的附属服务,需要配置成 maperduce_shuffle,才可用 MapReduce 程序 -->
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
        </property>
      </configuration>

       

序号 参数名 默认值 参数解释
1 yarn.resourcemanager.address 0.0.0.0:8032 YARN 的主机 (ResourceManager) 的地址, ResourceManager 提供给客户端访问的地址。客户端通过该地址向 RM 提交应用程序,杀死应用程序等
2 yarn.resourcemanager.scheduler.address 0.0.0.0:8030 ResourceManager 提供给 ApplicationMaster 的访问地址。ApplicationMaster 通过该地址向 RM 申请资源、释放资源等
3 yarn.resourcemanager.resource-tracker.address 0.0.0.0:8031 ResourceManager 提供给 NodeManager 的地址。NodeManager 通过该地址向 RM 汇报心跳,领取任务等
4 yarn.resourcemanager.admin.address 0.0.0.0:8033 ResourceManager 提供给管理员的访问地址。管理员通过该地址向 RM 发送管理命令等。
5 yarn.resourcemanager.webapp.address 0.0.0.0:8088 ResourceManager 对 web 服务提供地址。用户可通过该地址在浏览器中查看集群各类信息
6 yarn.nodemanager.aux-services   通过该配置项,用户可以自定义一些服务,例如 Map-Reduce 的 shuffle 功能就是采用这种方式实现的,这样就可以在 NodeManager 上扩展自己的服务。

更多 Hadoop 相关信息见Hadoop 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=13

 

 

 

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计10515字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中