Hadoop#分布式存储HDFS集群的部署使用

分布式存储hdfs

一、Hadoop

在这里插入图片描述

1、简介

Hadoop是一个由Apache基金会所开发的分布式系统基础架构,充分利用集群的威力进行高速运算和存储,Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),其中一个组件是HDFS,HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序

2、优点

高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖。
  高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。
  高效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
  高容错性。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。
  低成本。与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低。
  Hadoop带有用Java语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写,比如 C++ 。

3、核心架构

在这里插入图片描述

Hadoop 由许多元素构成。其最底部是 Hadoop Distributed File System(HDFS),它存储 Hadoop 集群中所有存储节点上的文件。HDFS的上一层是MapReduce 引擎,通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台的所有技术核心
HDFS
对外部客户机而言,HDFS就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,等等。这些节点包括 NameNode,它在 HDFS 内部提供元数据服务;DataNode,它为 HDFS 提供存储块。存储在 HDFS 中的文件被分成块,然后将这些块复制到多个计算机中
NameNode
NameNode 是一个通常在 HDFS 实例中的机器上运行的软件。它负责管理文件系统名称空间和控制外部客户机的访问。
DataNode
DataNode 也是一个通常在 HDFS实例中的单独机器上运行的软件,DataNode 响应来自HDFS 客户机的读写请求。它们还响应来自 NameNode 的创建、删除和复制块的命令

4、发行版本

Hadoop 三大发行版本: Apache、Cloudera、Hortonworks
Apache版本最原始(最基础)的版本,对于入门学习最好。
Cloudera在大型互联网企业中用的较多。 CDH
Hortonworks文档较好。 CDP

5、部署模式

单机(本地)模式:这种模式在一台单机上运行,没有分布式文件系统,而是直接读写本地操作系统的文件系统。在单机模式(standalone)中不会存在守护进程,所有东西都运行在一个JVM上。这里同样没有DFS,使用的是本地文件系统。单机模式适用于开发过程中运行MapReduce程序,这也是最少使用的一个模式  
  伪分布式模式:也是在一台单机上运行,但用不同的Java进程模仿分布式运行中的各类结点(NameNode,DataNode等),伪分布式(Pseudo)适用于开发和测试环境,在这个模式中,所有守护进程都在同一台机器上运行
  全分布式模式:全分布模式通常被用于生产环境,使用N台主机组成一个Hadoop集群,Hadoop守护进程运行在每台主机之上。这里会存在Namenode运行的主机,Datanode运行的主机,以及tasktracker运行的主机。在分布式环境下,主节点和从节点会分开

二、集群部署

1、环境准备

四台服务器如下:
node-1:10.0.1.20
node-2:10.0.1.21
node-3:10.0.1.22
node-4:10.0.1.23
关闭防火墙,关闭selinux

2、本地解析(所有节点)

[root@node-1 ~]# cat /etc/hosts
10.0.1.20 node-1
10.0.1.21 node-2
10.0.1.22 node-3
10.0.1.23 node-4

3、安装jdk环境(所有节点)

1.下载安装包
2.解压安装
[root@node-1 ~]# tar xf jdk-9.0.1_linux-x64_bin.tar.gz -C /usr/local/
[root@node-1 ~]# mv /usr/local/jdk-9.0.1/ /usr/java
[root@node-1 ~]# vi /etc/profile
JAVA_HOME=/usr/java
PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH
export JAVA_HOME PATH
[root@node-1 ~]# source /etc/profile
[root@node-1 ~]# java -version
java version “9.0.1”
Java™ SE Runtime Environment (build 9.0.1+11)
Java HotSpot™ 64-Bit Server VM (build 9.0.1+11, mixed mode

4、免密登录(所有节点)互相做免密,自己和自己也要做免密

[root@node-1 ~]# ssh-keygen
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:
SHA256:eLAtS5mKNQ9aPhakBEVHYBctZ3BqE8Bridiq8Nz9ubo root@node-1
The key’s randomart image is:
±–[RSA 2048]----+
|.+*+B+. |
| o.o.++ |
|.o.o=+. |
|o.=+ . B |
| o. * B S |
|o * B + |
|ooo.=.o |
|. o… . |
| E++. |
±—[SHA256]-----+
[root@node-1 ~]# ssh-copy-id -i node-2
[root@node-1 ~]# ssh-copy-id -i node-3
[root@node-1 ~]# ssh-copy-id -i node-4

5、下载hadoop(所有节点)

[root@node-1 ~]# wget http://mirror.bit.edu.cn/apache/hadoop/core/hadoop-3.3.0/hadoop-3.3.0.tar.gz
[root@node-1 ~]# tar xf hadoop-3.3.0.tar.gz -C /opt/
[root@node-1 ~]# mv /opt/hadoop-3.3.0/ /opt/hadoop

6、添加环境变量(所有节点)

[root@node-1 ~]# vi ~/.bash_profile
PATH= P A T H : PATH: PATH:HOME/bin:/opt/hadoop/bin
[root@node-1 ~]# source ~/.bash_profile
[root@node-1 ~]# hadoop version
Hadoop 3.3.0
Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r aa96f1871bfd858f9bac59cf2a81ec470da649af
Compiled by brahma on 2020-07-06T18:44Z
Compiled with protoc 3.7.1
From source with checksum 5dc29b802d6ccd77b262ef9d04d19c4
This command was run using /opt/hadoop/share/hadoop/common/hadoop-common-3.3.0.jar

7、namenode节点部署(node-1)

创建对应的目录
[root@node-1 ~]# mkdir -p /data/hdfs/{tmp,var,logs,dfs,data,name,checkpoint,edits}
修改配置文件
[root@node-1 ~]# cat /opt/hadoop/etc/hadoop/core-site.xml

<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> fs.checkpoint.period 3600 fs.checkpoint.size 67108864 fs.defaultFS hdfs://node-1:9000 hadoop.tmp.dir file:/data/hdfs/tmp hadoop.http.staticuser.user root [root@node-1 ~]# cat /opt/hadoop/etc/hadoop/workers node-1 node-2 node-3 node-4 [root@node-1 ~]# cat /opt/hadoop/etc/hadoop/hdfs-site.xml <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> dfs.replication 2 dfs.namenode.name.dir file:/data/hdfs/name dfs.datanode.data.dir file:/data/hdfs/data dfs.namenode.secondary.http-address node-1:50090 dfs.namenode.http-address node-1:50070 The address and the base port where the dfs namenode web ui will listen on. If the port is 0 then the server will start on a free port. dfs.namenode.checkpoint.dir file:/data/hdfs/checkpoint dfs.namenode.checkpoint.edits.dir file:/data/hdfs/edits [root@node-1 ~]# cat /opt/hadoop/etc/hadoop/mapred-site.xml <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> mapreduce.framework.name yarn mapred.job.tarcker node-1:10020 mapreduce.jobhistory.webapp.address node-1:19888 [root@node-1 ~]# cat /opt/hadoop/etc/hadoop/yarn-site.xml <?xml version="1.0"?> yarn.resourcemanager.hostname node-1 yarn.nodemanager.aux-services mapreduce_shuffle yarn.nodemanager.aux-services.mapreduce.shuffle.class org.apache.hadoop.mapred.ShuffleHandle yarn.resourcemanager.resource-tarcker.address node-1:8025 yarn.resourcemanager.scheduler.address node-1:8030 yarn.resourcemanager.address node-1:8040 yarn.resourcemanager.admin.address node-1:8033 yarn.resourcemanager.webapp.address node-1:8088

8、依次拷贝

[root@node-1 ~]# scp -r /data/ node-2:/
[root@node-1 ~]# scp -r /data/ node-3:/
[root@node-1 ~]# scp -r /data/ node-4:/
[root@node-1 ~]# scp -r /opt/hadoop/etc/hadoop/* node-2:/opt/hadoop/etc/hadoop/
[root@node-1 ~]# scp -r /opt/hadoop/etc/hadoop/* node-3:/opt/hadoop/etc/hadoop/
[root@node-1 ~]# scp -r /opt/hadoop/etc/hadoop/* node-4:/opt/hadoop/etc/hadoop/

9、初始化

[root@node-1 ~]# cd /opt/hadoop/bin/
[root@node-1 bin]# ./hadoop namenode -format
[root@node-1 ~]# cd /opt/hadoop/sbin/
[root@node-1 ~]# ./start-all.sh

注意:

1.如果启动报以下错误
[root@node-1 sbin]# ./start-all.sh
node-2: ERROR: JAVA_HOME is not set and could not be found.
node-4: ERROR: JAVA_HOME is not set and could not be found.
node-3: ERROR: JAVA_HOME is not set and could not be found.
解决方案
[root@node-1 ~]# yum -y install java
[root@node-1 ~]# vim /opt/hadoop/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/java

2.如果启动报以下错误
[root@node-1 ~]# ./start-all.sh
node-4: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
node-3: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
node-1: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
node-2: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
解决方案
所有机器互相做解析
[root@node-1 ~]# ssh-keygen
[root@node-1 ~]# ssh-copy-id -i node-1
[root@node-1 ~]# touch ~/.ssh/authorized_keys

3.如果启动报以下错误
[root@node-2 sbin]# ./start-all.sh
Starting namenodes on [node-1]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [node-1]
解决方案
vi /opt/hadoop/sbin/start-dfs.sh
vi /opt/hadoop/sbin/stop-dfs.sh
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
vi /opt/hadoop/sbin/stop-yarn.sh
vi /opt/hadoop/sbin/start-yarn.sh
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

注意:解决完后继续启动hadoop,所有机器都要启动
注意:如果在启动时没有发现50070端口,namenode节点重新初始化,再次启动namenode节点.如果没有8088端口

10、浏览器访问

在这里插入图片描述

三、Hadoop使用

1、创建文件夹并查看

[root@node-1 ~]# hadoop fs -mkdir -p /test/input
[root@node-1 ~]# hadoop fs -ls /
Found 1 items drwxr-xr-x - root supergroup 0 2020-11-13 22:46 /test
[root@node-1 ~]# hadoop fs -ls /test
Found 1 items drwxr-xr-x - root supergroup 0 2020-11-13 22:46 /test/input

2、上传文件

[root@node-1 ~]# cat xingdian.txt
hello world
nihao
shandong

3、上传到/test/input

[root@node-1 ~]# hadoop fs -put xingdian.txt /test/input

4、查看是否上传成功

[root@node-1 ~]# hadoop fs -ls /test/input
Found 1 items
-rw-r–r-- 2 root supergroup 27 2020-11-13 22:52 /test/input/xingdian.txt

5、下载文件

[root@node-1 ~]# hadoop fs -get /test/input/xingdian.txt /
[root@node-1 ~]# ls /
bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var xingdian.txt

6、运行一个mapreduce的例子程序: wordcount

[root@node-1 ~]# hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount /test/input /test/output
如果报以下错误
[2020-11-13 22:59:31.249]Container exited with a non-zero exit code 1. Error file: prelaunch.err.
Last 4096 bytes of prelaunch.err :
Last 4096 bytes of stderr :
Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.mapreduce.v2.app.MRAppMaster

Please check whether your <HADOOP_HOME>/etc/hadoop/mapred-site.xml contains the below configuration:

yarn.app.mapreduce.am.env
HADOOP_MAPRED_HOME= f u l l p a t h o f y o u r h a d o o p d i s t r i b u t i o n d i r e c t o r y < / v a l u e > < / p r o p e r t y > < p r o p e r t y > < n a m e > m a p r e d u c e . m a p . e n v < / n a m e > < v a l u e > H A D O O P M A P R E D H O M E = {full path of your hadoop distribution directory}</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME= fullpathofyourhadoopdistributiondirectory</value></property><property><name>mapreduce.map.env</name><value>HADOOPMAPREDHOME={full path of your hadoop distribution directory}


mapreduce.reduce.env
HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}

解决方案
[root@node-1 ~]# cat /opt/hadoop/etc/hadoop/mapred-site.xml

<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> mapreduce.framework.name yarn mapred.job.tarcker node-1:10020 mapreduce.jobhistory.webapp.address node-1:19888 mapreduce.framework.name yarn yarn.app.mapreduce.am.env HADOOP_MAPRED_HOME=${HADOOP_HOME} mapreduce.map.env HADOOP_MAPRED_HOME=${HADOOP_HOME} mapreduce.reduce.env HADOOP_MAPRED_HOME=${HADOOP_HOME}

7、浏览器界面查看

在这里插入图片描述

8、查看结果

[root@node-1 ~]# hadoop fs -ls /test/output
Found 2 items
-rw-r–r-- 2 root supergroup 0 2020-11-13 23:06 /test/output/_SUCCESS
-rw-r–r-- 2 root supergroup 35 2020-11-13 23:06 /test/output/part-r-00000
[root@node-1 ~]# hadoop fs -cat /test/output/part-r-00000
hello 1
nihao 1
shandong 1
world 1

9、删除

[root@node-1 ~]# echo “123” > diandian.txt
[root@node-1 ~]# hadoop fs -put diandian.txt /test/input
[root@node-1 ~]# hadoop fs -rm /test/input/diandian.txt
Deleted /test/input/diandian.txt

四、Hadoop集群高级使用

1、设置副本数量

[root@node-1 ~]# cat /opt/hadoop/etc/hadoop/hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> dfs.replication 2

2、设置块大小

默认值:
从2.7.3版本开始block size的默认大小为128M,之前版本的默认值是64M.
如何修改block块的大小:
  可以通过修改hdfs-site.xml文件中的dfs.blocksize对应的值。
  注意:在修改HDFS的数据块大小时,首先停掉集群hadoop的运行进程,修改完毕后重新启动。
block块大小设置规则:
  在实际应用中,hdfs block块的大小设置为多少合适呢?为什么有的是64M,有的是128M、256M、512呢?
  首先我们先来了解几个概念:
  1)寻址时间:HDFS中找到目标文件block块所花费的时间。
  2)原理:文件块越大,寻址时间越短,但磁盘传输时间越长;文件块越小,寻址时间越长,但磁盘传输时间越短。
block不能设置过大,也不要能设置过小:
  1)如果块设置过大,一方面从磁盘传输数据的时间会明显大于寻址时间,导致程序在处理这块数据时,变得非常慢;另一方面,MapReduce中的map任务通常一次只处理一个块中的数据,如果块过大运行速度也会很慢。
  2)如果设置过小,一方面存放大量小文件会占用NameNode中大量内存来存储元数据,而NameNode的内存是有限的,不可取;另一方面块过小,寻址时间增长,导致程序一直在找block的开始位置。因此,块适当设置大一些,减少寻址时间,那么传输一个有多个块组成的文件的时间主要取决于磁盘的传输速度。
多大合适呢:
  1)HDFS中平均寻址时间大概为10ms;
  2)经过前任的大量测试发现,寻址时间为传输时间的1%时,为最佳状态,所以最佳传输时间为:
            10ms/0.01=1000s=1s
  3)目前磁盘的传输速度普遍为100MB/s,最佳block大小计算:
            100MB/s*1s=100MB
所以我们设置block大小为128MB.
  4)实际中,磁盘传输速率为200MB/s时,一般设定block大小为256MB;磁盘传输速率为400MB/s时,一般设定block大小为512MB.
[root@node-1 ~]# vim /opt/hadoop/etc/hadoop/hdfs-site.xml

dfs.blocksize
30m


dfs.namenode.fs-limits.min-block-size
30m

五、Hadoop高级理论

1、Hadoop模块

Hadoop Common: Hadoop的一些模块工具
Hadoop HDFS:可以提供能应用程序 数据的高吞吐量的访问
Hadoop YARN:作业调度和集群资源管理的框架
Hadoop MapReduce:分布式计算框架

2、Hadoop在大数据云计算中位置和关系

云计算是分布式计算,并行计算,网络计算,多核计算,网络存储,虚拟化,负载均衡等传统计算机和互联网技术融合的一个产物.现阶段云计算的底层两大技术支撑 “虚拟化”和当前”大数据技术”
HADOOP则是云计算平台服务的解决方案

3、Hadoop案例

大型网站web服务器日志分析:一个大型网站web服务器就能每5分钟就收录的点击量高达800GB左右,峰值点击可以达到每秒900万次,每隔5分钟将数据再装载在内存中,高速计算网站的热点url,并将这些信息反馈给前端缓存服务器,以提高缓存命中率
  运行商流量分析:每天的流量数据在2TB-5TB之间拷贝到HDFS上,通过交互式分析引擎模板,能够运行几百个复杂的数据清洗(ETL)和报表业务,总时间比类似的硬件配置的小集群要快2-3倍
  程序交通卡口视频监控信息实施分析: 基于流式进行全省范围的交通卡口的视频监控的信息进行实时分析,警告和统计,可以对全省范围内未年检和套牌车辆进行再300毫秒左右就可以得出结论并实时进行警告

4、Hadoop的生态圈重要组件

1.HDFS: 分布式文件系统
2.MapReduce: 分布式计算框架
3.HIVE: 基于大数据技术的SQL数据仓库工具(文件系统+运算框架)
4.HBASE: 基于HADOOP的分布式海量数据库(NOSQL非关系型数据库)
5.ZOOKEEPER: 分布式系统协调服务基础组件
6.Oozie: 工作流调度框架
7. Sqoop: 数据导入导出工具
8. Flume: 日志数据采集框架
9. Mahout: 基于MapReduce/spark/flink等分布式框架的机器学习算法库

5、Hadoop原理

Hadoop文件存储时将文件分为元数据,数据本身分别存储。
  元数据指的是文件的属性信息,如存放位置,大小,创建时间等,NameNode节点保存文件元数据
  数据本身指的是文件中的数据,数据分块Block存储可能是一块也可能是多块,这取决数据本身大小,DataNode节点保存文件Block数据

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hadoop的分布式集群部署主要涉及以下几个步骤: 1. 准备环境:首先确保所有节点都满足Hadoop的硬件和软件要求。每个节点应该有足够的磁盘空间和内存,并且安装了相应的操作系统和Java运行时环境。 2. 配置SSH免密登录:为了方便集群节点之间的通信,需要配置SSH免密登录。这样可以在不需要密码的情况下远程登录到其他节点。 3. 安装Hadoop:在所有节点上安装Hadoop软件包。可以从Apache Hadoop官方网站下载最新版本的二进制包,并解压到每个节点的相同目录下。 4. 配置Hadoop:编辑Hadoop的配置文件,包括core-site.xml、hdfs-site.xml、mapred-site.xml和yarn-site.xml。这些配置文件定义了Hadoop的各种参数,如文件系统路径、副本数量、任务调度器等。 5. 设置主从关系:在集群中选择一个节点作为主节点(通常是NameNode),其他节点作为从节点(通常是DataNode)。主节点负责管理文件系统和任务调度,从节点负责存储数据和执行任务。 6. 启动Hadoop集群:首先启动主节点上的Hadoop服务,包括NameNode、ResourceManager和JobHistoryServer。然后按顺序启动从节点上的Hadoop服务,包括DataNode和NodeManager。 7. 验证集群使用Hadoop提供的命令行工具,如hdfs dfs、yarn和mapred,验证集群是否正常工作。可以上传文件到HDFS、提交MapReduce作业并查看作业状态。 这些步骤只是一个基本的概述,具体的部署过程可能因为不同的操作系统、Hadoop版本和集群规模而有所不同。在部署过程中,建议参考Hadoop官方文档和其他相关资源,以获得更详细的指导和最佳实践。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值