日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Spark快速大数据分析——Spark的Hadoop配置(肆)

發(fā)布時(shí)間:2023/12/20 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spark快速大数据分析——Spark的Hadoop配置(肆) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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 ./output

Hadoop偽分布式配置

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.dir

Hadoop 運(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。