?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.shdocker 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.shdocker 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.shdocker 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 athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed 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 andlimitations 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/hadoopexport 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:學習的資料,文檔