Centos7環境下,配置Hadoop-3.2.1僞分布式以及問題處理
主要分為一下幾個步驟:
- 安裝jdk(原因下面請看);
- 修改host配置;
- 關閉防火牆;
- 安裝hadoop;
- 配置 Hadoop 僞分布式;
- 啟動hdfs;
準備工作
關閉防火牆
#停止防火牆
systemctl stop firewalld
#關閉防火牆開機自動啟動
systemctl disable firewalld
修改hosts檔案,配置使用者指定本機IP位址
例如;192.168.1.1 hadoop
Hadoop的使用者設定
1、 建立hadoop的普通使用者
useradd hadoop
passwd hadoop
2、 給hadoop使用者sudo權限
vi /etc/sudoers
設定權限(非生産環境可以随意點)
root ALL=(ALL) ALL
hadoop ALL=(root) NOPASSWD:ALL
3、 切換到hadoop使用者
su - hadoop
4、 建立存放hadoop檔案的目錄
sudo mkdir /opt/modules
5、 将hadoop檔案夾的所有者指定為hadoop使用者
如果存放hadoop的目錄的所有者不是hadoop,之後hadoop運作中可能會有權限問題。
sudo chown -R hadoop:hadoop /opt/modules
配置ssh免密登入
自行百度即可
安裝JDK
通過yum search jdk
![在這裡插入圖檔描述](https://img-blog.csdnimg.cn/20201202150843364.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZscXhpbmc=,size_16,color_FFFFFF,t_70)
必須安裝這兩個,因為缺少一個在後面使用指令時無法使用
# 配置環境變量
vim /etc/profile
# JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.9.11-0.el7_9.x86_64
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
# 重新整理環境變量
source /etc/profile
# 驗證
java -version
```java
openjdk version "11.0.9" 2020-10-20 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.9+11-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.9+11-LTS, mixed mode, sharing)
安裝Hadoop
#下載下傳hadoop-3.2.1.tar.gz
# 解壓
tar -zxvf /usr/local/hadoop-3.2.1.tar.gz
# 配置環境變量
vim /etc/profile
# HADOOP_HOME
export HADOOP_HOME=/opt/hadoop-3.2.1
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
# 重新整理環境變量
source /etc/profile
# 驗證
hadoop version
```java
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 /usr/local/hadoop-3.2.1/share/hadoop/common/hadoop-common-3.2.1.jar
配置Hadoop僞分布式
配置HDFS
hadoop-env.sh
vim /usr/local/hadoop-3.2.1/etc/hadoop/hadoop-env.sh
配置jdk
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.9.11-0.el7_9.x86_64
core-site.xml
<!-- Put site-specific property overrides in this file. -->
<configuration>
<!--指定HDFS中NameNode的位址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000</value>
</property>
<!--指定Hadoop運作時産生檔案的 存儲目錄-->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoopTmp</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<!-- 指定HDFS副本的數量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!-- 預設為true,namenode 連接配接 datanode 時會進行 host 解析查詢 -->
<property>
<name>dfs.namenode.datanode.registration.ip-hostname-check</name>
<value>true</value>
</property>
</configuration>
啟動hdfs
# 第一次使用需要先格式化一次。之前若格式化過請先停止程序,然後删除檔案再執行格式化操作
hdfs namenode -format
# 啟動 namenode
hadoop-daemon.sh start namenode
# 啟動 datanode
hadoop-daemon.sh start datanode
# 驗證,檢視 jvm 程序
jps
# 84609 Jps
# 84242 NameNode
# 84471 DataNode
通過http://localhost:9870通路,注意:Hadoop3.X之後端口号預設為9870之前的為50070
配置YARN
yarn-env.sh
最後兩行為因為jdk11的問題,必須添加否則運作失敗
yarn-site.xml
此為固定格式
添加一個額外的jar包
如果不添加的話,在運作yarn會報錯
Caused by: java.lang.NoClassDefFoundError: javax/activation/DataSource
Caused by: java.lang.ClassNotFoundException: javax.activation.DataSource
cd /usr/local/hadoop-3.2.1/share/hadoop/yarn/lib
wget https://repo1.maven.org/maven2/javax/activation/activation/1.1.1/activation-1.1.1.jar
運作yarn
# 啟動 resourcemanager
yarn-daemon.sh start resourcemanager
# 啟動 nodemanager
yarn-daemon.sh start nodemanager
# 檢視 JVM 程序
jps
# 1604 DataNode
# 1877 ResourceManager
# 3223 Jps
# 1468 NameNode
# 2172 NodeManager
配置 MapReduce
mapred-env.sh
vim /usr/local/hadoop-3.2.1/etc/hadoop/mapred-env.sh
mapred-site.xml
vim /usr/local/hadoop-3.2.1/etc/hadoop/mapred-site.xml
運作一個 MapReduce 任務