看boss有招大數據的講師,好奇看了下,現在大學都講大數據了,現在是越來越普及。昨天弄了一個雲服務器部署了下Hadoop,雖然也是參考網上教程部署,但過程中還是出了不少問題。想着把部署過程完整記錄下,所以我就把部署好的實例釋放了又實例化了一臺新的雲服務器重新部署了下,如果是在我本地安裝報錯了還得重新安裝那就耗時耗力,雲服務器直接釋放就好了。主要參考文檔:https://zhuanlan.zhihu.com/p/503707617。
一、系統軟件
Ubuntu 22.04 64位 Hadoop 3.3.6 Java 8
二、更新系統軟件
sudo apt-get update
三、安裝 ssh 和 ssh 服務器
sudo apt-get install openssh-server
四、檢查ssh是否安裝成功
ps -e|grep ssh
五、安裝pdsh
sudo apt-get install pdsh
六、在/etc/profile和文件下增加下面代碼
export PDSH_RCMD_TYPE=ssh
七、配置 ssh 密鑰
命令行輸入下面代碼
ssh-keygen -t rsa -P ""
八、生成的密鑰拷貝到授權文件中
可以看到密鑰這些保存的位置在/root下面,跳轉到/root目錄下,輸入ls -a可以看到.ssh文件
在.ssh目錄下執行命令cat id_rsa.pub >>authorized_keys
九、檢驗ssh
ssh localhost
十、安裝Java
sudo apt-get install openjdk-8-jdk
安裝 Java 8後檢測下版本java -version,然後在可以檢查下java home的路徑,在本機java home爲/usr/lib/jvm/java-1.8.0-openjdk-amd64
十一、下載Hadoop並解壓
這裏我是在我本地下載好通過xftp上傳到雲服務器上,然後再解壓修改名稱。
在/home目錄下新建Hadoop目錄,下載hadoop壓縮包,xftp上傳到/home/Hadoop,
然後解壓tar xzf hadoop-3.3.6.tar.gz,解壓後使用mv hadoop-3.3.6 hadoop修改文件夾名改爲hadoop,hadoop安裝目錄如下圖所示。
十二.配置JAVA_HOME
在/home/Hadoop/hadoop/etc/hadoop目錄下找到hadoop-env.sh,vim hadoop-env.sh,配置java home:/usr/lib/jvm/java-1.8.0-openjdk-amd64,如下圖可以看到
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64。注意加export,不然後面提示找不到Java home。
十三、修改core-site.xml
在/home/Hadoop/hadoop/etc/hadoop目錄下,vim core-site.xml,修改core-site.xml增加配置
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/Hadoop/hadooptest/hdata</value> </property> </configuration>
十四、修改hdfs-site.xml
在/home/Hadoop/hadoop/etc/hadoop目錄下,vim hdfs-site.xml,修改hdfs-site.xml增加配置
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
十五、修改mapred-site.xml
在/home/Hadoop/hadoop/etc/hadoop目錄下,vim mapred-site.xml,修改mapred-site.xml增加配置,注意下面路徑,配置的是hadoop的安裝目錄
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=/home/Hadoop/hadoop</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=/home/Hadoop/hadoop</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=/home/Hadoop/hadoop</value> </property> </configuration>
十六、修改yarn-site.xml
在/home/Hadoop/hadoop/etc/hadoop目錄下,vim yarn-site.xml,修改yarn-site.xml增加配置
<configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> </configuration>
十七、修改bash.bashrc文件
在系統/etc目錄下找到bash.bashrc,vim bash.bashrc,增加如下配置,然後使用source bash.bashrc使其生效
export HADOOP_HOME="/home/Hadoop/hadoop" export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin export HADOOP_MAPRED_HOME=${HADOOP_HOME} export HADOOP_COMMON_HOME=${HADOOP_HOME} export HADOOP_HDFS_HOME=${HADOOP_HOME} export YARN_HOME=${HADOOP_HOME}
十八、格式化hdfs文件系統
hdfs namenode -format
我第一次安裝的時候提示找不到hdfs命令,安裝配置我也是參考的知乎https://zhuanlan.zhihu.com/p/503707617這篇文章,我第一次把export PDSH_RCMD_TYPE=ssh配置在了bash.bashrc文件下,沒在/etc/profile文件配置,後來在/etc/profile配置後可以執行格式化命令了。這次部署未在bash.bashrc文件配置,只是在/etc/profile文件配置。
No command 'hdfs' found, did you mean: Command 'hfs' from package 'hfsutils-tcltk' (universe) Command 'hdfls' from package 'hdf4-tools' (universe) hdfs: command not found
十九、啓動HDFS服務
在/home/Hadoop/hadoop/sbin目錄下執行start-dfs.sh命令,報如下錯誤
網上搜的解決方法則需要在修改/home/Hadoop/hadoop/sbin下的4個文件:start-dfs.sh、stop-dfs.sh、start-yarn.sh、stop-yarn.sh或者在hadoop-env.sh增加配置。在4個文件增加配置我這邊配置後無效,就改成了在hadoop-env.sh文件中增加配置
在start-dfs.sh、stop-dfs.sh兩個文件中增加如下配置
HDFS_DATANODE_USER=root HADOOP_SECURE_DN_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
在start-yarn.sh、stop-yarn.sh兩個文件中增加如下配置
YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root
最後改成在hadoop-env.sh文件中增加配置,重新執行start-dfs.sh命令,如下圖則啓動成功。
export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root
二十、瀏覽器輸入url驗證
在瀏覽器輸入ip:9870驗證是否成功。
二十一、啓動yarn服務
在sbin目錄下執行start-yarn.sh命令啓動yarn服務。在瀏覽器輸入ip:8088驗證。
二十二、遇到的問題
1.刪除文件報錯: Permission denied: user=dr.who, access=WRITE, inode="/input":root:supergroup:drwxr-xr-x
解決方法:在hadoop目錄找到etc/hadoop/core-site.xml,增加下面屬性配置
<property> <name>hadoop.http.staticuser.user</name> <value>root</value> </property>
2.瀏覽器打開hdfs文件words.txt時報下面錯誤
Couldn't preview the file. NetworkError: Failed to execute 'send' on 'XMLHttpRequest': Failed to load 'http://izbp158j7mgbfo44t5den7z:9864/webhdfs/v1/input/words.txt?op=OPEN&namenoderpcaddress=localhost:9000&offset=0&_=1694319006465'.
解決方法:
1.在本地電腦C:\Windows\System32\drivers\etc下修改host文件,增加雲服務器ip 服務器名映射。
120.26.86.118 izbp158j7mgbfo44t5den7z
2.在hadoop下面的etc目錄找到 hdfs-site.xml,增加下面屬性配置。
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
3.在雲服務器/ect/hosts文件增加配置
120.26.86.118 iZbp158j7mgbfo44t5den7Z
4.保存後重啓hadoop服務器。
下圖可以看到打開words.txt裏面的內容了。
二十三、測試
在二十二步驟中可以看到已把words.txt文件放到了hdfs的/input目錄下,在雲服務器中打開hadoop目錄下的share目錄,/home/Hadoop/hadoop/share,之後再下面目錄找到mapreduce目錄,具體目錄爲:/home/Hadoop/hadoop/share/hadoop/mapreduce,執行命令: hadoop jar hadoop-mapreduce-examples-3.3.6.jar wordcount /input /output,這裏的/input /output爲hdfs目錄。執行後會出現下面的界面。
在瀏覽器中會顯示output目錄,打開目錄下的part-r-00000文件可以看到統計的結果。