0%

Hadoop

简介

HDFS(Hadoop Distributed File System)是Apache Hadoop生态系统的一部分,是一种分布式文件系统,旨在处理大规模数据集的存储和处理。

以下是HDFS的一些关键特点和功能:

  1. 分布式存储:HDFS将数据分布式存储在多个物理节点上,以实现高容量和高可靠性。数据被划分为多个数据块(block),并在集群中的多个节点上进行复制存储,以提供容错能力和数据冗余。
  2. 扩展性:HDFS可以扩展到大规模的数据集和节点数。它可以运行在大型集群上,通过添加更多的节点来增加存储容量和数据处理能力。
  3. 容错性:HDFS通过数据的冗余复制来提供容错能力。每个数据块会在集群中的多个节点上进行复制存储,以防止节点故障导致数据丢失。
  4. 高吞吐量:HDFS优化了数据访问的方式,通过顺序读写和数据本地性原则,实现高吞吐量的数据访问。这使得HDFS适用于大数据处理任务,如批处理、数据分析和大规模并行计算。
  5. 数据局部性:HDFS将计算任务移动到存储数据的节点附近,以减少数据传输的网络开销,提高性能。这种数据局部性原则有助于优化数据处理的效率。
  6. 写一次、多次读取:HDFS适用于一次写入多次读取的应用场景。一旦数据被写入HDFS,可以多次读取和处理,以满足不同的分析和计算需求。

HDFS是Hadoop生态系统中的核心组件之一,被广泛应用于大数据处理和分析任务。它提供了可靠的分布式存储解决方案,适合用于处理大规模数据集和构建数据湖(Data Lake)等数据管理和处理系统。

1.Linux系统安装

1.环境准备

  • VMware 15.5por
  • Centos7镜像文件
  • Centos7下载链接

2.虚拟机Centos系统安装

https://blog.csdn.net/m0_51545690/article/details/123238360

3.静态网络配置

  1. 查看网络是否联通
1
ping www.baidu.com

image-20240321142333072

  1. 安装net-tools
1
2
yum upgrade
yum install net-tools
  1. 查看Mac地址

image-20240321142347034

  1. 查看ip地址的起始和结束地址、

image-20240321142356700

  1. 修改网络配置文件
1
vi /etc/sysconfig/network-scripts/ifcfg-ens33

image-20240321142403678

  1. 重启网络服务,查看是否配置成功
1
service network restart

image-20240321142414472

  1. 网络测试,输入以下命令
  • 测试网络适配器:ping 192.168.77.2
  • 测试网关:ping 192.168.77.2
  • 测试互联网:ping www.baidu.com

如图所示,说明网络是通的,否则说明网络参数有问题
image-20240321142424444

2.虚拟机克隆配置

  1. 克隆虚拟机(右键相应虚拟机->管理->克隆)

image-20240321142430774

  1. 开启Hadoop2,修改主机名
1
2
hostnamectl set-hostname hadoop02
reboot

image-20240321142439024

  1. 查看Mac地址

image-20240321142435811

  1. 网络配置文件修改
1
vi /etc/sysconfig/network-scripts/ifcfg-ens33

image-20240321142442760

  1. 按照以上步骤在克隆另外一台虚拟机Hadoop03

3.配置hosts文件和ssh免密登录

  1. 修改hosts配置文件(所有虚拟机都需要配置)
1
vi /etc/hosts

image-20240321142447155

  1. 生成密钥文件(四次回车)
1
ssh-keygen -t rsa

image-20240321142452082

  1. 将本机公钥文件复制到其他虚拟机上(接收方需要开机)

在hadoop01上执行,先输入yes,后输入对应主机的密码,堕胎虚拟机配置操作相同

1
2
3
ssh-copy-id hadoop01
ssh-copy-id hadoop02
ssh-copy-id hadoop03

image-20240321142454929

  1. 在虚拟机hadoop02,hadoop03都需要执行,保证三台主机都能免密登录
  2. 查看是否免密登录

image-20240321142458555

4.Hadoop集群配置

  1. 在所有虚拟机根目录下新建文件夹export,exportt文件夹中新建data、servers和software文件

image-20240321142501730

1
2
3
4
5
cd /
mkdir /export
mkdir /export/data
mkdir /export/servers
mkdir /export/software
  1. 准备安装包

    hadoop-2.7.4.tar.gz
    jdk-8u161-linux-x64.tar.gz  
    
  2. 用Xshell依次连接hadoop1,2,3

image-20240321142505844

  1. 先进入software文件内,然后把hadoop-2.7.4.tar.gz 、jdk-8u161-linux-x64.tar.gz上传进去
1
cd /export/software

image-20240321142509128

  1. 按照JDK(所有虚拟机都要操作)
    1. 解压jdk
1
2
cd /export/software
tar -zxvf jdk-8u161-linux-x64.tar.gz -C /export/servers/
  2. 重命名jdk目录
1
2
cd /export/servers
mv jdk1.8.0_161 jdk
  3. 配置环境变量
1
vi /etc/profile
1
2
3
4
#tip:在配置文件末尾追加
export JAVA_HOME=/export/servers/jdk
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

image-20240321142518650

  4. 使配置文件生效
1
source /etc/profile
  5. 查看是否配置成功
1
java -version

image-20240321142521827

  1. Hadoop安装(所有)
    1. 解压hadoop
1
2
cd /export/software
tar -zxvf hadoop-2.7.4.tar.gz -C /export/servers/
  2. 打开配置文件
1
vi /etc/profile
  3. 配置hadoop环境变量
1
2
3
#tip:在文件末尾追加
export HADOOP_HOME=/export/servers/hadoop-2.7.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

image-20240321142524480

  4. 使配置文件生效
1
source /etc/profile
  5. 查看是否配置成功
1
hadoop version

image-20240321142526474

  1. Hadoop集群配置
    1. 进入主节点配置目录
1
cd /export/servers/hadoop-2.7.4/etc/hadoop/
  2. 修改hadoop-env.sh文件
1
2
3
:wq:w
#tip:找到相应位置,添加这段话
export JAVA_HOME=/export/servers/jdk
  3. 修改core-site.xml文件
1
vi core-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<configuration>
<!--用于设置Hadoop的文件系统,由URI指定-->
<property>
<name>fs.defaultFS</name>
<!--用于指定namenode地址在hadoop01机器上-->
<value>hdfs://hadoop01:9000</value>
</property>
<!--配置Hadoop的临时目录,默认/tem/hadoop-${user.name}-->
<property>
<name>hadoop.tmp.dir</name>
<value>/export/servers/hadoop-2.7.4/tmp</value>
</property>
</configuration>


  4. 修改hdfs-site.xml文件
1
vi hdfs-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
<configuration>
<!--指定HDFS的数量-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--secondary namenode 所在主机的IP和端口-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop01:50090</value>
</property>
</configuration>
  5. 修改mapred-site.xml文件
1
cp mapred-site.xml.template mapred-site.xml
1
vi mapred-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

  6. 修改yarn-site.xml文件
1
vi yarn-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
<configuration>
<!--指定YARN集群的管理者(ResourceManager)的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

  7. 修改slaves文件
1
2
3
#tip:将文件中的localhost删除,添加主节点和子节点的主机名称
#tip:如主节点hadoop01,子节点hadoop02和hadoop03
vi slaves
  8. 将主节点中配置号文件和hadoop目录coopy给予子节点
1
2
3
4
5
#tip:这里主节点为hadoop01,子节点为hadoop02和hadoop03
scp /etc/profile hadoop02:/etc/profile
scp /etc/profile hadoop03:/etc/profile
scp -r /export/ hadoop02:/
scp -r /export/ hadoop03:/
  9. 使子节点中的配置文件生效
1
2
#tip:返回hadoop02和hadoop03节点执行下面命令
source /etc/profile
  10. 使子节点格式化文件系统(successfully formatted格式化成功)
1
hdfs namenode -format

5.Hadoop集群测试

  1. 启动集群
    1. 在主节点启动所有HDFS服务进程
1
start-dfs.sh
  2. 在主节点启动所有HDFS服务进程
1
start-yarn.sh
  3. 使用jps命令查看进程

image-20240321142534552
image-20240321142538525
image-20240321142542886

  1. 关闭防火墙
1
systemctl stop firewalld    #关闭防火墙
  1. 打开window下的C:\Windows\System32\drivers\etc打开hosts文件,在文件末添加三行代码:

192.168.77.138 hadoop01
192.168.77.139 hadoop02
192.168.77.140 hadoop03

  1. 通过UI界面查看Hadoop运行状态,在windows系统下,访问http://hadoop01:50090,查看HDFS集群状态

image-20240321142546700

  1. 在windows下,访问http://hadoop01:8088,查看Yarn集群状态

image-20240321142548608

hadoop核心hdfs命令使用

(1)在hdfs分布式文件系统上新建文件存储目录

1
hdfs dfs -mkdir -p /user/hadoop

image-20240321142551038
(2)上传本地文件到hdfs分布式文件系统的指定目录中

1
hdfs dfs -put test.txt /user/hadoop/

image-20240321142553416
(3)查看hdfs分布式文件系统内容

1
hdfs dfs -ls /user/hadoop

image-20240321142555552
(4)查看上传文件信息

1
hdfs dfs -cat /user/hadoop/test.txt

image-20240321142559681
(5) 下载hdfs分布式文件系统上文件到本地目录

1
hdfs dfs -get /user/hadoop/test.txt

image-20240321142604712jps
(6)删除hdfs分布式文件系统内容

1
hdfs dfs -rm /user/hadoop/test.txt

image-20240321142607741
image.png
(7)运行一个简易的MapReduce程序
第一步先从本地上传进行统计计算的文件到hdfs文件系统中。例如将/export/servers/hadoop-2.7.4/etc/hadoop中的*.xml配置文件上传到hdfs的/zhu目录下,如图所示。

1
2
[root@hadoop01 ~]# hdfs dfs -mkdir -p /zhu
[root@hadoop01 ~]# hdfs dfs -put /export/servers/hadoop-2.7.4/etc/hadoop/*.xml /zhu

image-20240321142611964
第二步使用hadoop提供的一个jar包,按照正则表达式进行统计。命令如下:

1
jar /export/servers/hadoop-2.7.4/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.4.jar grep /zhu /optput 'dfs[a-z]+'

结果:
image-20240321142614287

启动/关闭

启动之前必须进行一次格式化操作

1
bin/hadoop namenode -format

启动hadoop:sbin/start-dfs.sh
关闭hadoop:sbin/stop-dfs.sh
启动yarn:sbin/start-yarn.sh
关闭yarn:sbin/stop-yarn.sh