Hadoop:11.Apache HDFS搭建(单Master节点)

环境

[09:10:01 root@ceshi-01 ~ $]cat /etc/system-release
CentOS Linux release 7.6.1810 (Core)

[09:10:19 root@ceshi-01 ~ $]hadoop version
Hadoop 3.1.2
Source code repository https://github.com/apache/hadoop.git -r 1019dde65bcf12e05ef48ac71e84550d589e5d9a
Compiled by sunilg on 2019-01-29T01:39Z
Compiled with protoc 2.5.0
From source with checksum 64b8bdd4ca6e77cce75a93eb09ab2a9
This command was run using /home/hadoop-3.1.2/share/hadoop/common/hadoop-common-3.1.2.jar

简介

HDFS 的守护进程包括:NameNode, SecondaryNameNode, and DataNode
YARN 的守护进程包括:ResourceManager, NodeManager, and WebAppProxy
如果要使用 MapReduce,则 MapReduce Job History Server 也将运行
在大型集群里,他们通常运行在不同的节点上

配置文件

只读默认配置文件:core-default.xml, hdfs-default.xml, yarn-default.xml and mapred-default.xml
具体节点的配置文件:etc/hadoop/core-site.xml, etc/hadoop/hdfs-site.xml, etc/hadoop/yarn-site.xml and etc/hadoop/mapred-site.xml
此外您可以通过编辑 etc/hadoop/hadoop-env.sh and etc/hadoop/yarn-env.sh 设定特定的值来使用

第零步:准备工作

1.关闭系统防火墙和 SELinux

setenforce 0
sed -i -r "/^SELINUX=/c SELINUX=disabled" /etc/selinux/config
which systemctl && systemctl stop firewalld
which systemctl && systemctl disable firewalld
which systemctl && systemctl stop iptables || service iptables stop
which systemctl && systemctl disable iptables || chkconfig iptables off

2.所有服务器设置 hosts

192.168.30.111 ceshi-01
192.168.30.112 ceshi-02
192.168.30.113 ceshi-03
192.168.30.114 ceshi-04
192.168.30.114 ceshi-05
192.168.30.114 ceshi-06

3.设置互信

## 要求 Master 节点可以免密登录到 Worker 节点和登录本机
## 生成秘钥
ssh-keygen

##
ssh-copy-id ceshi-01
ssh-copy-id ceshi-02
ssh-copy-id ceshi-03
ssh-copy-id ceshi-04
ssh-copy-id ceshi-05
ssh-copy-id ceshi-06

第一步:下载

https://hadoop.apache.org/releases.html

1.下载

wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.1.2/hadoop-3.1.2.tar.gz
tar vxzf hadoop-3.1.2.tar.gz

包括以下模块:
    Hadoop Common:支持 Hadoop 模块的常用命令
    Hadoop Distributed File System (HDFS™):一种分布式文件系统,可以提供高吞吐访问
    Hadoop YARN:作业调度和集群资源管理框架
    Hadoop MapReduce:基于 YARN 的系统,用于并行处理大型数据集
    Hadoop Ozone:Hadoop 的对象存储
    Hadoop Submarine:Hadoop 机器学习引擎

2.设置 JAVA_HOME 变量

根据自己情况修改路径

## 此文件在 Hadoop 文件夹内
vim etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr

3.设置 HADOOP_HOME 和 HADOOP_HDFS_HOME 变量

根据自己实际情况修改路径

echo 'export HADOOP_HOME=/home/hadoop-3.1.2/' >> /root/.bash_profile 
echo 'PATH=$PATH:$HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> /root/.bash_profile
source /root/.bash_profile

echo 'export HADOOP_HDFS_HOME=/home/hadoop-3.1.2/' >> /root/.bash_profile 
echo 'PATH=$PATH:$HOME/bin:HADOOP_HDFS_HOME/bin:HADOOP_HDFS_HOME/sbin' >> /root/.bash_profile
source /root/.bash_profile

4.运行命令以验证

## 此命令将显示 hadoop 脚本使用说明
hadoop

第二步:修改配置文件

https://hadoop.apache.org/docs/r3.1.2/hadoop-project-dist/hadoop-common/ClusterSetup.html

1.设置 Hadoop 守护进程的环境变量

JAVA_HOME 必须设置

以下两个路径可以不修改

## In most cases, you should specify the HADOOP_PID_DIR and HADOOP_LOG_DIR directories such that they can only be written to by the users that are going to run the hadoop daemons. 
## Otherwise there is the potential for a symlink attack.
## 在大多数情况下,您应该指定HADOOP_PID_DIR和HADOOP_LOG_DIR目录,以便它们只能由将要运行hadoop守护程序的用户写入。否则就有可能发生符号链接攻击。

cp etc/hadoop/hadoop-env.sh etc/hadoop/hadoop-env.sh.bak
cat <<\EOF >>etc/hadoop/hadoop-env.sh
## 设置 JAVA_HOME
export JAVA_HOME=/usr
## 存储守护程序日志文件。如果日志文件不存在,则会自动创建
export HADOOP_LOG_DIR=/var/log/hadoop/
## 设置守护进程的进程标识文件目录
export HADOOP_PID_DIR=/tmp
EOF

2.设置 Hadoop 守护进程 - core-site.xml

根据自己情况修改 NameNode URI

根据自己情况修改路径

cp etc/hadoop/core-site.xml etc/hadoop/core-site.xml.bak
cat <<\EOF >>etc/hadoop/core-site.xml
<configuration>
    <property>
        <!--指定 NameNode URI-->
        <name>fs.defaultFS</name>
        <value>hdfs://192.168.30.111:9000</value>
    </property>
    <property>
        <!--指定 NameNode 元数据目录(此文件夹内文件丢失将会导致启动失败)-->
        <name>hadoop.tmp.dir</name>
        <value>/home/Data/nn/</value>
    </property>
    <property>
        <!--用来读写 SequenceFiles 的缓冲区大小为131072(128KB)-->
        <name>io.file.buffer.size</name>
        <value>131072</value>
    </property>
</configuration>
EOF

3.设置 Hadoop 守护进程 - hdfs-site.xml

修改默认副本数量

修改路径

修改块大小

cp etc/hadoop/hdfs-site.xml etc/hadoop/hdfs-site.xml.bak
cat <<\EOF >>etc/hadoop/hdfs-site.xml
<configuration>
<!--####################################################################################-->
<!--########## 关于 NameNode 参数 ##########                                            -->
<!--####################################################################################-->
<!--## dfs.hosts / dfs.hosts.exclude        允许和排除的 DataNodes 列表-->
    <property>
        <!--指定 HDFS 默认副本数为1-->
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <!--NameNode 持久存储命令空间和事务日志在本地文件系统上的路径-->
        <!--可以以逗号分隔指定多个路径,那么将在所有目录中复制,以实现冗余-->
        <name>dfs.namenode.name.dir</name>
        <value>/home/Data/nn/</value>
    </property>
    <property>
        <!-- 块大小为268435456(256MB)(对于大型文件系统,HDFS块大小为256MB)-->
        <name>dfs.blocksize</name>
        <value>134217728</value>
    </property>
    <property>
        <!--用来处理来自 DataNode RPC 的线程数为100-->
        <name>dfs.namenode.handler.count</name>
        <value>100</value>
    </property>

<!--####################################################################################-->
<!--## 关于 DataNode 参数                                                            -->
<!--####################################################################################-->
    <property>
        <!--逗号分隔的 DataNode 在本地文件系统上的文件列表,数据会存储在所有目录中-->
        <name>dfs.datanode.data.dir</name>
        <value>/home/Data/nd/</value>
    </property>
</configuration>
EOF

第三步:手动启动 HDFS 集群(和第四步任选一)

1.启动 HDFS 集群

## 1.第一次启动 HDFS 时,必须对其进行格式化,将新的分布式文件系统格式化为 hdfs
$HADOOP_HOME/bin/hdfs namenode -format <cluster_name>

## 2.在指定节点上运行用下命令启动 HDFS NameNode
$HADOOP_HOME/bin/hdfs --daemon start namenode

## 3.在每个指定节点上执行以下命令启动 HDFS DataNode
$HADOOP_HOME/bin/hdfs --daemon start datanode

## 4.如果配置了 etc/hadoop/workers 则可以使用以下启动脚本启动所有节点的 HDFS 进程
$HADOOP_HOME/sbin/start-dfs.sh

2.停止 HDFS 集群

## 1.在指定节点上执行以下命令停止 NameNode
$HADOOP_HOME/bin/hdfs --daemon stop namenode

## 2.在指定节点上执行以下命令停止 DataNode
$HADOOP_HOME/bin/hdfs --daemon stop datanode

## 3.如果设置了 etc/hadoop/workers 可以使用以下命令停止所有节点 HDFS 进程
$HADOOP_HOME/sbin/stop-dfs.sh

3.登录 Web 页面查看集群信息

## NameNode Web UI:
http://192.168.30.111:9870

## DataNode Web UI:
http://192.168.30.111:9864

4.通过 Hadoop Shell 查看和操作目录

hadoop fs -ls /
hadoop fs -mkdir /test

第四步:配置 etc/hadoop/workers 通过一键脚本启动(和第三步任选一)

1.修改配置文件(by nn)

## 每行一个主机名,不要有空格(此文件定义所有需要启动 DataNode 实例的主机列表)
## NameDone 和 SecondaryNameNode 默认为当前主机
cat <<\EOF >etc/hadoop/workers
ceshi-01
ceshi-02
ceshi-03
EOF

## 在顶部添加以下行
vim $HADOOP_HOME/sbin/start-dfs.sh
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=root

## 在顶部添加以下行
vim $HADOOP_HOME/sbin/stop-dfs.sh
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=root

2.第一次启动 HDFS 时,必须对其进行格式化,将新的分布式文件系统格式化为 hdfs

$HADOOP_HOME/bin/hdfs namenode -format <cluster_name>

3.使用命令启动和停止集群

## 启动所有节点的 HDFS 进程
$HADOOP_HOME/sbin/start-dfs.sh

## 停止所有节点 HDFS 进程
$HADOOP_HOME/sbin/stop-dfs.sh

    ## 主节点执行启动命令
    [09:14:46 root@ceshi-01 ~ $]$HADOOP_HOME/sbin/start-dfs.sh
    Starting namenodes on [ceshi-01]
    ceshi-01: WARNING: /var/log/hadoop/ does not exist. Creating.
    Starting datanodes
    ceshi-02: WARNING: /var/log/hadoop/ does not exist. Creating.
    ceshi-03: WARNING: /var/log/hadoop/ does not exist. Creating.
    Starting secondary namenodes [ceshi-01]

    ## 主节点查看进程
    [09:45:36 root@ceshi-01 ~ $]jps
    25842 NameNode
    26132 DataNode
    26375 SecondaryNameNode
    26538 Jps

    ## Worker 节点查看进程
    [09:16:08 root@ceshi-02 ~ $]jps
    12580 Jps
    12312 DataNode

    ## 主节点执行停止命令(执行成功后所有节点 HDFS 相关进程退出)
    [09:17:02 root@ceshi-01 ~ $]$HADOOP_HOME/sbin/stop-dfs.sh
    Stopping namenodes on [ceshi-01]
    Stopping datanodes
    Stopping secondary namenodes [ceshi-01]

4.登录 Web 页面查看集群信息

## NameNode Web UI:
http://192.168.30.111:9870

## DataNode Web UI:
http://192.168.30.111:9864

附录:

## 获取 NameNodes 列表
"${HADOOP_HDFS_HOME}/bin/hdfs" getconf -namenodes

##

附录:Web 接口

Daemon          Web Interface           Notes
NameNode	    http://nn_host:port/	Default HTTP port is 9870.
DataNode        http://nd_host:port/    Default HTTP port is 9864.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值