Hadoop 2.8的安装、配置与启动

栏目: 编程工具 · 发布时间: 5年前

内容简介:但是,无论这个东西在大数据时代有多么好用,基于其分布式特性,安装过程是非常繁琐的。 (在我这,不能容器化简单部署的,都叫繁琐。毕竟我不是专业运维。) 主要分几步:

简介

The Apache™ Hadoop® project develops open-source software for reliable, scalable, distributed computing.

HadoopApache 旗下的一个开源项目。 2006年项目发布之初,这个项目仅有HDFS和MapReduce两个组件; 而今,这个项目已经有了四个核心组件,加一个Alpha阶段的子项目。

  • Hadoop Common : The common utilities that support the other Hadoop modules.
  • Hadoop Distributed File System (HDFS™) : A distributed file system that provides high-throughput access to application data.
  • Hadoop YARN : A framework for job scheduling and cluster resource management.
  • Hadoop MapReduce : A YARN-based system for parallel processing of large data sets.
  • Hadoop Ozone : An object store for Hadoop.

Hadoop 是一个为了大数据存储(HDFS)和处理(MapReduce)而设计的软件。 它部署在多台计算机上,把它们连接成一个集群,并提供分布式的存储、计算解决方案与框架。 现在,这个名称更是代表了一个基于其分布式、集群化理念的生态,包括了 Apache 旗下的很多其它项目。

但是,无论这个东西在大数据时代有多么好用,基于其分布式特性,安装过程是非常繁琐的。 (在我这,不能容器化简单部署的,都叫繁琐。毕竟我不是专业运维。) 主要分几步:

  1. 下载
  2. 配置
  3. 分发并准备各节点
  4. 启动

下载

Apache Hadoop Dowload 页面,下载 Hadoop 软件包。 目前可选的稳定版有五个。

Version Release
2.9.2 2018-11-19
2.8.5 2018-09-15
3.1.1 2018-08-08
2.7.7 2018-05-31
3.0.3 2018-05-31

因为某些原因,选择了 2.8.5 之后,解压得到如下目录。

$ ls hadoop-2.8.5
bin  etc  include  lib  libexec  LICENSE.txt  NOTICE.txt  README.txt  sbin  share

接下来,需要修改 etc 目录下的配置文件。

配置

默认情况下, Hadoop 的配置都在 etc/hadoop/ 中,有默认值。 参考 example-confs ,从中选取需要的配置,改改就好。

这里还为了 Hadoop 准备了几个域名。

hadoop.example.com
hdfs.example.com
dn0.example.com
dn1.example.com
dn2.example.com

简单部署三个节点,不做多余而复杂的事,那么一共有五个配置文件需要修改。

core-site.xml

core-site.xml 主要是指定NameNode的位置。

<configuration>
    <property>
        <name>local.namenode</name>
        <value>hadoop.example.com</value>
    </property>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://${local.namenode}:8020</value>
        <description>The name of the default file system.  Either the
            literal string "local" or a host:port for NDFS.
        </description>
        <final>true</final>
    </property>
</configuration>

更多配置参考: https://hadoop.apache.org/docs/r2.8.5/hadoop-project-dist/hadoop-common/core-default.xml

hdfs-site.xml

hdfs-site.xml 是指定DataNode的情况。

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.name.dir</name>
        <value>/home/hadoop/hdfs/name</value>
        <description>Determines where on the local filesystem the DFS name node
            should store the name table.  If this is a comma-delimited list
            of directories then the name table is replicated in all of the
            directories, for redundancy. </description>
        <final>true</final>
    </property>
    <property>
        <name>dfs.data.dir</name>
        <value>/data/hadoop/hdfs/data</value>
        <description>Determines where on the local filesystem an DFS data node
            should store its blocks.  If this is a comma-delimited
            list of directories, then data will be stored in all named
            directories, typically on different devices.
            Directories that do not exist are ignored.
        </description>
        <final>true</final>
    </property>
    <property>
        <name>dfs.heartbeat.interval</name>
        <value>3</value>
        <description>Determines datanode heartbeat interval in seconds.
        </description>
    </property>
    <property>
        <name>dfs.http.address</name>
        <value>0.0.0.0:50070</value>
        <description>The name of the default file system.  Either the
            literal string "local" or a host:port for NDFS.
        </description>
        <final>true</final>
    </property>
    <property>
        <name>dfs.datanode.ipc.address</name>
        <value>0.0.0.0:8025</value>
        <description>
            The datanode ipc server address and port.
            If the port is 0 then the server will start on a free port.
        </description>
    </property>
</configuration>

其中, dfs.replication 是副本数量,默认 3 ;这里是小集群,所以选择 2 。 通常,副本数量就是在1、2、3、4中选择,再多并无意义。

dfs.data.dir 也很重要,需要指定为机器最大的硬盘,并确保 Hadoop 的运行用户(一般命名为 hadoop )对这个位置有读写权限。 比如,这里挂载了一块很大的硬盘到 /data 下,所以就选择 /data/hadoop/hdfs/data 。 如果集群中的大硬盘分区不同,需要针对性地去按节点修改。

更多配置参考: https://hadoop.apache.org/docs/r2.8.5/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

yarn-site.xml

yarn-site.xml 是Yarn框架的配置,这里主要是指定 yarn.resourcemanager.hostname

<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop.example.com</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
</configuration>

更多配置参考: https://hadoop.apache.org/docs/r2.8.5/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

slaves

slaves 文件主要是指定奴隶们……呃不,slave节点。 可以通过IP、域名、hostname(需要修改 /etc/hosts )的方式指定,这里用的是域名。

dn0.example.com
dn1.example.com
dn2.example.com

hadoop-env.sh

hadoop-env.sh 是指定 Hadoop 的运行环境。 这里有一个不指定就跑不起来的环境变量—— JAVA_HOME

--- a/hadoop-2.8.5/etc/hadoop/hadoop-env.sh
+++ b/hadoop-2.8.5/etc/hadoop/hadoop-env.sh
@@ -22,7 +22,7 @@
 # remote nodes.

 # The java implementation to use.
-export JAVA_HOME=${JAVA_HOME}
+export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

 # The jsvc implementation to use. Jsvc is required to run secure datanodes
 # that bind to privileged ports to provide authentication of data transfer

/usr/lib/jvm/java-8-openjdk-amd64 是Ubuntu 16.04上安装 openjdk-8-jdk 的默认位置。

分发与准备各节点

分发,就是把前面改过配置的整个软件包,复制到所有节点上。 以下为 ansible-playbook 示例。

---
- name: Create the user hadoop
  user:
    name: hadoop
    shell: /bin/bash
    generate_ssh_key: yes
    ssh_key_bits: 2048

# Configurate every ssh public key to every node
# with `ansible -m authorized_key`.
# For example:
# ansible hadoop -m authorized_key -a 'user=hadoop key="ssh-rsa A-COMPLEX-PUBLIC-KEY ansible-generated on HOSTNAME"'

- name: Disable ssh host checking
  shell: sed -i 's/#   StrictHostKeyChecking ask/    StrictHostKeyChecking no/g' /etc/ssh/ssh_config

- name: Copy hadoop
  copy:
    src: /tmp/hadoop-2.8.5
    dest: /opt/
    owner: hadoop
    group: hadoop

- name: Install openjdk-8-jdk
  apt:
    name: openjdk-8-jdk

- name: Add hadoop to PATH
  shell: echo 'export PATH=$PATH:/opt/hadoop-2.8.5/bin' > /etc/profile

最大的难点,是在每个节点都配置所有节点的ssh公钥,即注释内容。 先要获取所有节点的公钥,然后再循环配置。

要注意,前面提到了一些节点会有不同的配置,比如 dfs.data.dir 需要指定在节点最大的硬盘上。 这需要到对应节点去单独修改配置。

还有,为了保证DataNode在下载时显示正确的域名,需要把相关的节点hostname设置为对应的域名。

启动

安装和配置完成,就可以启动。 启动前,需要初始化NameNode。

hadoop namenode -format

初始化仅需要做一次,而启动关闭则可以反复执行。

# Start
/opt/hadoop-2.8.5/sbin/start-all.sh
# Stop
/opt/hadoop-2.8.5/sbin/stop-all.sh

这两个脚本都有 Deprecated 提示,但当前版本可以忽略。 他们的主要功能,是启动、关闭DFS和Yarn。

本节命令,都需要在新建的 hadoop 用户下执行。

配置systemd

在systemd中配置 Hadoop ,可以实现开机自启、方便管理。

添加一个 /etc/systemd/system/hadoop.service 文件:

[Unit]
Description=Hadoop start/stop

[Service]
User=hadoop
Group=hadoop
Type=oneshot
ExecStart=/opt/hadoop-2.8.5/sbin/start-all.sh
ExecStop=/opt/hadoop-2.8.5/sbin/stop-all.sh
RemainAfterExit=yes
Restart=on-failure
RestartSec=30

[Install]
WantedBy=multi-user.target

重载后生效。

systemctl daemon-reload
systemctl enable hadoop

此后, Hadoop 操作可以通过 systemctl 来管理。

systemctl start hadoop
systemctl stop hadoop
systemctl restart hadoop

本节命令,都需要在 root 用户下执行。

结果检查

Hadoop 启动后,有两类方式可以检查HDFS是否有效。 一是命令行,二是网页。

命令行可以检查进程是否正常启动。 比如,Master上可执行 jps 查看 Java 进程:

$ jps
5426 NameNode
6386 NodeManager
5895 SecondaryNameNode
27177 Jps
6203 ResourceManager
5628 DataNode

通过保存一个文件,可以测试HDFS是否正常工作。

hdfs dfs -put test.file /

通过 50070 端口(本例为 http://hadoop.example.com:50070 ),可以在网页访问 Hadoop 的信息查看页面。

问题

反复部署

在修改配置文件 etc/hadoop/*.xml ,调试刚启动的 Hadoop 时,有时也需要清理数据才能生效。 可能需要频繁执行 hadoop namenode -format 进行初始化。

还有些情况,需要删除所有节点的 dfs.data.dir 才能生效。 此乃天坑,切记勿乱。

反向DNS查询

一般的DNS查询,也就是正向查询,是指从域名取IP。 反向DNS查询,就是从IP取域名。

Hadoop 的配置中,即使给 dfs.http.address 配置域名,也会被替换为IP。 而对于不支持反向查询的DNS服务器来说,查不到域名,最终会有 host=<ip> 的错误。 这会导致DataNode启动成功,却无法连接、显示、使用。

为了避免这个问题,可以在Master节点的 /etc/hosts 中配置相关DataNode。

...
10.1.1.1 dn0.example.com
10.1.1.2 dn1.example.com
10.1.1.3 dn2.example.com

参考


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法分析-有效的学习方法(影印版)

算法分析-有效的学习方法(影印版)

Jeffrey J.McConnell / 高等教育出版社 / 2003-03-01 / 28.0

本书主要目标是提高读者关于算法对程序效率的影响等问题的认知水平,并培养读者分析程序中的算法所必需的技巧。各章材料以激发读者有效的、协同的学习方法的形式讲述。通过全面的论述和完整的数学推导,本书帮助读者最大限度地理解基本概念。 本书内容包括促使学生参与其中的大量程序设计课题。书中所有算法以伪码形式给出,使得具备条件表达式、循环与递归方面知识的读者均易于理解。本书以简洁的写作风格向读者介绍了兼具......一起来看看 《算法分析-有效的学习方法(影印版)》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具