大数据学习之路(2):hadoop的概述及本地运行和伪分布式运行

373 阅读2分钟

一、hadoop的概述

Hadoop:提供分布式的存储(一个文件被拆分成很多个块,并且以副本的方式存储在各个节点中)和分布式计算,是一个分布式的系统基础架构。用户可以在不了解分布式底层细节的情况下存储。主要解决:海量数据的存储和海量数据的分析计算问题。

分布式文件系统:HDFS 实现将文件分布式存储在很多的服务器上

分布式计算框架: MapReduce实现在很多机器上分布式并行计算

分布式资源调度框架:YARN实现集群资源管理以及作业的调度

也就是这三种就是hadoop的核心组件

hadoop的优势就是高可靠性和高扩展性,通过将数据存储在廉价的机器上,降低成本。

二、hadoop的安装

1、本机安装jdk,配置java环境。

2、给hadoop的机器起别名,配置集群机器的映射。

配置的位置:Linux:/etc/hosts ;windows : c\windows\System32\drivers\etc\hosts

根据自身ip配置内容如下:

192.168.51.100 hadoop100
192.168.51.101 hadoop101
192.168.51.102 hadoop102
192.168.51.103 hadoop103
192.168.51.104 hadoop104
192.168.51.105 hadoop105
192.168.51.106 hadoop106
192.168.51.107 hadoop107
192.168.51.108 hadoop108

3、下载,解压

下载地址: archive.apache.org/dist/hadoop…

解压:

[root@hadoop101 package]# tar hadoop-3.1.3.tar.gz -C /opt/sofeware/

4、配置HADOOP_HOME

vim /etc/profile,然后source下这个文件。

export HADOOP_HOME=/opt/sofeware/hadoop-3.1.3
export JAVA_HOME=/opt/sofeware/java8
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export PATH CLASSPATH JAVA_HOME HADOOP_HOME

测试环境:

[root@hadoop101 hadoop-3.1.3]# hadoop version
Hadoop 3.1.3
Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r ba631c436b806728f8ec2f54ab1e289526c90579
Compiled by ztang on 2019-09-12T02:47Z
Compiled with protoc 2.5.0
From source with checksum ec785077c385118ac91aadde5ec9799
This command was run using /opt/sofeware/hadoop-3.1.3/share/hadoop/common/hadoop-common-3.1.3.jar

5、目录介绍

(1)bin目录:存放对Hadoop相关服务(HDFS,YARN)进行操作的脚本

(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件

(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)

(4)sbin目录:存放启动或停止Hadoop相关服务的脚本

(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例

三、Hadoop的运行模式

3.1 本地运行

本地运行就是不需要任何的hadoop相关的配置就能直接运行,因为hadoop默认的配置就是本地模式。

需要注意的问题,输出目录必须指定一个不存在的路径,它会自动创建。

3.1.1 官方grep实例代码:

这个实例是查询匹配的词。例如下面这么写就是来查询以dfs开头的词有多少个。

  $ mkdir input
  $ cp etc/hadoop/*.xml input
  $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output 'dfs[a-z.]+'
  $ cat output/*

success 为一个标志,dfsadmin内容总共出现一次。

[root@iz2ze7g9h65aj7hp4a1l9bz hadoop-3.1.3]# cd output/
[root@iz2ze7g9h65aj7hp4a1l9bz output]# ls
part-r-00000  _SUCCESS
[root@iz2ze7g9h65aj7hp4a1l9bz output]# cat part-r-00000 
1	dfsadmin

3.1.2 官网wordcount 案例

1、创建在hadoop-3.1.3文件下面创建一个wcinput文件夹。

mkdir wcinput

2、在wcinput文件下创建一个wc.input文件,输入内容:

today i am ready to learning hadoop
let us study it and we can success  

3、回到Hadoop目录 /opt/module/hadoop-3.1.3 执行程序

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput wcoutput

4、查看结果,可以发现是单纯靠空格来分辨出是否是单词的。

[root@iz2ze7g9h65aj7hp4a1l9bz hadoop-3.1.3]# cd wcoutput/
[root@iz2ze7g9h65aj7hp4a1l9bz wcoutput]# ls
part-r-00000  _SUCCESS
[root@iz2ze7g9h65aj7hp4a1l9bz wcoutput]# cat part-r-00000 
am	1
and	1
can	1
hadoop	1
i	1
it	1
learning	1
let	1
ready	1
study	1
success	1
to	1
today	1
us	1
we	1

3.2 伪分布式

3.2.1 启动HDFS并运行MapReduce程序

(1)分析

a、配置集群

b、启动、测试集群增删查

c、执行wordcount案例

(2)配置集群

a、配置: /etc/hadoop 下的hadoop-env.sh文件,配置java_home路径,以防万一,可以通过echo & JAVA_HOME获取路径方式

b、配置core-site.xml 。类似于tomcat,注意端口号为9820

<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
    <value>hdfs://hadoop101:9820</value>
</property>
 
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
   <name>hadoop.tmp.dir</name>
   <value>/opt/sofeware/hadoop-3.1.3/data/tmp</value>
</property>

c、配置hdfs-site.xml

<!-- 指定HDFS副本的数量 -->
<property>
   <name>dfs.replication</name>
   <value>1</value>
</property>

(3)启动集群

(1) 格式化NameNode(第一次启动格式化,以后就不要格式化)。完成后,发现生产了data路径。

bin/hdfs namenode -format
[root@iz2ze7g9h65aj7hp4a1l9bz hadoop-3.1.3]# ls
bin   etc      input  libexec      logs        output   README.txt  share    wcoutput
data  include  lib    LICENSE.txt  NOTICE.txt  output1  sbin 

(2) 启动NameNode,jps是看当前进程数。

[root@hadoop101 hadoop-3.1.3]# hdfs --daemon start namenode
[root@hadoop101 hadoop-3.1.3]# jps
3642 Jps
3358 NameNode

可以测试访问:注意要关闭防火墙。

关闭方式:

systemctl stop firewalld.service

禁止自启动:

systemctl  disable  firewalld.service 

web端查看hdfs文件

image.png

(3) 启动datanode

[root@hadoop101 hadoop-3.1.3]# hdfs --daemon start datanode
You have new mail in /var/spool/mail/root
[root@hadoop101 hadoop-3.1.3]# jps
3811 DataNode
3851 Jps
3358 NameNode

(4) 测试集群

HDFS文件系统在哪呢?事实上,我们并没有给它额外的磁盘,我们可以认为HDFS是一个软件,把linux的磁盘空间分配到这个HDFS文件系统,实际上用的就是linux的磁盘空间。所在位置:

[root@hadoop101 tmp]# pwd
/opt/sofeware/hadoop-3.1.3/data/tmp

(a) 在HDFS文件系统上创建一个input文件夹

[root@hadoop101 hadoop-3.1.3]# hadoop fs -mkdir /input

(b) 将测试文件内容上传到文件系统上

[root@hadoop101 hadoop-3.1.3]# hadoop fs -put wc.input /input
2021-03-15 20:10:49,545 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false

(c) 查看上传的文件是否正确

[root@hadoop101 hadoop-3.1.3]# hadoop fs -ls /input/
Found 1 items
-rw-r--r--   1 root supergroup         81 2021-03-15 20:10 /input/wc.input

(d) 运行MapReduce程序 ,从dfs输出路径

[root@hadoop101 hadoop-3.1.3]# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

(e) 查看输出结果

[root@hadoop101 hadoop-3.1.3]# hadoop fs -cat /output/*
2021-03-15 20:18:52,988 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
gugu    3
hadoop  2
haha    5
hello   1
lei     2
leilei  1
world   1
You have new mail in /var/spool/mail/root

3.2.2 启动YARN 并运行MapReduce程序

1、分析

(a) 配置集群在YARN上运行MapReduce

(b) 启动、测试集群,增删查

(c) 在YARN上执行WordCount案例

2、执行步骤

(1)配置集群

(a) 配置yarn-site.xml

<!-- Reducer获取数据的方式 -->
<property>
    <name>yarn.nodemanager.aux-services</name>
     <value>mapreduce_shuffle</value>
</property>
 
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop101</value>
</property>
<!-- 环境变量通过从NodeManagers的容器继承的环境属性, 对于mapreduce应用程序,除了默认值hadoop op_mapred_home应该被添加外。属性值还有  -->
    <property>
        <name>yarn.nodemanager.env-whitelist</name>    
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
 </property>

(b) 配置mapred-site.xml

<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    
    // 下面这个不需要配置
<property>
        <name>mapreduce.application.classpath</name>
        <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>

(2) 启动集群

(a) 启动前必须保证NameNode和DataNode已经启动。yarn是调度资源的。

[root@hadoop101 hadoop]# jps
3811 DataNode
4937 Jps
3358 NameNode

(b) 启动ResourceManager

bin/yarn --daemon start resourcemanager

(c) 启动NodeManager

bin/yarn --daemon start nodemanager

(3) 集群操作

YARN的浏览器页面查看:hadoop101:8088

执行MapReduce程序

[root@hadoop101 hadoop-3.1.3]# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output2

可以在yarn的页面中看到mapreduce程序执行的情况。