Spark快速大数据分析——Spark的Hadoop配置(肆)
Spark快速大數(shù)據(jù)分析——Spark的Hadoop配置(肆)
本文主要參考林子雨老師的hadoop搭建文檔,在此放下鏈接,如需使用hadoop3.1.3版本可進(jìn)行參考:
廈門大學(xué)林子雨老師博客
系列文章目錄
Spark快速大數(shù)據(jù)分析——Scala語言基礎(chǔ)(壹)。
Spark快速大數(shù)據(jù)分析——Spark安裝與IDEA 開發(fā)(貳)。
Spark快速大數(shù)據(jù)分析——Spark的WSL環(huán)境安裝與Hadoop環(huán)境配置(叁)
文章目錄
- Spark快速大數(shù)據(jù)分析——Spark的Hadoop配置(肆)
- 系列文章目錄
- 軟件環(huán)境:
- Hadoop單機(jī)配置(非分布式)
- 注意!
- Hadoop偽分布式配置
- Hadoop配置文件說明
- 注意!
- 注意!
- Hadoop無法正常啟動(dòng)的解決方法
- 運(yùn)行Hadoop偽分布式實(shí)例
- 注意!
軟件環(huán)境:
- Hadoop-3.2
- Spark-3.1.3
- JDK 8
- WSL2 Ubuntu20.04
- Windos10 20H2
Hadoop單機(jī)配置(非分布式)
Hadoop 默認(rèn)模式為非分布式模式(本地模式),無需進(jìn)行其他配置即可運(yùn)行。非分布式即單 Java 進(jìn)程,方便進(jìn)行 調(diào)試。
現(xiàn)在我們可以執(zhí)行例子來測試一下Hadoop 的運(yùn)行是否正常。
Hadoop 附帶了豐富的例子(運(yùn)行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar 可以看到所有例子),包括 wordcount、 terasort、join、grep 等。
在此我們選擇運(yùn)行g(shù)rep例子,我們將input文件夾的所有文件作為輸入,篩選當(dāng)中符合正則表達(dá)式 dfs[a-z.]+ 的單 詞并統(tǒng)計(jì)出現(xiàn)的次數(shù),最后輸出結(jié)果到 output 文件夾中。
首先切換到hadoop用戶下:
jszszzy@LAPTOP-74GAR8S9:~$ su hadoop切換對(duì)應(yīng)文件夾下:
hadoop@LAPTOP-74GAR8S9:/home/jszszzy$ cd /usr/local/hadoop創(chuàng)建一個(gè)input文件夾,把配置文件拷貝過來,將配置文件作為輸入文件:
hadoop@LAPTOP-74GAR8S9:/usr/local/hadoop$ mkdir ./input hadoop@LAPTOP-74GAR8S9:/usr/local/hadoop$ cp ./etc/hadoop/*.xml ./input最后調(diào)用運(yùn)行,注意不要換行!(顯示的可能有換行),注意版本和你本機(jī)安裝的版本相對(duì)應(yīng):
hadoop@LAPTOP-74GAR8S9:/usr/local/hadoop$ ./bin/hadoop jar./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.2.jar grep ./input ./output 'dfs[a-z.]+'如果在這個(gè)地方產(chǎn)生報(bào)錯(cuò):
Error: Could not find or load main class jar..share.hadoop.mapreduce.hadoop請刪除hadoop重新解壓一下,刪除命令如下,解壓命令參考第三篇:
cd /usr/local sudo rm -r hadoop等待運(yùn)行完成后查看結(jié)果:
hadoop@LAPTOP-74GAR8S9:/usr/local/hadoop$ cat ./output/* 1 dfsadmin完成后結(jié)果如下:
顯示符合正則的單詞 dfsadmin 出現(xiàn)了1次。
注意!
注意,Hadoop 默認(rèn)不會(huì)覆蓋結(jié)果文件,因此再次運(yùn)行上面實(shí)例會(huì)提示出錯(cuò),需要先將 ./output 刪除。
刪除命令:
hadoop@LAPTOP-74GAR8S9:/usr/local/hadoop$ rm -r ./outputHadoop偽分布式配置
Hadoop 可以在單節(jié)點(diǎn)上以偽分布式的方式運(yùn)行,Hadoop 進(jìn)程以分離的 Java 進(jìn)程來運(yùn)行,節(jié)點(diǎn)既作為 NameNode 也作為 DataNode,同時(shí),讀取的是 HDFS 中的文件。
Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,偽分布式需要修改2個(gè)配置文件 core-site.xml 和 hdfssite.xml 。Hadoop的配置文件是 xml 格式,每個(gè)配置以聲明 property 的 name 和 value 的方式來實(shí)現(xiàn)。
修改配置文件 core-site.xml: vim ./etc/hadoop/core-site.xml ,將當(dāng)中的
<configuration> </configuration>修改為下面配置:
<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>同樣的,修改配置文件 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>Hadoop配置文件說明
Hadoop 的運(yùn)行方式是由配置文件決定的(運(yùn)行 Hadoop 時(shí)會(huì)讀取配置文件),因此如果需要從偽分布式模 式切換回非分布式模式,需要?jiǎng)h除 core-site.xml 中的配置項(xiàng)。
此外,偽分布式雖然只需要配置 fs.defaultFS 和 dfs.replication 就可以運(yùn)行(官方教程如此),不過若沒有 配置 hadoop.tmp.dir 參數(shù),則默認(rèn)使用的臨時(shí)目錄為 /tmp/hadoo-hadoop,而這個(gè)目錄在重啟時(shí)有可能被系 統(tǒng)清理掉,導(dǎo)致必須重新執(zhí)行 format 才行。所以我們進(jìn)行了設(shè)置,同時(shí)也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否則在接下來的步驟中可能會(huì)出錯(cuò)。
我們繼續(xù)回到配置:
配置完成后,執(zhí)行 NameNode 的格式化,注意這里路徑是什么:
hadoop@LAPTOP-74GAR8S9:/usr/local/hadoop$ ./bin/hdfs namenode -format成功的話,會(huì)看到 “successfully formatted” 的提示,具體返回信息類似如下:
hadoop@LAPTOP-74GAR8S9:/usr/local/hadoop$ ./bin/hdfs namenode -format WARNING: /usr/local/hadoop/logs does not exist. Creating. 2022-04-14 13:20:01,596 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = LAPTOP-74GAR8S9.localdomain/127.0.1.1 STARTUP_MSG: args = [-format] STARTUP_MSG: version = 3.2.2 STARTUP_MSG: classpath = /usr/local/hadoop/etc/hadoop:/usr/local/hadoop/share/hadoop/common/lib/netty-3.10.6.Final.注意!
如果在這一步報(bào)錯(cuò):
Error: JAVA_HOME is not set and could not be found.
則說明之前設(shè)置 JAVA_HOME 環(huán)境變量那邊就沒設(shè)置好,請按教程先設(shè)置好 JAVA_HOME 變量,否則后面的過程都是進(jìn)行不下去 。
如果已經(jīng)按照前面教程在.bashrc文件中設(shè)置了JAVA_HOME。還是出現(xiàn) Error: JAVA_HOME is not set and could not be found. 的錯(cuò)誤。
那么,請到hadoop的安裝目錄修改配置文件/usr/local/hadoop/etc/hadoop/hadoop-env.sh”,在里面找到“export JAVA_HOME=${JAVA_HOME}”這行,然后,把它修改成JAVA安裝路徑的具體地址,比 如,“export JAVA_HOME=/usr/lib/jvm/default-java”,然后,再次啟動(dòng)Hadoop。
設(shè)置后仍報(bào)錯(cuò):
打開環(huán)境配置文件:
添加:export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
接著開啟NameNode和DataNode守護(hù)進(jìn)程:
hadoop@LAPTOP-74GAR8S9:/usr/local/hadoop$ cd /usr/local/hadoop hadoop@LAPTOP-74GAR8S9:/usr/local/hadoop$ ./sbin/start-dfs.sh輸入命令以后開始運(yùn)行:
hadoop@LAPTOP-74GAR8S9:/usr/local/hadoop$ cd /usr/local/hadoop hadoop@LAPTOP-74GAR8S9:/usr/local/hadoop$ ./sbin/start-dfs.sh如果有報(bào)錯(cuò)如下:
hadoop@LAPTOP-HO0AHQKI:/usr/local/hadoop$ sudo ./sbin/start-dfs.sh WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER. Using value of HADOOP_SECURE_DN_USER. Starting namenodes on [localhost] localhost: root@localhost: Permission denied (publickey). Starting datanodes localhost: root@localhost: Permission denied (publickey). Starting secondary namenodes [LAPTOP-HO0AHQKI] LAPTOP-HO0AHQKI: root@laptop-ho0ahqki: Permission denied (publickey).請使用:
exit退出ssh!
注意!
若出現(xiàn)如下SSH提示,輸入yes即可:
啟動(dòng)時(shí)可能會(huì)出現(xiàn)如下 WARN 提示:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable WARN 提示可以忽略,并不會(huì)影響正常使用。
啟動(dòng) Hadoop 時(shí)提示 Could not resolve hostname 如果啟動(dòng) Hadoop 時(shí)遇到輸出非常多“ssh: Could not resolve hostname xxx”的異常情況,如下圖所示:
這個(gè)并不是 ssh 的問題,可通過設(shè)置 Hadoop 環(huán)境變量來解決。首先按鍵盤的 ctrl + c 中斷啟動(dòng),然后在 ~/.bashrc 中,增加如下兩行內(nèi)容(設(shè)置過程與 JAVA_HOME 變量一樣,其中 HADOOP_HOME 為 Hadoop 的安裝目錄):
export HADOOP_HOME=/usr/local/hadoop export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native保存后,務(wù)必執(zhí)行 source ~/.bashrc 使變量設(shè)置生效,然后再次執(zhí)行 ./sbin/start-dfs.sh 啟動(dòng) Hadoop。
啟動(dòng)完成后,可以通過命令 jps 來判斷是否成功啟動(dòng),若成功啟動(dòng)則會(huì)列出如下進(jìn)程: “NameNode”、”DataNode” 和 “SecondaryNameNode”(如果 SecondaryNameNode 沒有啟動(dòng),請運(yùn)行 sbin/stop-dfs.sh 關(guān)閉進(jìn)程,然后再次嘗 試啟動(dòng)嘗試)。如果沒有 NameNode 或 DataNode ,那就是配置不成功,請仔細(xì)檢查之前步驟,或通過查看啟動(dòng)日志排查原因。
使用后:
Hadoop無法正常啟動(dòng)的解決方法
- 一般可以查看啟動(dòng)日志來排查原因
,注意幾點(diǎn): 啟動(dòng)時(shí)會(huì)提示形如 “DBLab-XMU: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoopnamenode-DBLab-XMU.out”,其中 DBLab-XMU 對(duì)應(yīng)你的機(jī)器名,但其實(shí)啟動(dòng)日志信息是記錄在 /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.log 中,所以應(yīng)該查看這個(gè)后綴為 .log 的 文件; - 每一次的啟動(dòng)日志都是追加在日志文件之后,所以得拉到最后面看,對(duì)比下記錄的時(shí)間就知道了。
- 一般出錯(cuò)的提示在最后面,通常是寫著 Fatal、Error、Warning 或者 Java Exception 的地方。
- 可以在網(wǎng)上搜索一下出錯(cuò)信息,看能否找到一些相關(guān)的解決方法
此外,若是 DataNode 沒有啟動(dòng),可嘗試如下的方法(注意這會(huì)刪除 HDFS 中原有的所有數(shù)據(jù),如果原有的 數(shù)據(jù)很重要請不要這樣做):
$ # 針對(duì) DataNode 沒法啟動(dòng)的解決方法 $ cd /usr/local/hadoop $ ./sbin/stop-dfs.sh # 關(guān)閉 $ rm -r ./tmp # 刪除 tmp 文件,注意這會(huì)刪除 HDFS 中原有的所有數(shù)據(jù) $ ./bin/hdfs namenode -format # 重新格式化 NameNode $ ./sbin/start-dfs.sh # 重啟運(yùn)行Hadoop偽分布式實(shí)例
上面的單機(jī)模式,grep 例子讀取的是本地?cái)?shù)據(jù),偽分布式讀取的則是 HDFS 上的數(shù)據(jù)。要使用 HDFS,首先需要在 HDFS 中創(chuàng)建用戶目錄:
hadoop@LAPTOP-74GAR8S9:/usr/local/hadoop$ ./bin/hdfs dfs -mkdir -p /user/hadoop接著將 ./etc/hadoop 中的 xml 文件作為輸入文件復(fù)制到分布式文件系統(tǒng)中,即將 /usr/local/hadoop/etc/hadoop 復(fù)制 到分布式文件系統(tǒng)中的 /user/hadoop/input 中。我們使用的是 hadoop 用戶,并且已創(chuàng)建相應(yīng)的用戶目錄 /user/hadoop ,因此在命令中就可以使用相對(duì)路徑如 input,其對(duì)應(yīng)的絕對(duì)路徑就是 /user/hadoop/input:
hadoop@LAPTOP-74GAR8S9:/usr/local/hadoop$ ./bin/hdfs dfs -mkdir -p /user/hadoop/input hadoop@LAPTOP-74GAR8S9:/usr/local/hadoop$ ./bin/hdfs dfs -put ./etc/hadoop/*.xml input可以使用ls查看一下文件信息:
hadoop@LAPTOP-74GAR8S9:/usr/local/hadoop$ ./bin/hdfs dfs -ls input Found 9 items -rw-r--r-- 1 hadoop supergroup 9213 2022-04-14 13:37 input/capacity-scheduler.xml -rw-r--r-- 1 hadoop supergroup 1033 2022-04-14 13:37 input/core-site.xml -rw-r--r-- 1 hadoop supergroup 11392 2022-04-14 13:37 input/hadoop-policy.xml -rw-r--r-- 1 hadoop supergroup 1079 2022-04-14 13:37 input/hdfs-site.xml -rw-r--r-- 1 hadoop supergroup 620 2022-04-14 13:37 input/httpfs-site.xml -rw-r--r-- 1 hadoop supergroup 3518 2022-04-14 13:37 input/kms-acls.xml -rw-r--r-- 1 hadoop supergroup 682 2022-04-14 13:37 input/kms-site.xml -rw-r--r-- 1 hadoop supergroup 758 2022-04-14 13:37 input/mapred-site.xml -rw-r--r-- 1 hadoop supergroup 690 2022-04-14 13:37 input/yarn-site.xml偽分布式運(yùn)行 MapReduce 作業(yè)的方式跟單機(jī)模式相同,區(qū)別在于偽分布式讀取的是HDFS中的文件(可以將單機(jī)步 驟中創(chuàng)建的本地 input 文件夾,輸出結(jié)果 output 文件夾都刪掉來驗(yàn)證這一點(diǎn))。
注意:命令沒有換行:
hadoop@LAPTOP-74GAR8S9:/usr/local/hadoop$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.2.jar grep input output 'dfs[a-z.]+'查看運(yùn)行結(jié)果的命令(查看的是位于 HDFS 中的輸出結(jié)果):
hadoop@LAPTOP-74GAR8S9:/usr/local/hadoop$ ./bin/hdfs dfs -cat output/* 1 dfsadmin 1 dfs.replication 1 dfs.namenode.name.dir 1 dfs.datanode.data.dirHadoop 運(yùn)行程序時(shí),輸出目錄不能存在,否則會(huì)提示錯(cuò)誤 “org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists”
因此若要再次執(zhí)行,需要執(zhí)行如下命令刪除 output 文件夾:
hadoop@LAPTOP-74GAR8S9:/usr/local/hadoop$ ./bin/hdfs dfs -rm -r output Deleted output注意!
運(yùn)行程序時(shí),輸出目錄不能存在 運(yùn)行 Hadoop 程序時(shí),為了防止覆蓋結(jié)果,程序指定的輸出目錄(如 output)不能存在,否則會(huì)提示錯(cuò)誤, 因此運(yùn)行前需要先刪除輸出目錄。在實(shí)際開發(fā)應(yīng)用程序時(shí),可考慮在程序中加上如下代碼,能在每次運(yùn)行時(shí) 自動(dòng)刪除輸出目錄,避免繁瑣的命令行操作:
Configuration conf = new Configuration(); Job job = new Job(conf); /* 刪除輸出目錄 */ Path outputPath = new Path(args[1]); outputPath.getFileSystem(conf).delete(outputPath, true);若要關(guān)閉 Hadoop,則運(yùn)行:
hadoop@LAPTOP-74GAR8S9:/usr/local/hadoop$ ./sbin/stop-dfs.sh Stopping namenodes on [localhost] Stopping datanodes Stopping secondary namenodes [LAPTOP-74GAR8S9]總結(jié)
以上是生活随笔為你收集整理的Spark快速大数据分析——Spark的Hadoop配置(肆)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机开启网络共享,一键开启共享_局域网
- 下一篇: kali安装pip