hadoop下載地址與配置hadoop3.0叢集
hadoop版本下載訪問地址:http://mirrors.hust.edu.cn/apache/hadoop/common
搭建hadoop叢集訪問地址:https://blog.csdn.net/qq_32808045/article/details/76229157
1.準備(搭建叢集所用到的軟體及系統前期配置):
- 虛擬機器 : VMware
- linux:CentOS 6.5 .vmx
- sun公司的 jdk : jdk1.8.0_131
- ssh : 安裝ssh,並設定免密
- hadoop : hadoop-3.0.0-alpha4
把CentOS進行克隆,克隆出兩個,這樣我們就有三臺Linux了。
分別命名為:
master
node1
node2
在root使用者下執行,對主機名進行修改 :
hostname // 檢視當前系統主機名
vi /etc/sysconfig/network // 進入檔案
- 1
- 2
HSOTNAME的屬性賦值為想要修改的主機名 master
reboot // 重啟 即可完成更改
- 1
其他兩臺主機分別命名為 node1,node2。
對三臺主機進行地址對映 :
ifconfig // 獲取主機ip地址,為了完成對映
vi /etc/hosts // 開啟
- 1
- 2
新增地址對映 :
這樣我們就不用每次都敲ip了,直接主機名稱就可以了。(當然另外兩臺都需要進行相同的配置)
2. ssh免密的配置
rpm –qa | grep ssh // 驗證ssh是否安裝
yum install ssh -y // 若無資訊列出即未安裝,則進行安裝
- 1
- 2
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa // 在~/.ssh/下生成公鑰/私鑰對 -P '' 密碼為空
- 1
(randomart image看著也是挺有趣的。。。)
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys // 把公鑰新增到authorzied_keys檔案裡
chmod 0600 ~/.ssh/authorized_keys // 修改authorized_keys的許可權
ssh localhost // 驗證ssh是否可以訪問
- 1
- 2
- 3
驗證ssh訪問是否正常:
把另外兩臺機器也配好了之後,就可以做三臺機器之間的聯通了 :
scp id_rsa.pub node1:~/.ssh/master_rsa.pub // 把master公鑰發給node1
- 1
再轉到node1上執行 :
cat ~/.ssh/master_rsa.pub >> ~/.ssh/authorized_keys //把收到的公鑰新增到檔案中去
- 1
node2 進行相同的步驟。(master的know_host檔案中已經存在如節點node1的資訊,以後連線都是免密的)。
就是三臺虛擬機器都相互把各自的公鑰都發一遍,這樣在每一臺機器的~/.ssh/know_host檔案裡面都有其他節點的ssh資訊。並把收到的公鑰新增到authorized_keys檔案下,這樣下一次就可以免密登入了。
第一次訪問時會出現詢問
確定就好,之後都是秒連的。
遇到的問題:
1. ssh: connect to host node1 port 22: Connection timed out
檢查/etc/hosts檔案中的對映 地址->主機名 是否有錯
2. Host key verification failed.
當詢問 “…..(yes/no)?”時直接敲了個回車。 應敲yes
jdk的安裝
- 下載
可以直接訪問官網下載符合自己機器的jdk。
注意:需選中 Accept License Agreement - 解壓
tar zxvf jdk-8u131-linux-x64.tar.gz // 解壓jdk壓縮包 - 配置環境變數
vi /etc/profile // 配置環境變數
- 1
在空白處新增解壓後jdk所在的路徑 :
export JAVA_HOME=/opt/softwares/jdk1.8.0_131
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=.:$JAVA_HOME/bin:$PATH
- 1
- 2
- 3
source /etc/profile // 使環境變數生效
- 1
驗證jdk是否安裝完成 :
java -version // 會出現jdk版本資訊
- 1
可利用scp命令傳送jdk到其餘虛擬機器中然後更改/etc/profile
或是重複相同操作
hadoop的安裝和配置
1.下載
訪問hadoop官網下載。
2.解壓
tar zxvf hadoop-3.0.0-alpha4.tar.gz
- 1
3.為了方便可以配置一下環境變數
vi /etc/profile
- 1
export HADOOP_HOME=/usr/local/hadoop
export PATH=.:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$JAVA_HOME/bin:$PATH
- 1
- 2
source /etc/profile // 使環境變數生效
- 1
驗證安裝 :
hadoop version
- 1
4.配置檔案
在hadoop檔案加下:
cd etc/hadoop/ // 此目錄下含有hadoop的配置件
- 1
需要配置的檔案有 :
hadoop-env.sh
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
workers
(單節點及偽分散式可檢視官網)
vi hadoop-env.sh
- 1
# The java implementation to use.
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/opt/softwares/jdk1.8.0_131
- 1
- 2
- 3
因為hadoop是在JVM上執行的所以要在其配置檔案中指定jdk的path
vi core-site.xml
- 1
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
</configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
第一個fs.defaultFS是指定hdfs的URI
第二個hadoop.tmp.dir是hadoop檔案系統依賴的基礎配置,很多路徑都依賴它。如果hdfs-site.xml中不配 置namenode和datanode的存放位置,預設就放在這個路徑中
vi hdfs-site.xml
- 1
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop/hdfs/data</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node1:9001</value>
</property>
<property>
<name>dfs.http.address</name>
<value>0.0.0.0:50070</value>
</property>
</configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
dfs.replication 副本個數,預設是3
dfs.namenode.secondary.http-address 為了保證整個叢集的可靠性secondarnamenode配置在其他機器比較好
dfs.http.address 進入hadoop web UI的埠
vi mapred-site.xml
- 1
<configuration>
<property>
<name>mapred.job.tracker.http.address</name>
<value>0.0.0.0:50030</value>
</property>
<property>
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>mapred.job.tracker.http.address</name>
<value>0.0.0.0:50030</value>
</property>
<property>
<name>mapred.task.tracker.http.address</name>
<value>0.0.0.0:50060</value>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>
/usr/local/hadoop/etc/hadoop,
/usr/local/hadoop/share/hadoop/common/*,
/local/hadoop/share/hadoop/common/lib/*,
/usr/local/hadoop/share/hadoop/hdfs/*,
/usr/local/hadoop/share/hadoop/hdfs/lib/*,
/usr/local/hadoop/share/hadoop/mapreduce/*,
/usr/local/hadoop/share/hadoop/mapreduce/lib/*,
/usr/local/hadoop/share/hadoop/yarn/*,
/usr/local/hadoop/share/hadoop/yarn/lib/*
</value>
</property>
</configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
mapreduce框架的引數
最後一個是hadoop jar包的路徑
vi yarn-site.xml
- 1
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property> <name>yarn.resourcemanager.webapp.address</name>
<value>master:8099</value>
</property>
</configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
NodeManager上執行的附屬服務。需配置成mapreduce_shuffle,才可執行MapReduce程式
yarn 的webUI埠是8099
vi workers // datanode節點設定
- 1
node1
node2
- 1
- 2
5.傳送到其餘虛擬機器中或是重複相同操作
啟動hadoop
hdfs namenode -format // 首次啟動格式化namenode
start-all.sh // 啟動hadoop叢集
jps // 檢視JVM執行的程式
- 1
- 2
- 3
遇到的問題 :
在hadoop/sbin/ vi start-dfs.sh
vi stop-dfs.sh
新增 HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
當報錯YARN_RESOURCEMANAGER_USER時 vi start-yarn.sh
vi stop-yarn.sh
新增 YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
50070埠配置檔案中設定了,卻還是不能訪問
vi /etc/selinux/config
修改
#This file controls the state of SELinux on the system.
#SELINUX= can take one of these three values:
#enforcing - SELinux security policy is enforced.
#permissive - SELinux prints warnings instead of enforcing.
#disabled - No SELinux policy is loaded.
SELINUX=enforcing
- 1
- 2
- 3
- 4
- 5
- 6
SELINUX的屬性改為disabled
namenode啟動了datanode沒有啟動(多次格式化namenode造成的)
在master的hadoop路徑下 :
vi hdfs/name/current/VERSION
- 1
拷貝clusterID
datanode的hadoop路徑下 :
vi hdfs/data/current/VERSION
- 1
替換掉datanode的clusterID
開啟不需要format了