推荐去我的网盘下载或者找国内镜像资源,因为https://hadoop.apache.org/下载速度龟速。
链接:https://pan.baidu.com/s/1uwqnN4rMWfGNIB-33fFZKw?pwd=1010
提取码:1010
需要具有 Ubuntu
环境
sudo useradd -m hadoop -s /bin/bash
sudo passwd hadoop
# 对 hadoop用户添加管理员权限
sudo adduser hadoop sudo
sudo apt-get update
# ssh 安装和登录
sudo apt-get install openssh-server
ssh localhost
# 配置无密码登录
exit
cd ~/.ssh/
ssh-keygen -t rsa
cat ./id_rsa.pub >> ./authorized_keys
sudo apt-get update
sudo apt-get install openjdk-8-jdk
java -version
gedit ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
source ~/.bashrc
echo $JAVA_HOME
java -version
whereis java
# 安装 hadoop
sudo tar -zxf ~/下载/hadoop-3.2.4.tar.gz -C /usr/local
cd /usr/local/
sudo mv ./hadoop-3.2.4/ ./hadoop
sudo chown -R hadoop ./hadoop
cd /usr/local/hadoop
# 检查 hadoop是否是可用的
./bin/hadoop version
mkdir ./input
cp ./etc/hadoop/*.xml ./input
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
cat ./output/*
# hadoop 默认不会覆盖结果文件,因此再次运行上面实类时,会报错,需要要将 ./output 删除
rm -r ./output
# hadoop 伪分布式配置
cd /usr/local/hadoop
gedit ./etc/hadoop/core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
gedit ./etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
cd /usr/local/hadoop
./bin/hdfs namenode -format
# 开启 NameNode和 DataNode守护进程
./sbin/start-dfs.sh
# 判断是否成功启动
jps
火狐浏览器访问
localhost:9870
win10上访问
./bin/hdfs dfs -mkdir -p /user/hadoop
./bin/hdfs dfs -mkdir input
# 复制到分布式文件系统中
./bin/hdfs dfs -put ./etc/hadoop/*.xml input
# 查看文件列表
./bin/hdfs dfs -ls input
./sbin/start-dfs.sh
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output `dfs[a-z.]+`
./bin/hdfs dfs -cat output/*
# 可能无法删除
rm -f ./output
./bin/hdfs dfs -get output ./output
cat ./output/*
./bin/hdfs dfs -rm -r output
# 关闭hadoop
./sbin/stop-dfs.sh
gedit ~/.bashrc
export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin
source ~/.bashrc
hadoop@ubuntu:/usr/local/hadoop$ hadoop version
Hadoop 3.2.4
Source code repository Unknown -r 7e5d9983b388e372fe640f21f048f2f2ae6e9eba
Compiled by ubuntu on 2022-07-12T11:58Z
Compiled with protoc 2.5.0
From source with checksum ee031c16fe785bbb35252c749418712
This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-3.2.4.jar
https://www.bilibili.com/video/BV1eZ4y1k7LZspm_id_from=333.880.my_history.page.click
大数据的定义
麦肯锡全球研究所给出的定义是:一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模、快速的数据流转、多样的数据类型和价值密度低四大特征。
大数据的5V特点(IBM提出):Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)、Veracity(真实性)。
Apache Hadoop软件库是一个框架,该框架允许使用简单的编程模型跨计算机集群对大型数据集进行分布式处理。它旨在从单个服务器扩展到数千台机器,每台机器都提供本地计算和存储。库本身不用于依靠硬件来提供高可用性,而是被设计用来检测和处理应用程序层的故障,因此可以在计算机集群的顶部提供高可用性服务,每台计算机都容易出现故障。
HDFS
:一种分布式文件系统,可提供对应用程序数据的高吞吐量访问。 YARN
:用于作业调度和群集资源管理的框架。MapReduce
:基于YARN的系统,用于并行处理大数据集。谷歌技术的开源实现Hadoop 历史
2003 年和 2004 年,Google
公司先后发表了两篇著名的论文GFS
和 MapReduce
。这两篇论文和 2006 年发表的BigTable
成为了现在著名的"Google 三大论文"。
Doug Cutting
在受到了这些理论的影响后开始了Hadoop
的开发。
Hadoop 包含了两大核心组件。在 Google
的论文中,GFS
是一个在庞大的计算机集群中运行的分布式文件系统,在 Hadoop
中HDFS
实现了它的功能。MapReduce
是一个分布式计算的方式,Hadoop
用同名称的 MapReduce
框架实现了它的功能。
Hadoop 的作用
Hadoop
的作用非常简单,就是在多计算机集群环境中营造一个统一而稳定的存储和计算环境,并能为其他分布式应用服务提供平台支持。
也就是说,Hadoop
在某种程度上将多台计算机组织成了一台计算机(做同一件事),那么 HDFS
就相当于这台计算机的硬盘,而 MapReduce
就是这台计算机的CPU
控制器。
Hadoop 框架最根本的原理就是利用大量的计算机同时运算来加快大量数据的处理速度
hadoop3.2.1 中文文档
Hadoop
主要包含 HDFS
和 MapReduce
两大组件,HDFS
负责分布储存数据,MapReduce
负责对数据进行映射、规约处理,并汇总处理结果。
Hadoop Distributed File System
,Hadoop
分布式文件系统,简称 HDFS
。
HDFS
用于在集群中储存文件,它所使用的核心思想是 Google
的 GFS
思想,可以存储很大的文件。
在服务器集群中,文件存储往往被要求高效而稳定,HDFS
同时实现了这两个优点。
HDFS
使用了多个块进行存储,将文件划分为多个块(Block
)存储在物理服务器中,HDFS
会按照设计者的需求将文件复制n
份,将存储在不同的数据节点中,储存数据的服务器,如果一个数据节点发生故障数据也不会丢失。
HDFS
运行在不同的计算机上,有的计算机(DataNode
)数据节点 专门进行数据的存储,有的计算机NameNode
命名节点 专门指挥其他计算机存储数据,指挥其他计算机存储数据的计算机配备了一个秘书Secondary NameNode
副命名节点
NameNode
指挥其他节点存储的节点,任何一个文件系统FS
都需要将文件路径映射到文件的功能,NameNode
就是储存这些映射信息并提供映射服务的计算机,在整个HDFS
中扮演了管理者的角色,因此在一个HDFS
中只允许有一个NameNode
Secondary NameNode
别名次命名节点
,它可以具有多个,共同为一个NameNode
服务,不能代替NameNode
进行工作,无论NameNode
是否可以继续工作,她的职责就是为NameNode
分担压力,备份NameNode
状态以及管理一些工作,一旦NameNode
崩掉了,次命名节点提供备份数据,以便NameNode
复原。
DataNode
用于存储数据块的节点。当一个文件被NameNode
承认后会被存储到分配的数据节点中去。数据节点具有存储,读写数据的功能,存储的数据块比较类似于硬盘中的"扇区"概念,是 HDFS
存储的基本单位。
Map
和 Reduce
(映射和规约)
通过map
对每个大的数据分化成为小的map
数据,方便进行处理,数据处理完成之后,reduce
合并为最终需要的结果
Hadoop 三种模式:单机模式、伪集群模式和集群模式。
单机模式:Hadoop 仅作为库存在,可以在单计算机上执行 MapReduce 任务,仅用于开发者搭建学习和试验环境。
伪集群模式:此模式Hadoop 将以守护进程的形式在单机运行,一般用于开发者搭建学习和试验环境。
集群模式:此模式是 Hadoop的生产环境模式,也就是说这才是 Hadoop 真正使用的模式,用于提供生产级服务。
HDFS和数据库类似,是后台启动的,使用HDFS需要HDFS Client通过网络套接字连接到服务器端实现文件系统的使用。
<dependency>
<groupId>org.apache.hadoopgroupId>
<artifactId>hadoop-clientartifactId>
<version>3.2.4version>
<scope>providedscope>
dependency>
<configuration>
<property>
<name>hadoop.tmp.dirname>
<value>file:/usr/local/hadoop/tmpvalue>
<description>Abase for other temporary directories.description>
property>
<property>
<name>fs.defaultFSname>
<value>hdfs://localhost:9000value>
property>
configuration>
<property>
<name>fs.defaultFSname>
<value>hdfs://hadoop102:8020value>
property>
<property>
<name>hadoop.tmp.dirname>
<value>/opt/module/hadoop-3.2.4/datavalue>
property>
<property>
<name>hadoop.http.staticuser.username>
<value>coffeevalue>
property>
<property>
<name>dfs.namenode.http-addressname>
<value>hadoop102:9870value>
property>
<property>
<name>dfs.namenode.http-addressname>
<value>hadoop102:9870value>
property>
<property>
<name>dfs.replicationname>
<value>3value>
property>
<!--
指定MR走shuffle过程
-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--
指定ResourceManager的地址
-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!--
设置日志保留7天
-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
<property>
<name>mapreduce.jobhistory.addressname>
<value>hadoop102:10020value>
property>
<property>
<name>mapreduce.jobhistory.webapp.addressname>
<value>hadoop102:19888value>
property>