大数据hadoop课程笔记

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

更新一下

bash 复制代码
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 节点。

删除节点的命令为:

bash 复制代码
docker rm -f master slave1 slave2 slave3

2.1.master节点

bash 复制代码
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、镜像名称、启动命令、创建时间、状态、端口映射等。

执行

bash 复制代码
docker ps

解释:

2.6 在终端使用如下命令进入容器中:

比如进入master容器可以使用命令:

bash 复制代码
docker exec -it --privileged master /bin/bash

3.java环境安装

在容器master中使用如下命令从资源文件夹/cgsrc中将JDK安装包复制到/usr/local/java目录下:

bash 复制代码
mkdir /usr/local/java
cp /cgsrc/jdk-8u171-linux-x64.tar.gz /usr/local/java/

我们接下来切换到/usr/local/java目录下,将安装包解压,并删除用过的tar文件。

bash 复制代码
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

bash 复制代码
vim ~/.bashrc

在文件最后面添加如下3行(注意等号前后不能有空格),然后保存退出vim:

bash 复制代码
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

接下来让环境变量生效,执行如下代码:

bash 复制代码
source ~/.bashrc
bash 复制代码
scp -r root@master:/usr/local/java root@slave1:/usr/local/java

4.ssh无密码登陆

需要让master节点可以SSH⽆密码登录到各个slave节点上。

⾸先,⽣成master节点的公钥,如果之前已经⽣成过公钥,必须删除原来的公钥,重新⽣成⼀次。具体命令如下:

bash 复制代码
cd ~/.ssh            #如果没有该目录,先执行一次 ssh localhost,密码默认为83953588abc
rm -f ./id_rsa*        #删除之前生成的公钥
ssh-keygen -t rsa    #执行该命令后,遇到提示信息,均按Enter即可

下面这个命令是用于将一个公钥文件(id_rsa.pub)的内容追加到另一个文件(authorized_keys)中。具体来说,它的作用是将 SSH 公钥添加到授权密钥文件中,从而允许使用对应的私钥进行无密码登录。

为了让master节点能⽆密码SSH登录到本机,需要在master节点上执⾏如下命令:

bash 复制代码
cat ./id_rsa.pub >> ./authorized_keys

5.配置集群环境

bash 复制代码
vim workers

7.测试:

随便在那个文件夹中,进行如下操作

/input的路径在这个文件夹的完整路径是:hdfs://<namenode-host>:<port>/input

  • <namenode-host> 是 NameNode 的主机名或 IP 地址。

  • <port> 是 HDFS 的端口号(默认是 9820)。

bash 复制代码
cd share/hadoop/mapreduce/
bash 复制代码
hadoop jar hadoop-mapreduce-examples-3.4.0.jar wordcount /input/data.txt /output
bash 复制代码
hdfs dfs -cat /output/part-r-00000

问题:

更改mapred-site.xml文件

bash 复制代码
<?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>

在原本的文档上增加了这些

bash 复制代码
<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>
bash 复制代码
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}

第三周

bash 复制代码
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无密码登录

生成密钥对

bash 复制代码
ssh-keygen -t rsa 

cat拼接,./id_rsa.pub 添加到./authorized_keys里面

bash 复制代码
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:学习的资料,文档

相关推荐
SelectDB24 分钟前
SelectDB 实时分析性能突出,宝舵成本锐减与性能显著提升的双赢之旅
大数据·数据库·数据分析
齐 飞28 分钟前
JVM内存结构笔记(中)
jvm·笔记
诗句藏于尽头36 分钟前
mac部署GPT-SoVITS,生成粤语踩坑点及使用记录
笔记·gpt·macos
BigBookX1 小时前
通过 ElasticSearch的Python API和`curl` 命令获取Elasticsearch 所有索引名称
大数据·elasticsearch·jenkins
JANGHIGH1 小时前
c++ constraints与concepts使用笔记
c++·笔记
kcarly1 小时前
N-Triples, Turtle, RDF/XML 都是什么?还有其他类似的么?
大数据·知识图谱·turtle·rdf·rdf格式·n-triples
zzzkk20092 小时前
BambuStudio学习笔记:MTUtils
笔记·学习
爱学习的小王!2 小时前
有关MyBatis的动态SQL
java·笔记·sql·学习·mybatis
一条晒干的咸魚2 小时前
【C#学习笔记03】进制转换与反码、补码、原码
开发语言·笔记·学习·c#
Fulima_cloud3 小时前
智慧锂电:开启能源新时代的钥匙
大数据·人工智能·物联网