1.课程导入
柯洁
Alpha Go是人工智能领域的里程碑。
深度学习
大模型deepseek chatgpt
大模型 和 大数据 之间有着非常紧密的关系。可以说,大数据是大模型发展的基石,而大模型是大数据价值挖掘的重要工具。
https://youtu.be/nN-VacxHUH8?si=fj7LtkckVXm7soWR
DeepSeek刚火就要垮掉了吗?史上最通俗的AI科普!15分钟搞懂国产Ai是如何实现弯道超車的!_哔哩哔哩_bilibili
1.1.1大数据产生背景
TB(太字节):常见于企业级数据存储,如数据库、数据仓库等。
示例:1 TB 可以存储大约 25 万张高清图片或 300 小时的视频。
PB(拍字节):常见于大型互联网公司、科学研究机构或政府机构的数据中心。
示例:1 PB 可以存储大约 2 亿张高清图片或 3000 小时的 4K 视频。
EB(艾字节):全球互联网流量、大型云服务提供商的数据规模。
示例:1 EB 可以存储大约 2000 亿张高清图片或 300 万小时的 4K 视频。
ZB(泽字节):全球数据总量的规模(例如,2020 年全球数据总量约为 64 ZB)。
YB(尧字节):未来的数据规模,目前尚未达到。
1.1.2
大数据的定义
volume:体积(大量化):存储量大,增量大(TB,PB,EB)
Variety:种类多。来源多,格式多。
- 结构化数据
- 非结构化数据
- 半结构化数据
Velocity:快速化
value:价值密度低
2003年,Google公司发表论文The Google File System,介绍GFS分布式文件系统,主要讲解海量数据胡可靠存储方法
2004年,Google公司发表论文 MapReduce:Simplified Data Processing on Large Clusters,介绍并行计算模式MapReduce,海量数据的高效计算方法。
2006年,Google发表国Bigtable:A distributed Storage System for Structured Data,介绍Google的大表Bigtable的设计。Bigtable是Google公司的分布式数据存储系统,是用来处理海量数据的一种非关系型数据库。
GFS思想:
数据节点:数据块
管理节点:数据元文件(文件名,文件块,文件块所在数据节点)
数据块保持:可靠性和可用性
2.hadoop实验环境搭建
1.加载镜像
实验使用的Docker镜像保存在/cg/images/hadoop_node.tar.gz
文件中,执行如下命令加载该镜像:
docker load < /cg/images/hadoop_node.tar.gz
用来将一个 Docker 镜像从 .tar.gz
压缩包加载到本地的 Docker 环境中的。
2.启动实验容器
执行如下4条命令,启动4个名称分别为master、slave1、slave2、slave3的docker容器用于实验:
docker run --name master --privileged --ulimit nofile=65535:65535 --hostname master --ip 172.17.0.2 --add-host=slave1:172.17.0.3 --add-host=slave2:172.17.0.4 --add-host=slave3:172.17.0.5 -itd -v /cgsrc:/cgsrc:ro -v /headless/course/:/course hadoop_node /service_start.sh
docker run --name slave1 --privileged --ulimit nofile=65535:65535 --hostname slave1 --ip 172.17.0.3 --add-host=master:172.17.0.2 --add-host=slave2:172.17.0.4 --add-host=slave3:172.17.0.5 -itd -v /cgsrc:/cgsrc:ro hadoop_node /service_start.sh
docker run --name slave2 --privileged --ulimit nofile=65535:65535 --hostname slave2 --ip 172.17.0.4 --add-host=master:172.17.0.2 --add-host=slave1:172.17.0.3 --add-host=slave3:172.17.0.5 -itd -v /cgsrc:/cgsrc:ro hadoop_node /service_start.sh
docker run --name slave3 --privileged --ulimit nofile=65535:65535 --hostname slave3 --ip 172.17.0.5 --add-host=master:172.17.0.2 --add-host=slave1:172.17.0.3 --add-host=slave2:172.17.0.4 -itd -v /cgsrc:/cgsrc:ro hadoop_node /service_start.sh
更新一下
docker run --name master --privileged --ulimit nofile=65535:65535 --hostname master --ip 172.18.0.2 --add-host=slave1:172.18.0.3 --add-host=slave2:172.18.0.4 --add-host=slave3:172.18.0.5 -itd -v /cgsrc:/cgsrc:ro -v /headless/course/:/course hadoop_node /service_start.sh
docker run --name slave1 --privileged --ulimit nofile=65535:65535 --hostname slave1 --ip 172.18.0.3 --add-host=master:172.18.0.2 --add-host=slave2:172.18.0.4 --add-host=slave3:172.18.0.5 -itd -v /cgsrc:/cgsrc:ro hadoop_node /service_start.sh
docker run --name slave2 --privileged --ulimit nofile=65535:65535 --hostname slave2 --ip 172.18.0.4 --add-host=master:172.18.0.2 --add-host=slave1:172.18.0.3 --add-host=slave3:172.18.0.5 -itd -v /cgsrc:/cgsrc:ro hadoop_node /service_start.sh
docker run --name slave3 --privileged --ulimit nofile=65535:65535 --hostname slave3 --ip 172.18.0.5 --add-host=master:172.18.0.2 --add-host=slave1:172.18.0.3 --add-host=slave2:172.18.0.4 -itd -v /cgsrc:/cgsrc:ro hadoop_node /service_start.sh
这些 docker run
命令用于启动多个 Docker 容器,配置它们的主机名、IP 地址、主机映射、文件挂载等,并运行一个启动脚本 /service_start.sh
。这些容器似乎用于搭建一个 Hadoop 集群,其中包含一个 master
节点和三个 slave
节点。
删除节点的命令为:
docker rm -f master slave1 slave2 slave3
2.1.master节点
docker run --name master --privileged --ulimit nofile=65535:65535 --hostname master --ip 172.17.0.2 --add-host=slave1:172.17.0.3 --add-host=slave2:172.17.0.4 --add-host=slave3:172.17.0.5 -itd -v /cgsrc:/cgsrc:ro -v /headless/course/:/course hadoop_node /service_start.sh
--name master
:将容器命名为master
。--privileged
:赋予容器特权模式,允许它访问主机上的所有设备。--ulimit nofile=65535:65535
:设置文件描述符的软限制和硬限制为 65535。--hostname master
:设置容器的主机名为master
。--ip 172.17.0.2
:为容器分配静态 IP 地址172.17.0.2
。--add-host=slave1:172.17.0.3
:在容器的/etc/hosts
文件中添加一条记录,将slave1
映射到172.17.0.3
。--add-host=slave2:172.17.0.4
:将slave2
映射到172.17.0.4
。--add-host=slave3:172.17.0.5
:将slave3
映射到172.17.0.5
。-itd
:以交互模式运行容器,并分配一个伪终端,同时在后台运行(-d
)。-v /cgsrc:/cgsrc:ro
:将主机上的/cgsrc
目录挂载到容器的/cgsrc
目录,并以只读模式(ro
)挂载。-v /headless/course/:/course
:将主机上的/headless/course/
目录挂载到容器的/course
目录。hadoop_node
:使用的 Docker 镜像名称。/service_start.sh
:容器启动后执行的脚
2.2 slave1
节点
--name slave1
:将容器命名为slave1
。--hostname slave1
:设置容器的主机名为slave1
。--ip 172.17.0.3
:为容器分配静态 IP 地址172.17.0.3
。--add-host=master:172.17.0.2
:在容器的/etc/hosts
文件中添加一条记录,将master
映射到172.17.0.2
。其他参数与
master
节点类似。
2.3 slave2
节点
2.4. slave3
节点
2.5 查看docker ps
docker ps
是一个 Docker 命令,用于列出当前正在运行的容器。它会显示容器的基本信息,例如容器 ID、镜像名称、启动命令、创建时间、状态、端口映射等。
执行
docker ps
解释:
2.6 在终端使用如下命令进入容器中:
比如进入master容器可以使用命令:
docker exec -it --privileged master /bin/bash
3.java环境安装
在容器master中使用如下命令从资源文件夹/cgsrc
中将JDK安装包复制到/usr/local/java
目录下:
mkdir /usr/local/java
cp /cgsrc/jdk-8u171-linux-x64.tar.gz /usr/local/java/
我们接下来切换到/usr/local/java
目录下,将安装包解压,并删除用过的tar文件。
cd /usr/local/java/
tar -zxvf jdk-8u171-linux-x64.tar.gz
rm -f jdk-8u171-linux-x64.tar.gz
此时/usr/local/java
目录下仅有一个jdk1.8.0_171
目录,这就是Java主目录。
接下来需要配置JAVA_HOME
环境变量,为了方便起见,这里直接在~/.bachrc
这个文件中进行设置,采用这种配置方式时,只对当前登录的单个用户生效,当该用户登录以及每次打开新的Shell时,它的环境变量文件.bashrc
会被读取。输入下面命令打开当前登录用户的环境变量配置文件.bashrc
:
vim ~/.bashrc
在文件最后面添加如下3行(注意等号前后不能有空格),然后保存退出vim:
export JAVA_HOME=/usr/local/java/jdk1.8.0_171
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin
接下来让环境变量生效,执行如下代码:
source ~/.bashrc
scp -r root@master:/usr/local/java root@slave1:/usr/local/java
4.ssh无密码登陆
需要让master节点可以SSH⽆密码登录到各个slave节点上。
⾸先,⽣成master节点的公钥,如果之前已经⽣成过公钥,必须删除原来的公钥,重新⽣成⼀次。具体命令如下:
cd ~/.ssh #如果没有该目录,先执行一次 ssh localhost,密码默认为83953588abc
rm -f ./id_rsa* #删除之前生成的公钥
ssh-keygen -t rsa #执行该命令后,遇到提示信息,均按Enter即可
下面这个命令是用于将一个公钥文件(id_rsa.pub
)的内容追加到另一个文件(authorized_keys
)中。具体来说,它的作用是将 SSH 公钥添加到授权密钥文件中,从而允许使用对应的私钥进行无密码登录。
为了让master节点能⽆密码SSH登录到本机,需要在master节点上执⾏如下命令:
cat ./id_rsa.pub >> ./authorized_keys
5.配置集群环境
vim workers
7.测试:
随便在那个文件夹中,进行如下操作
/input的路径在这个文件夹的完整路径是:hdfs://<namenode-host>:<port>/input
。
<namenode-host>
是 NameNode 的主机名或 IP 地址。<port>
是 HDFS 的端口号(默认是 9820)。
cd share/hadoop/mapreduce/
hadoop jar hadoop-mapreduce-examples-3.4.0.jar wordcount /input/data.txt /output
hdfs dfs -cat /output/part-r-00000
问题:
更改mapred-site.xml文件
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>
</configuration>
在原本的文档上增加了这些
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
</property>
export JAVA_HOME=/usr/local/java/jdk1.8.0_171
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export HADOOP_CLASSPATH=/usr/local/hadoop/share/hadoop/mapreduce/*:/usr/local/hadoop/share/hadoop/mapreduce/lib/*:${HADOOP_CLASSPATH}
第三周
1.
scp -r root@master:/usr/local/java root@slave1:/usr/local/java
scp克隆
root@master:/usr/local/java:原本要被复制的文件
root@slave1:/usr/local/java:粘贴的地方
2.ssh无密码登录
生成密钥对
ssh-keygen -t rsa
cat拼接,./id_rsa.pub 添加到./authorized_keys里面
cat ./id_rsa.pub >> ./authorized_keys
ssh文件下
known_hosts | 记录ssh访问过计算机的公钥 |
id_rsa | 生成的私钥 |
id_rsa.pub | 生成的公钥 |
authorized_keys | 存放授权过的无密码登录服务器公钥 |
hadoop安装
cp /cgsrc/hadoop-3.4.0.tar.gz /usr/local/
1.bin: 存放操作命令,具体包含如下图(hdfs,mapred,yarn)
2.etc:所有配置文件
3.include:头文件
4.lib:本地库(native库)压缩的动态链接库
5.libexec:拓展库
6.sbin:集群相关的命令
7.share:学习的资料,文档