引入
本文在兩臺2核2g的云服務(wù)器上搭建了Hadoop集群,兩臺云服務(wù)器分別是阿里云(hjm)和騰訊云(gyt),集群部署規(guī)劃如下:
hjm | gyt | |
---|---|---|
HDFS | NameNode\SecondaryNameNode\DataNode | DataNode |
YARN | ResourceManager\NodeManager | NodeManager |
經(jīng)實驗,目前可以正常實現(xiàn)文件上傳下載,但跑mapreduce程序還出現(xiàn)服務(wù)器資源不夠的情況
搭建過程
新增用戶
useradd hujinming
passwd hujinming
配置用戶sudo權(quán)限
vim /etc/sudoers
在
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
下面新增一行
hujinming ALL=(ALL) NOPASSWD:ALL
創(chuàng)建目錄并更改權(quán)限
在/opt 目錄下創(chuàng)建 module、software 文件夾
mkdir /opt/module
mkdir /opt/software
切換到root用戶下,修改 module、software 文件夾的所有者和所屬組均為hujinming用戶
chown hujinming:hujinming /opt/module
chown hujinming:hujinming /opt/software
查看 module、software 文件夾的所有者和所屬組
ll
安裝JDK
- 用xftp工具將jdk導(dǎo)入到opt目錄下面的software文件夾下面
- 解壓jdk到opt/module目錄下
tar -zxvf jdk-8u212-linux.x64.tar.gz -C /opt/module/
-
配置jdk環(huán)境變量
- 新建/etc/profile.d/my_env.sh 文件
sudo vim /etc/profile.d/my_env.sh
- 添加如下內(nèi)容
#JAVA_HOME export JAVA_HOME=/opt/module/jdk1.8.0_212 export PATH=$PATH:$JAVA_HOME/bin
- 保存后退出,source 一下/etc/profile 文件,讓新的環(huán)境變量 PATH 生效
source /etc/profile
- 測試jdk是否安裝成功
java -version
安裝hadoop
-
xftp傳輸
-
解壓安裝到/opt/module下面
-
將hadoop添加到環(huán)境變量
-
獲取hadoop安裝路徑
pwd
-
打開/etc/profile.d/my_env.sh 文件
sudo vim /etc/profile.d/my_env.sh
-
在 my_env.sh 文件末尾添加如下內(nèi)容:
#HADOOP_HOME export HADOOP_HOME=/opt/module/hadoop-3.1.3 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin
-
保存退出,讓修改后的文件生效
-
測試是否安裝成功
-
服務(wù)器IP映射
- 修改主機名
vim /etc/hostname
分別把兩臺服務(wù)器的名字改成hjm和gyt,這里以gyt舉例,直接在hostname文件上輸入
gyt
- 改映射文件
vim /etc/hosts
在linux中鍵入ifconfig命令可以查看內(nèi)網(wǎng)ip。在兩臺服務(wù)器中,填寫自己的私網(wǎng),訪問別人的填寫公網(wǎng),這里以gyt為例,gyt的公網(wǎng)IP是175.178.236.48,內(nèi)網(wǎng)IP是10.0.12.1。這里要注意一點,阿里云在hosts文件中已經(jīng)將本地IP映射成了一串英文,把這行信息刪掉再進(jìn)行上面的操作
47.115.207.108 hjm
10.0.12.1 gyt
-
在客戶端電腦(默認(rèn)windows)配置映射
因為在客戶端電腦進(jìn)行hadoop的操作時,兩臺機子會產(chǎn)生通信,他們通信時發(fā)送的網(wǎng)絡(luò)請求url是gyt或者h(yuǎn)jm,這在客戶端電腦是無法識別的,所以要將gyt和hjm都映射為他們的公網(wǎng)IP
-
windows + R
-
輸入drivers,回車
-
進(jìn)入etc文件
-
編輯hosts文件(都是公網(wǎng)IP)
175.178.236.48 gyt 47.115.207.108 hjm
-
ssh免密登錄
分別要配置4種免密登錄:
- hjm -> gyt
- gyt -> hjm
- hjm -> hjm
- gyt -> gyt
注意切換對應(yīng)用戶操作。先cd到~/.ssh,生成公鑰和私鑰
ssh-keygen -t rsa
這里以gyt -> hjm或hjm -> hjm為例:
ssh-copy-id hjm
修改配置文件
cd到$HADOOP_HOME/etc/hadoop目錄
core-site.xml
<configuration>
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hjm:8020</value>
</property>
<!-- 指定 hadoop 數(shù)據(jù)的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置 HDFS 網(wǎng)頁登錄使用的靜態(tài)用戶為 root -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>hujinming</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<!-- nn web 端訪問地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hjm:9870</value>
</property>
<!-- 2nn web 端訪問地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hjm:9868</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hjm</value>
</property>
<!-- 環(huán)境變量的繼承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
RED_HOME</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<!-- 指定 MapReduce 程序運行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
workers
hjm
gyt
去服務(wù)器上啟動對應(yīng)端口
- 用各自的服務(wù)器對雙方暴露所有的端口
- 同時,對公網(wǎng)暴露9864、9866、9870、9868端口
問題與解決
-
./sbin/start-dfs.sh 開啟NameNode 和 DataNode 守護(hù)進(jìn)程報錯:
Starting namenodes on [hjm] ERROR: Attempting to operate on hdfs namenode as root ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation. Starting datanodes ERROR: Attempting to operate on hdfs datanode as root ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation. Starting secondary namenodes [hjm] ERROR: Attempting to operate on hdfs secondarynamenode as root ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
解決方法:
在hjm上的start-dfs.sh和stop-dfs.sh上增加如下幾行:
HDFS_DATANODE_USER=hujinming HADOOP_SECURE_SECURE_USER=hdfs HDFS_NAMENODE_USER=hujinming HDFS_SECONDARYNAMENODE_USER=hujinming
在hjm上的start-yarn.sh和stop-yarn.sh上增加如下幾行:
YARN_RESOURCEMANAGER_USER=hujinming HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=hujinming
-
報錯hjm: ERROR: Cannot set priority of namenode process 23214,沒有啟動NameNode和SecondaryNameNode
? 解決方法:
? 在兩臺服務(wù)器的/etc/hosts中,填寫自己的私網(wǎng),訪問別人的填寫公網(wǎng)
- 找不到NameNode和SecondaryNameNode
? 解決方法:
? 把所有節(jié)點logs和data刪掉,重新格式化namenode,在hjm機子上,執(zhí)行下面命令:
hdfs namenode -format
- 客戶端(windows)識別不了hjm和gyt
? 解決方法:改windows下面的主機名映射
- 配置WebUI可跨域?
? 解決方法:在兩臺服務(wù)器的core-site.xml加入下面代碼
<!--web console cors settings-->
<property>
<name>hadoop.http.filter.initializers</name>
<value>org.apache.hadoop.security.HttpCrossOriginFilterInitializer</value>
</property>
<property>
<name>hadoop.http.cross-origin.enabled</name>
<value>true</value>
</property>
<property>
<name>hadoop.http.cross-origin.allowed-origins</name>
<value>*</value>
</property>
<property>
<name>hadoop.http.cross-origin.allowed-methods</name>
<value>*</value>
</property>
<property>
<name>hadoop.http.cross-origin.allowed-headers</name>
<value>X-Requested-With,Content-Type,Accept,Origin</value>
</property>
<property>
<name>hadoop.http.cross-origin.max-age</name>
<value>1800</value>
</property>
- 沒有足夠的副本數(shù)量?
? 解決方法:還得看DataNode的數(shù)量。因為目前只有2臺設(shè)備,最多也就2個副本,HDFS默認(rèn)是3個副本,只有節(jié)點數(shù)的增加到10臺時,副本數(shù)才能達(dá)到10。詳細(xì)請看https://www.yii666.com/article/664023.html
- hadoop腳本啟動時,錯誤: ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: Exception in secureMain?
? 解決方法:在master主機的slaves文件中刪除localhost即可。詳細(xì)請看https://blog.csdn.net/Mr_ZNC/article/details/80700652文章來源:http://www.zghlxwxcb.cn/news/detail-709931.html
- HDFS的webui界面上傳下載文件,出現(xiàn)卡死情況?
? 解決方法:暴露服務(wù)器所有端口給對方文章來源地址http://www.zghlxwxcb.cn/news/detail-709931.html
到了這里,關(guān)于在阿里云和騰訊云的輕量應(yīng)用服務(wù)器上搭建Hadoop集群的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!