一、hadoop简介

1.说明

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统( Distributed File System),其中一个组件是HDFS(Hadoop Distributed File System)。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。

2.优点

Hadoop是一个能够对大量数据进行分布式处理的软件框架。 Hadoop 以一种可靠、高效、可伸缩的方式进行数据处理 。
Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。
Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度 。
Hadoop 还是可伸缩的,能够处理 PB 级数据。
此外,Hadoop 依赖于社区服务,因此它的成本比较低,任何人都可以使用 。
Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。
它主要有以下几个优点 :

1.高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖  。
2.高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中  。
3.高效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快 。
4.高容错性。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配  。
5.低成本。与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低 。

Hadoop带有用Java语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写,比如 C++ 。

3.核心架构

Hadoop 由许多元素构成。其最底部是 Hadoop Distributed File System(HDFS),它存储 Hadoop 集群中所有存储节点上的文件。HDFS的上一层是MapReduce 引擎,该引擎由 JobTrackers 和 TaskTrackers 组成。通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台的所有技术核心

HDFS
对外部客户机而言,HDFS就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,等等。
但是 HDFS 的架构是基于一组特定的节点构建的,这是由它自身的特点决定的。
这些节点包括 NameNode(仅一个),它在 HDFS 内部提供元数据服务;
DataNode,它为 HDFS 提供存储块。由于仅存在一个 NameNode,因此这是 HDFS 1.x版本的一个缺点(单点失败)。
在Hadoop 2.x版本可以存在两个NameNode,解决了单节点故障问题
NameNode
NameNode 是一个通常在 HDFS 实例中的单独机器上运行的软件。
它负责管理文件系统名称空间和控制外部客户机的访问。
NameNode 决定是否将文件映射到 DataNode 上的复制块上。
对于最常见的 3 个复制块,第一个复制块存储在同一机架的不同节点上,最后一个复制块存储在不同机架的某个节点上
DataNode
DataNode 也是一个通常在 HDFS实例中的单独机器上运行的软件。
Hadoop 集群包含一个 NameNode 和大量 DataNode。
DataNode 通常以机架的形式组织,机架通过一个交换机将所有系统连接起来。
Hadoop 的一个假设是:机架内部节点之间的传输速度快于机架间节点的传输速度

二、 HDFS分布式文件存储系统单机版部署

1.安装

[root@server1 ~]# ls
hadoop-3.2.1.tar.gz  jdk-8u181-linux-x64.tar.gz
[root@server1 ~]# mv hadoop-3.2.1.tar.gz jdk-8u181-linux-x64.tar.gz /home/hadoop/
[root@server1 ~]# su - hadoop
Last login: Thu Jul  8 23:36:31 EDT 2021 on pts/0
[hadoop@server1 ~]$ ls
hadoop-3.2.1.tar.gz  jdk-8u181-linux-x64.tar.gz
[hadoop@server1 ~]$ tar zxf jdk-8u181-linux-x64.tar.gz 
[hadoop@server1 ~]$ ls
hadoop-3.2.1.tar.gz  jdk1.8.0_181  jdk-8u181-linux-x64.tar.gz
[hadoop@server1 ~]$ ln -s jdk1.8.0_181/ java
[hadoop@server1 ~]$ ls
hadoop-3.2.1.tar.gz  java  jdk1.8.0_181  jdk-8u181-linux-x64.tar.gz
[hadoop@server1 ~]$ ll
total 532076
-rw-r--r-- 1 root   root   359196911 Jul  8 23:35 hadoop-3.2.1.tar.gz
lrwxrwxrwx 1 hadoop hadoop        13 Jul  8 23:39 java -> jdk1.8.0_181/
drwxr-xr-x 7 hadoop hadoop       245 Jul  7  2018 jdk1.8.0_181
-rw-r--r-- 1 root   root   185646832 Jul  8 23:35 jdk-8u181-linux-x64.tar.gz
[hadoop@server1 ~]$ tar zxf hadoop-3.2.1.tar.gz 
[hadoop@server1 ~]$ ln -s hadoop-3.2.1 hadoop

在这里插入图片描述在这里插入图片描述

2.启动集群

以下示例将未包装的 conf 目录复制为输入,然后查找并显示给定常规表达式的每个匹配项。输出已写入给定的输出目录。

[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ cd etc/hadoop/
[hadoop@server1 hadoop]$ vim hadoop-env.sh 
export JAVA_HOME=/home/hadoop/java
# Location of Hadoop.  By default, Hadoop will attempt to determine
# this location based upon its execution path.
export HADOOP_HOME=/home/hadoop/hadoop
[hadoop@server1 hadoop]$ mkdir input
[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop
[hadoop@server1 hadoop]$ cp etc/hadoop/*.xml input/
[hadoop@server1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep input output 'dfs[a-z.]+' ##使用系统给定的jar包做测试

[hadoop@server1 hadoop]$ ls input/
capacity-scheduler.xml  hdfs-site.xml    kms-site.xml
core-site.xml           httpfs-site.xml  mapred-site.xml
hadoop-policy.xml       kms-acls.xml     yarn-site.xml
[hadoop@server1 hadoop]$ cd output/
[hadoop@server1 output]$ ls
part-r-00000  _SUCCESS
[hadoop@server1 output]$  cat *
1	dfsadmin
[hadoop@server1 output]$ 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、伪分布式存储系统部署

1.编辑配置文件

Hadoop 也可以在伪分布式模式下的单节点上运行,其中每个 Hadoop daemon 在单独的 Java 进程中运行。
[hadoop@server1 output]$ cd ..
[hadoop@server1 hadoop]$ cd etc/hadoop/
[hadoop@server1 hadoop]$ vim core-site.xml
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>
                  
[hadoop@server1 hadoop]$ vim hdfs-site.xml 
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>  ##存储副本数,默认是三份,现在因为我们用一个节点做伪分布式,因此设置为1份
    </property>
</configuration>

在这里插入图片描述

2. 做本地免密

默认情况下,hdfs会通过免密连接worker节点(数据存储节点)来启动相应的进程。在hadoop/etc/目录下会有workers的文件,文件中指定了worker节点

[hadoop@server1 hadoop]$ ssh-keygen  ##本地免密
[hadoop@server1 hadoop]$ ssh-copy-id localhost
[hadoop@server1 hadoop]$ ll workers 
-rw-r--r-- 1 hadoop hadoop 10 Sep 10  2019 workers
[hadoop@server1 hadoop]$ cat workers 
localhost
[hadoop@server1 hadoop]$ ssh localhost
Last login: Fri Jul  9 00:53:18 2021 from localhost
[hadoop@server1 ~]$ logout
Connection to localhost closed.
[hadoop@server1 hadoop]$ 

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

3. 启动进程

[hadoop@server1 hadoop]$ bin/hdfs namenode -format ##格式化文件系统,产生的数据存储在/tmp/目录中
[hadoop@server1 hadoop]$ id 
uid=1000(hadoop) gid=1000(hadoop) groups=1000(hadoop)
[hadoop@server1 hadoop]$ sbin/start-dfs.sh  ##启动NameNode进程和DataNode进程
Starting namenodes on [localhost]
Starting datanodes
Starting secondary namenodes [server1]

[hadoop@server1 hadoop]$ cd
[hadoop@server1 ~]$ vim .bash_profile 
[hadoop@server1 ~]$ tail -n4 .bash_profile 
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$HOME/java/bin #设置环境变量
export PATH
[hadoop@server1 ~]$ source .bash_profile 
[hadoop@server1 ~]$ jps		##显示当前系统开启的java进程
14419 DataNode		#namenode节点上缓存的是整个分布式文件系统的元数据,datanode存储的是真正的数据,当NameNode挂掉后,SecondaryNameNode会接管。
14604 SecondaryNameNode
14828 Jps
14318 NameNode
[hadoop@server1 ~]$ netstat -antlp

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4. 访问网页进行测试

访问网页进行测试: http://172.25.15.1:9870

在这里插入图片描述

5. 创建存储目录

[hadoop@server1 ~]$ cd hadoop/
[hadoop@server1 hadoop]$ bin/hdfs
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir /user
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir /user/hadoop ##相当于创建用户在分布式文件系统中的家目录
[hadoop@server1 hadoop]$ bin/hdfs dfs -ls
[hadoop@server1 hadoop]$ ls
bin  etc  include  input  lib  libexec  LICENSE.txt  logs  NOTICE.txt  output  README.txt  sbin  share
[hadoop@server1 hadoop]$ rm -fr output/
[hadoop@server1 hadoop]$ bin/hdfs dfs -put input ##将input目录中的内容上传到分布式文件存储系统中

启动分布式文件系统时要保证所有节点时间必须同步,而且解析要有,否则会报错。并且分布式文件系统中依然不能提前创建output目录,网页要保证之前没有output目录.
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[hadoop@server1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount input output

在这里插入图片描述
在这里插入图片描述

6.复制输出文件到本地文件系统

[hadoop@server1 hadoop]$ bin/hdfs dfs -ls
[hadoop@server1 hadoop]$ bin/hdfs dfs -cat output/*	#词频统计,直接列出
[hadoop@server1 hadoop]$ bin/hdfs dfs -get output 	#下载下来
2021-05-11 05:23:58,659 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
[hadoop@server1 hadoop]$ ls
bin  etc  include  lib  libexec  LICENSE.txt  logs  NOTICE.txt  output  README.txt  sbin  share
[hadoop@server1 hadoop]$ cd output/
[hadoop@server1 output]$ cat *	#查看所有

[hadoop@server1 output]$ ls
part-r-00000  _SUCCESS
[hadoop@server1 output]$ cd ..
[hadoop@server1 hadoop]$ rm -fr output/ ##删除本地存储,不会删除分布式存储系统中的存储
[hadoop@server1 hadoop]$ bin/hdfs dfs -rm -r output ##删除分布式存储系统中的存储
Deleted output

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

四、完全分布式存储系统部署

1.开启两个新的虚拟机server2、server3

(1)在新开启的虚拟机上同样创建hadoop用户
(2)server1上的hdfs先停掉
(3)搭建nfs文件共享系统,server1为nfs服务器
(4)server2和server3挂载server1的hadoop目录到指定目录下从而实现数据同步
[hadoop@server1 hadoop]$ sbin/stop-dfs.sh
Stopping namenodes on [localhost]
Stopping datanodes
Stopping secondary namenodes [server1]
[hadoop@server1 hadoop]$ su - root
Password: 
Last login: Thu Jul  8 23:05:33 EDT 2021 from foundation15.ilt.example.com on pts/0
[root@server1 ~]# yum install -y nfs-utils

server2 server3
[root@server2 ~]# useradd hadoop
[root@server2 ~]# echo westos | passwd --stdin hadoop
Changing password for user hadoop.
passwd: all authentication tokens updated successfully.
[root@server2 ~]# yum install -y nfs-utils
[root@server3 ~]# useradd hadoop
[root@server3 ~]# echo westos | passwd --stdin hadoop
Changing password for user hadoop.
passwd: all authentication tokens updated successfully.
[root@server3 ~]# yum install -y nfs-utils

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.编辑文件共享策略,指定hadoop用户

[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop
[hadoop@server1 hadoop]$ sbin/stop-dfs.sh 
Stopping namenodes on [localhost]
Stopping datanodes
Stopping secondary namenodes [server1]
[hadoop@server1 hadoop]$ logout
[root@server1 ~]# yum install -y nfs-utils
[root@server1 ~]# vim /etc/exports
/home/hadoop    *(rw,anonuid=1000,anongid=1000) 
[root@server1 ~]# systemctl start nfs
[root@server1 ~]# exportfs -r 
[root@server1 ~]# exportfs -rv
exporting *:/home/hadoop
[root@server1 ~]# showmount -e
Export list for server1:
/home/hadoop *
[root@server1 ~]# 

在这里插入图片描述

3. 查看同步是否生效

server2

[root@server2 ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@server2 ~]# id hadoop
uid=1000(hadoop) gid=1000(hadoop) groups=1000(hadoop)
[root@server2 ~]# mount 172.25.15.1:/home/hadoop/ /home/hadoop/
[root@server2 ~]# df
Filesystem               1K-blocks    Used Available Use% Mounted on
/dev/mapper/rhel-root     17811456 1166520  16644936   7% /
devtmpfs                    929012       0    929012   0% /dev
tmpfs                       941036       0    941036   0% /dev/shm
tmpfs                       941036   17008    924028   2% /run
tmpfs                       941036       0    941036   0% /sys/fs/cgroup
/dev/vda1                  1038336  148208    890128  15% /boot
tmpfs                       188208       0    188208   0% /run/user/0
172.25.15.1:/home/hadoop  17811456 3001600  14809856  17% /home/hadoop
[root@server2 ~]# 

在这里插入图片描述

server3

[root@server3 ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@server3 ~]# id hadoop
uid=1000(hadoop) gid=1000(hadoop) groups=1000(hadoop)
[root@server3 ~]# mount 172.25.15.1:/home/hadoop/ /home/hadoop/
[root@server3 ~]# df
Filesystem               1K-blocks    Used Available Use% Mounted on
/dev/mapper/rhel-root     17811456 1166520  16644936   7% /
devtmpfs                    929012       0    929012   0% /dev
tmpfs                       941036       0    941036   0% /dev/shm
tmpfs                       941036   17008    924028   2% /run
tmpfs                       941036       0    941036   0% /sys/fs/cgroup
/dev/vda1                  1038336  148208    890128  15% /boot
tmpfs                       188208       0    188208   0% /run/user/0
172.25.15.1:/home/hadoop  17811456 3001600  14809856  17% /home/hadoop
[root@server3 ~]# 

在这里插入图片描述

在server1上修改hadoop相关配置文件、删除/tmp/目录下上次初始化产生的文件并重新初始化、启动hdfs

[hadoop@server1 ~]$ cd hadoop/etc/hadoop/
[hadoop@server1 hadoop]$ vim core-site.xml 
[hadoop@server1 hadoop]$ vim workers 
[hadoop@server1 hadoop]$ vim hdfs-site.xml
[hadoop@server1 hadoop]$ cd ..
[hadoop@server1 hadoop]$ cd ..
[hadoop@server1 hadoop]$ bin/hdfs namenode -format
[hadoop@server1 hadoop]$ ssh 172.25.15.2
The authenticity of host '172.25.15.2 (172.25.15.2)' can't be established.
ECDSA key fingerprint is SHA256:OSdVXtO5BVPkuh1MYLNhhVkGDiLkFmrjDSo8ysMRRr0.
ECDSA key fingerprint is MD5:f4:9e:26:78:0e:ef:5c:8e:cd:08:f5:5a:15:d1:0e:3c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.25.15.2' (ECDSA) to the list of known hosts.
[hadoop@server2 ~]$ ssh 172.25.15.3
The authenticity of host '172.25.15.3 (172.25.15.3)' can't be established.
ECDSA key fingerprint is SHA256:6N3DRBCV5LeHzl8RGj3iOtnqVL+xzKNRJc0J+jz/yqc.
ECDSA key fingerprint is MD5:2d:df:2c:de:6a:e4:6b:bd:b9:49:da:a1:31:43:7b:57.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.25.15.3' (ECDSA) to the list of known hosts.
[hadoop@server3 ~]$ ssh 172.25.15.1
Last login: Fri Jul  9 00:53:37 2021 from localhost

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

启动

[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ sbin/start-dfs.sh
Starting namenodes on [server1]
Starting datanodes
Starting secondary namenodes [server1]

[root@server2 ~]# su - hadoop
Last login: Fri Jul  9 02:29:17 EDT 2021 from server1 on pts/1
[hadoop@server2 ~]$ cd hadoop
[hadoop@server2 hadoop]$ jps
14178 Jps
14089 DataNode
[hadoop@server2 hadoop]$ 

[root@server3 ~]# su - hadoop
Last login: Fri Jul  9 02:29:40 EDT 2021 from server2 on pts/1
[hadoop@server3 ~]$ cd hadoop
[hadoop@server3 hadoop]$ jps
14148 Jps
14056 DataNode
[hadoop@server3 hadoop]$ 

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

测试浏览器访问http://172.25.15.1:9870/

在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐