一、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文件
(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程序执行的情况。