在学习HDFS之前我们首先了解一下什么是hadoop?

 

hadoop中有3个核心组件:

分布式文件系统:HDFS

分布式运算编程框架:MAPREDUCE —— 实现在很多机器上分布式并行运算

分布式资源调度平台:YARN —— 帮用户调度大量的mapreduce程序,并合理分配运算资源

 

 

 

  hdfs整体运行机制:

     hdfs:

     分布式文件系统

     hdfs有着文件系统共同的特征:

有目录结构,顶层目录是:  /

                       系统中存放的就是文件

                       系统可以提供对文件的:创建、删除、修改、查看、移动等功能

 

 

hdfs跟普通的单机文件系统有区别:

hdfs的工作机制:

      (1)客户把一个文件存入hdfs,其实hdfs会把这个文件切块后,分散存储在N台linux机器系统中(负责存储文件块的角色:data node)<准确来说:切块的行为是由客户端决定的>

     (2)一旦文件被切块存储,那么,hdfs中就必须有一个机制,来记录用户的每一个文件的切块信息,及每一块的具体存储机器(负责记录块信息的角色是:name node)

     (3)为了保证数据的安全性,hdfs可以将每一个文件块在集群中存放多个副本(到底存几个副本,是由当时存入该文件的客户端指定的)

综述:一个hdfs系统,由一台运行了namenode的服务器,和N台运行了datanode的服务器组成!

 

   搭建hdfs分布式集群

 

    hdfs集群组成结构:

hdfs 9000端口是啥_大数据实战

 

 

一、首先需要准备N台linux服务器

        学习阶段,用虚拟机即可!

        先准备4台虚拟机:1个namenode节点  + 3 个datanode 节点

       (博主使用的是Vmware安装一台Centos然后克隆3台后,再进行修改  IP   网卡    主机名 hosts对应域名)

 

先来了解一下虚拟机的网络机制:

 

hdfs 9000端口是啥_分布式与集群_02

 

再了解一下HDFS的整体工作机制:

  

hdfs 9000端口是啥_hdfs 9000端口是啥_03

 

 

二、修改各台机器的主机名和ip地址

主机名:hdp-01  对应的ip地址:192.168.33.61

主机名:hdp-02  对应的ip地址:192.168.33.62

主机名:hdp-03  对应的ip地址:192.168.33.63

主机名:hdp-04  对应的ip地址:192.168.33.64

 

修改IP:

vi /etc/sysconfig/network-scripts/ifcfg-en33

hdfs 9000端口是啥_大数据实战_04

看到的上述图片已经修改过的,特别注意点:

      ONBOOT 要改成yes

      BOOTPROTO要改成static

      IPADDR     GATEWAP  NETMASK    要根据实际情况进行更改

      DNS1和网关地址一样即可

 

修改主机名:

vi /etc/hostname

 

修改hosts文件对应的主机名ip映射

vi /etc/sysconfig/hosts

 

三、从windows中用CRT软件进行远程连接

在windows中将各台linux机器的主机名配置到的windows的本地域名映射文件中:

c:/windows/system32/drivers/etc/hosts

192.168.33.61 hdp-01

192.168.33.62 hdp-02

192.168.33.63 hdp-03

192.168.33.64 hdp-04

 

 

用crt连接上后,修改一下crt的显示配置(字号,编码集改为UTF-8):

hdfs 9000端口是啥_hdfs_05

 

四、配置linux服务器的基础软件环境

 

 防火墙

关闭防火墙:service iptables stop 

关闭防火墙自启: chkconfig iptables off

 

若上述方法不能使用则:

   这是因为CentOS7版本后防火墙默认使用firewalld,因此在CentOS7中关闭防火墙使用以下命令,

//临时关闭

systemctl stop firewalld

//禁止开机启动

systemctl disable firewalld

Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.

Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

 开始安装软件的准备工作:

 

 (1)安装jdk:(hadoop体系中的各软件都是java开发的)

 

  • 利用alt+p 打开sftp窗口,然后将jdk压缩包拖入sftp窗口
  •  然后在linux中将jdk压缩包解压到/bigdata(自己创建)下
  •  配置环境变量:JAVA_HOME   PATH

 vi /etc/profile   在文件的最后,加入:

export JAVA_HOME=/root/apps/jdk1.8.0_60

export PATH=$PATH:$JAVA_HOME/bin

 

  1. 修改完成后,记得 source /etc/profile使配置生效
  2. 检验:在任意目录下输入命令: java -version 看是否成功执行
  3. 将安装好的jdk目录用scp命令拷贝到其他机器
  4. 将/etc/profile配置文件也用scp命令拷贝到其他机器并分别执行source命令

 

集群内主机的域名映射配置

 

在hdp-01上,vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.33.61   hdp-01

192.168.33.62   hdp-02

192.168.33.63   hdp-03

192.168.33.64   hdp-04

然后,将hosts文件拷贝到集群中的所有其他机器上

scp  /etc/hosts  hdp-02:/etc/

scp  /etc/hosts  hdp-03:/etc/

scp  /etc/hosts  hdp-04:/etc/

(SCP远程命令的使用    SCP   【-r】 当前目录或文件    目标地址或域名:目标文件夹下)

 

补充

提示:

如果在执行scp命令的时候,提示没有scp命令,则可以配置一个本地yum源来安装

  1. 先在虚拟机中配置cdrom为一个centos的安装镜像iso文件
  2. 在linux系统中将光驱挂在到文件系统中(某个目录)
  3. mkdir /mnt/cdrom
  4. mount -t iso9660 -o loop /dev/cdrom /mnt/cdrom
  5. 检验挂载是否成功: ls /mnt/cdrom
  6. 3、配置yum的仓库地址配置文件
  7. yum的仓库地址配置文件目录: /etc/yum.repos.d
  8. 先将自带的仓库地址配置文件批量更名:

hdfs 9000端口是啥_hadoop_06

 

  1. 然后,拷贝一个出来进行修改

hdfs 9000端口是啥_hadoop_07

hdfs 9000端口是啥_hdfs_08

  1. 修改完配置文件后,再安装scp命令:
  2. yum install openssh-clients -y

 

 

五、安装hdfs集群

    上传hadoop安装包到hdp-01

 

  1. 修改配置文件

要点提示

核心配置参数:

  1. 指定hadoop的默认文件系统为:hdfs
  2. 指定hdfs的namenode节点为哪台机器
  3. 指定namenode软件存储元数据的本地目录
  4. 指定datanode软件存放文件块的本地目录

 

hadoop的配置文件在:/root/apps/hadoop安装目录/etc/hadoop/

 

1) 修改hadoop-env.sh

    export JAVA_HOME=/root/apps/jdk1.8.0_60

 

2) 修改core-site.xml

<configuration>

<property>

<name>fs.defaultFS</name>

<value>hdfs://hdp-01:9000</value>

</property>

</configuration>

3) 修改hdfs-site.xml

<configuration>

    <property>

    <name>dfs.namenode.name.dir</name>

    <value>/root/hdpdata/name/</value>

    </property>


    <property>

    <name>dfs.datanode.data.dir</name>

    <value>/root/hdpdata/data</value>

    </property>


    <property>

    <name>dfs.namenode.secondary.http-address</name>

    <value>hdp-02:50090</value>

    </property>


    </configuration>

 

4) 拷贝整个hadoop安装目录到其他机器

 

scp -r /bigdata/hadoop-2.8.1 hdp-02:/bigdata/

scp -r /bigdata/hadoop-2.8.1 hdp-03:/bigdata/

scp -r /bigdata/hadoop-2.8.1 hdp-04:/bigdata/

5) 启动HDFS

 

所谓的启动HDFS,就是在对的机器上启动对的软件

要点

提示:

要运行hadoop的命令,需要在linux环境中配置HADOOP_HOME和PATH环境变量

vi /etc/profile

 

export JAVA_HOME=/root/apps/jdk1.8.0_60

export HADOOP_HOME=/root/apps/hadoop-2.8.1

export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

 

 

首先,初始化namenode的元数据目录

要在hdp-01上执行hadoop的一个命令来初始化namenode的元数据存储目录

hadoop namenode -format

  1. 创建一个全新的元数据存储目录
  2. 生成记录元数据的文件fsimage
  3. 生成集群的相关标识:如:集群id——clusterID

 

然后,启动namenode进程(在hdp-01上)

hadoop-daemon.sh start namenode

启动完后,首先用jps查看一下namenode的进程是否存在

 

然后,在windows中用浏览器访问namenode提供的web端口:50070

http://hdp-01:50070

hdfs 9000端口是啥_大数据实战_09

 

然后,启动众datanode们(在任意地方)

hadoop-daemon.sh start datanode

 

 

6) 用自动批量启动脚本来启动HDFS

  1. 先配置hdp-01到集群中所有机器(包含自己)的免密登陆 (详细步骤查看)
  2. 配完免密后,可以执行一次  ssh 0.0.0.0(进行第二个datanode的设置)
  3. 修改hadoop安装目录中/etc/hadoop/slaves(把需要启动datanode进程的节点列入)
hdp-01

hdp-02

hdp-03

hdp-04

 

     在hdp-01上用脚本:start-dfs.sh 来自动启动整个集群

     如果要停止,则用脚本:stop-dfs.sh

hdfs的客户端操作:

 

客户端的理解

hdfs的客户端有多种形式:

  1. 网页形式
  2. 命令行形式
  3. 客户端在哪里运行,没有约束,只要运行客户端的机器能够跟hdfs集群联网

 

文件的切块大小和存储的副本数量,都是由客户端决定!

所谓的由客户端决定,是通过配置参数来定的

hdfs的客户端会读以下两个参数,来决定切块大小、副本数量:

切块大小的参数: dfs.blocksize

副本数量的参数: dfs.replication

 

上面两个参数应该配置在客户端机器的hadoop目录中的hdfs-site.xml中配置

<property>

<name>dfs.blocksize</name>

<value>64m</value>

</property>


<property>

<name>dfs.replication</name>

<value>2</value>

</property>

hdfs客户端的常用操作命令

上传文件到hdfs中

          hadoop fs -put /本地文件  /aaa

 

 下载文件到客户端本地磁盘

          hadoop fs -get /hdfs中的路径   /本地磁盘目录

 

  在hdfs中创建文件夹

        hadoop fs -mkdir  -p /aaa/xxx

 

移动hdfs中的文件(更名)

     hadoop fs -mv /hdfs的路径1  /hdfs的另一个路径2

 

复制hdfs中的文件到hdfs的另一个目录

      hadoop fs -cp /hdfs路径_1  /hdfs路径_2

 

 

删除hdfs中的文件或文件夹

         hadoop fs -rm -r /aaa

 

 

查看hdfs中的文本文件内容

    hadoop fs -cat /demo.txt

    hadoop fs -tail -f /demo.txt