目錄
1、下載並配置java環境
在這里jdk建議使用1.7或者1.8,在官方的測試中1.7是全面通過測試的,而1.8被證實可行,如果是更高版本,當然也是可以的,但有可能會帶來不必要的麻煩,小編就曾經使用openjdk1.15搭建過哦。點擊標題,在上一篇文章中,講的很詳細了。
2、下載並解壓hadoop安裝包
使用下面的連接來完成下載
wget https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
之后使用tar -xzvf
來進行解壓
tar -xzvf hadoop-3.2.1.tar.gz
最后會產生hadoop-3.2.1最后會產生如下圖的文件。
您也可以使用其他版本【下載網址】
3、配置環境變量
通過vim /etc/profile
將hadoop配置寫入profile中
# hadoop
export HADOOP_HOME=/opt/hadoop-3.2.1
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
#hadoop-3.2.1必須添加如下5個變量否則啟動報錯,(hadoop-2.x不需要)
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
測試一下效果,如果命令都產生了版本信息就證明環境變量的配置 我們已經成功了。
[root@localhost opt]# java -version
java version “1.8.0_202”
Java™ SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot™ 64-Bit Server VM (build 25.202-b08, mixed mode)
[root@localhost opt]# hadoop version
Hadoop 3.2.1
Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r b3cbbb467e22ea829b3808f4b7b01d07e0bf3842
Compiled by rohithsharmaks on 2019-09-10T15:56Z
Compiled with protoc 2.5.0
From source with checksum 776eaf9eee9c0ffc370bcbc1888737
This command was run using /opt/hadoop-3.2.1/share/hadoop/common/hadoop-common-3.2.1.jar
4、配置以下5個文件
- 修改 hadoop-3.2.1/etc/hadoop/hadoop-env.sh
vim hadoop-3.2.1/etc/hadoop/hadoop-env.sh
取消並修改添加export JAVA_HOME=
,使其值為我們解壓出jdk的位置,export JAVA_HOME=/opt/jdk1.8.0_202
- 修改 hadoop-3.2.1/etc/hadoop/core-site.xml
vim hadoop-3.2.1/etc/hadoop/core-site.xml
<configuration>
<!--指定HADOOP所使用的文件系統schema(URI)NameNode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<!--指定HADOOP運行時產生文件的存儲目錄-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-3.2.1/tmp</value>
</property>
</configuration>
- 修改 hadoop-3.2.1/etc/hadoop/hdfs-site.xml
vim hadoop-3.2.1/etc/hadoop/hdfs-site.xml
<configuration>
<!--指定HDFS副本的數量-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--設置默認端口,這段是我后來加的,如果不加上會導致啟動hadoop-3.1.0后無法訪問50070端口查看HDFS管理界面,hadoop-2.7.7可以不加-->
<property>
<name>dfs.http.address</name>
<value>localhost:50070</value>
</property>
</configuration>
- 修改 hadoop-3.2.1/etc/hadoop/mapred-site.xml
vim hadoop-3.2.1/etc/hadoop/mapred-site.xml
<!--指定mr運行在yarn上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- 修改 hadoop-3.2.1/etc/hadoop/yarn-site.xml
vim hadoop-3.2.1/etc/hadoop/yarn-site.xml
<configuration>
<!-- ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<!-- 指定reducer獲取數據的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
5、設置ssh免密碼登錄
這步在3.2.1中是不可省略的,如果沒有配置會在運行時彈出警告,開啟失敗,而在2.*則會讓你輸入密碼。
設置過程如下
[root@localhost opt]# cd ~
[root@localhost ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #(回車即可)
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): #(回車即可)
Enter same passphrase again: #(回車即可)
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:wnLCQCfmTn4ZWM17UMKIyxeHuZPc9g5QGt44XLBKJhk root@localhost.localdomain
The key's randomart image is:
+---[RSA 3072]----+
|E +.+O... |
| *.=*.O. |
|o.B=o& o |
| Bo+&+= . |
| +.*=+oS |
| . +... |
| o |
| . |
| |
+----[SHA256]-----+
[root@localhost ~]# cd .ssh/
[root@localhost .ssh]# ls
id_rsa id_rsa.pub #(id_rsa私鑰 id_rsa.pub公鑰)
[root@localhost .ssh]# cp id_rsa.pub authorized_keys
[root@localhost .ssh]# ssh localhost date
The authenticity of host 'localhost (::1)' can't be established. ECDSA key fingerprint is SHA256:R8etYp59lL7SLJIGJwybhSw5ziySPaxFhcqKY0ZDxEo. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Wed Sep 30 18:46:36 EDT 2020
[root@localhost .ssh]# ssh localhost #(如果沒有提示輸入密碼即為成功)
Last login: Wed Sep 30 17:30:34 2020 from 192.168.45.1
6、開啟hadoop
6.1 格式化NameNode
注意:如需要再格式化NameNode,需要先刪除第一次運行Hadoop后產生的VERSION文件。
[root@localhost opt]# hdfs namenode -format
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = localhost/127.0.0.1
......
......
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop/192.168.42.134
************************************************************/
6.2 使用start-all開啟所有進程
[root@localhost opt]# start-all.sh
Starting namenodes on [localhost]
Last login: Thu Oct 1 01:15:02 EDT 2020 from 192.168.45.1 on pts/0
Starting datanodes
Last login: Thu Oct 1 01:21:30 EDT 2020 on pts/0
Starting secondary namenodes [localhost.localdomain]
Last login: Thu Oct 1 01:21:34 EDT 2020 on pts/0
localhost.localdomain: Warning: Permanently added 'localhost.localdomain' (ECDSA) to the list of known hosts.
Starting resourcemanager
Last login: Thu Oct 1 01:22:01 EDT 2020 on pts/0
Starting nodemanagers
Last login: Thu Oct 1 01:22:29 EDT 2020 on pts/0
6.3 使用start-all開啟所有進程,當你看到以下六個進程時證明了你的環境已經配置好了。
[root@localhost opt]# jps
12256 ResourceManager
12547 Jps
12004 SecondaryNameNode
11769 DataNode
12393 NodeManager
11627 NameNode
7、設置外界可以訪問
當你在配置里使用localhost時,其實是一種偷懶的做法,外部是無法進行訪問的。例如,如果我在虛擬機中使用localhost配置的話,那么在主機是無法訪問到hadoop服務的。這時我們可以將localhost改成自己的公網ip。
7.1 使用ifconfig
查詢自己的ip
7.2 將配置的localhost 改為這個ip
- 修改 hadoop-3.2.1/etc/hadoop/core-site.xml
vim hadoop-3.2.1/etc/hadoop/core-site.xml
<configuration>
<!--指定HADOOP所使用的文件系統schema(URI)NameNode的地址-->
<property>
<name>fs.defaultFS</name>
<!-- localhost => 192.168.45.132 -->
<value>hdfs://192.168.45.132:9000</value>
</property>
<!--指定HADOOP運行時產生文件的存儲目錄-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-3.2.1/tmp</value>
</property>
</configuration>
- 修改 hadoop-3.2.1/etc/hadoop/hdfs-site.xml
vim hadoop-3.2.1/etc/hadoop/hdfs-site.xml
<configuration>
<!--指定HDFS副本的數量-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--設置默認端口,這段是我后來加的,如果不加上會導致啟動hadoop-3.1.0后無法訪問50070端口查看HDFS管理界面,hadoop-2.7.7可以不加-->
<property>
<name>dfs.http.address</name>
<value>192.168.45.132:50070</value>
</property>
</configuration>
- 修改 hadoop-3.2.1/etc/hadoop/yarn-site.xml
vim hadoop-3.2.1/etc/hadoop/yarn-site.xml
<configuration>
<!-- ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>192.168.45.132</value>
</property>
<!-- 指定reducer獲取數據的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
7.3 關閉防火牆
防火牆會阻止非本機對服務發起的請求,所以,如果要讓外界訪問到hadoop服務一定要配置防火牆,如果是在虛擬機上,就可以直接關閉了。
使用systemctl stop firewalld
來零時關閉
使用systemctl disable firewalld
來永久關閉
當你執行完以上三步就可以在主機,或者另外一台機子上進行hadoop服務的訪問了(如果不是公網ip,需要在同一局域網中)
7.4 使用hosts隱藏ip地址(可選項)
在配置信息里,我們一般會使用域名來代替ip地址。配置如下
vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.45.132 mainnode #(添加這句,表示把本機的ip映射成了mainnode)
之后就是把ip 換成"mainnode"
- 以修改 hadoop-3.2.1/etc/hadoop/core-site.xml為例
vim hadoop-3.2.1/etc/hadoop/core-site.xml
<configuration>
<!--指定HADOOP所使用的文件系統schema(URI)NameNode的地址-->
<property>
<name>fs.defaultFS</name>
<!-- 192.168.45.132 => mainnode -->
<value>hdfs://mainnode:9000</value>
</property>
<!--指定HADOOP運行時產生文件的存儲目錄-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-3.2.1/tmp</value>
</property>
</configuration>
可以看到也是可以正常訪問的。
8、常見問題,以及處理辦法
8.1 start-all.sh 報錯:
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
解決方案:https://blog.csdn.net/weixin_49736959/article/details/108897129
8.2 start 之后什么都沒啟動,並提示:
mydomain: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
解決方案:沒有配置好ssh,做一遍第5條
8.3 出現jps缺少打開項的錯誤
例如缺少NameNode, 缺少ResourceManager, 缺少NodeManager…
解決方法:https://blog.csdn.net/weixin_49736959/article/details/108897991
參考文件
https://www.cnblogs.com/zhengna/p/9316424.html
出現的問題歡迎在評論區提出,好的問題小編也會記錄進入博客正文。祝大家hadoop之旅順利!!