1. 安裝環境 本文使用三台CentOS6.4虛擬機模擬完全分散式環境。前五個過程和hadoop1.x安裝相同 1.1. 安裝環境 1.2. 集群環境 集群包含三個節點:1個namenode、2個datanode 在我們的測試機上,我們使用三台虛擬機來模擬linux。我們下文中稱之為tiny01、t ...
1. 安裝環境
本文使用三台CentOS6.4虛擬機模擬完全分散式環境。
前五個過程和hadoop1.x安裝相同
1.1. 安裝環境
項目 | 參數 |
---|---|
主操作系統 | Windows 10 64 bit,8GB記憶體 |
虛擬軟體 | VMware® Workstation 12 Pro 12.5.2 |
虛擬機操作系統 | CentOS6.5 64位 512MB記憶體 |
虛擬機數量 | 3 |
jdk版本 | java version "1.8.0_131" |
安裝的hadoop版本 | hadoop-2.7.4 |
1.2. 集群環境
集群包含三個節點:1個namenode、2個datanode
主機名稱 | 主機IP | 節點類型 | hadoop賬號 |
---|---|---|---|
tiny01 | 192.168.132.101 | namenode | grid |
tiny02 | 192.168.132.102 | datanode | grid |
tiny03 | 192.168.132.103 | datanode | grid |
在我們的測試機上,我們使用三台虛擬機來模擬linux。我們下文中稱之為tiny01、tiny02、tiny03
2. 配置hosts文件
我們希望三個主機之間都能夠使用主機名稱的方式相互訪問而不是IP,我們需要在hosts中配置其他主機的host。因此我們在三個主機的/etc/hosts下均進行如下配置:
1. 打開hosts文件
[root@tiny01 ~]# vi /etc/hosts
2. 配置主機host
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.132.101 tiny01
192.168.132.102 tiny02
192.168.132.103 tiny03
3. 將配置發送到其他主機(同時在其他主機上配置)
[root@tiny01 ~]# scp /etc/hosts root@tiny02:/etc/hosts
[root@tiny01 ~]# scp /etc/hosts root@tiny03:/etc/hosts
4. 測試
[root@tiny01 ~]$ ping tiny01
[root@tiny01 ~]$ ping tiny02
[root@tiny01 ~]$ ping tiny03
3.建立hadoop運行賬號
我們在所有的主機下均建立一個grid賬號用來運行hadoop ,並將其添加至sudoers中
創建grid賬號的命令如下
[root@tiny01 ~]# useradd grid
[root@tiny01 ~]# # 通過手動輸入修改密碼
[root@tiny01 ~]# passwd --stdin grid
更改用戶 grid 的密碼 。
123456
passwd: 所有的身份驗證令牌已經成功更新。
添加grid組到sudo中,在其中添加下麵一行:
[root@tiny01 ~]# visudo
%grid ALL=(ALL) NOPASSWD:ALL
改行意思為,組:grid內的用戶允許免密碼使用sudo命令
測試:
[root@tiny01 ~]# su admin
[admin@tiny01 root]$ su grid
密碼:
[grid@tiny01 root]$
4. 設置SSH免密碼登陸
關於ssh免密碼的設置,要求每兩台主機之間設置免密碼,自己的主機與自己的主機之間也要求設置免密碼。 這項操作我們需要在hadoop用戶下執行。
[root@tiny01 ~]# su grid
[grid@tiny01 ~]# ssh-keygen -t rsa
[grid@tiny01 ~]# ssh-copy-id tiny01
[grid@tiny01 ~]# ssh-copy-id tiny02
[grid@tiny01 ~]# ssh-copy-id tiny03
我們在每一臺主機上執行如上命令。我們的設置結果如下,在每一臺主機grid用戶中的~/.ssh/authorized_keys
文件中,其內容均為:
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAs5s4u1SHzkeqHHMozFWyqFj/qKwn57Gm8tpvOxSRY+5xqdEonJGvQ71AF+EOvttz/qBgEGB3UX2jp7YVIcKcc9WDoJXrb2NuBKbnP0zywDCsVQj/4KC7rQzG7YF2x8xueuDrW8nSxmNF1cYfENtYKpIITtL3cwAaVBBgwZJFTj9QN8/cMorG5aclMCETeklpUhGkSZ5Ccjc0FfGNKhnQntPqPVMBbDaSrJ31T7eONlIRymBJufAengHWYFGkEm/mnktxeDxDpVgLSEhbvwRUOeQUZzGfRcpdWwGFyQNoPTfCYKPpaQsJT7tCB97VY6aAZiaNqoN0kLEvKVAYLyhaJQ== grid@tiny01
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAs0uMn5wpUJNqxi++3i2WQu9KSv7Mj2Za4yu/8pXGFDxIEJCNEgREnfSAdrmpftRjp083RV3842zp2fqpbcE335fma7VbIcSqq20cQhWFyB1dZFP+H+f4+RbC5g31Hk5YG+DDY5dEm2B3RLDpLt0FukJcc0smN56ZwQ3JUXxe9ip8slTvtMr2ptvSg86cy+Eu7Gwt+7XHCNYIrxCzv7YQ0WilzvEpHP09wRp/K15HFHh+mTimxN2z4QERNMg77hNYEdEVrOVIhMztgakuhhSkpbyskkQuTeiyvKTLd/QL4iSFjt7dB1nieVFWCRP2yY2AsjD8nbHarBrgYojS/kslCw== grid@tiny02
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAy4h+XIl/IR8/QxtCxW8xl8QOqqZQWlL+rsI2zlhgTb+6dN4B6CE+u3/SrU8c8tLJSAXuRTg+MohIABrKRpFuu8VCLHw27JZ21c9KXpncAe+wkv3vagbH1lfxyYnBGn5XY6MEhNTx7nyBL7O55GNA92kD+JIEGvVF+NUq8yBJDBqeVFoFPU6FARI3OJi1Hlh47+gjIAIp2SP8QEhvjm+katL4+KtGgyHMkw8OYYzW6t6wjzmqgIRdzkIZI0Q0ChC8wAl8wkhwYXnbdw6m4pgSnVJ0zBhQZ5ovCHF3FR0OsrXpoe/2tpjT4LG04khTpqt2T4PC36No3dhcd/9wAw4+4Q== grid@tiny03
5. 安裝jdk
此過程在root下進行
[grid@tiny01 ~]$
[grid@tiny01 ~]$ su root
密碼:
5.1 下載並解壓jdk
我們需要先下載並解壓jdk,註意jdk的下載地址是經常變動的,因此請不要直接用下麵的地址下載,下載時請先查看一下地址。
1. 創建java的安裝路徑
[root@tiny01 grid]# mkdir /usr/java
[root@tiny01 grid]# cd /usr/java
2. 下載jdk
點擊Java SE Development Kit 8 Downloads,點擊同意後下載jdk-8u141-linux-x64.tar.gz
(不同的版本也可以用相同的方式),複製下來下載鏈接
然後使用wget 下載鏈接
的方式下載jdk
例如:
[root@tiny01 java]# wget http://download.oracle.com/otn-pub/java/jdk/8u131-b13/e9e7ea248e2c4826b92b3f075a80e441/jdk-8u131-linux-x64.tar.gz?AuthParam=1488850152_387f1ee536313aeb1ffd212acd203c87
3. 解壓jdk解壓後刪除安裝包
[root@tiny01 java]# tar -xzvf jdk-8u131-linux-x64.tar.gz\?AuthParam\=1497245763_bb5c713b336123c5d38ef99896a12489
[root@tiny01 java]# rm -f jdk-8u131-linux-x64.tar.gz\?AuthParam\=1497245763_bb5c713b336123c5d38ef99896a12489
4. 查看jdk的地址
[root@tiny01 java]# cd jdk1.8.0_131/
[root@tiny01 jdk1.8.0_131]# pwd
/usr/java/jdk1.8.0_131
5.配置環境變數
在/etc/profile
文件中配置JAVA_HOME和PATH
[root@tiny01 jdk1.8.0_131]# vi /etc/profile
添加
export JAVA_HOME=/usr/java/jdk1.8.0_131
export PATH=$PATH:/usr/java/jdk1.8.0_131/bin
6.測試
運行java -version
檢測配置是否成功
[root@tiny01 jdk1.8.0_131]# java -version
java version "1.8.0"
gij (GNU libgcj) version 4.4.7 20120313 (Red Hat 4.4.7-18)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
安裝成功
5.2 向其他節點複製jdk
[root@tiny01 ~]# ssh root@tiny02 "mkdir /usr/java"
[root@tiny01 ~]# ssh root@tiny03 "mkdir /usr/java"
[root@tiny01 ~]# scp -r /usr/java/jdk1.8.0_131 root@tiny02:/usr/java/jdk1.8.0_131
[root@tiny01 ~]# scp -r /usr/java/jdk1.8.0_131 root@tiny03:/usr/java/jdk1.8.0_131
5.3 在各個主機下配置jdk的環境變數
編輯/etc/profile文件
[root@tiny01 ~]# vi /etc/profile
在該文件下添加如下內容
## JAVA_HOME 設置
export JAVA_HOME=/usr/java/jdk1.8.0_131
export PATH=$PATH:/usr/java/jdk1.8.0_131/bin
在每個主機下均進行設置,由於我的電腦上linux都是新安裝的,環境變數相同,因此直接複製到了其他主機上。如果不同的主機的環境變數不同,請手動設置
[root@tiny01 hadoop]# scp /etc/profile root@tiny02:/etc/profile
[root@tiny01 hadoop]# scp /etc/profile root@tiny03:/etc/profile
在每個主機上都重新編譯一下/etc/profile
[root@tiny01 hadoop]# source /etc/profile
5.4 測試
[root@tiny01 hadoop]# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b13, mixed mode)
成功
(如果版本不對應,那麼說明linux本身已經有了預設的jdk,則需要修改linux預設jdk版本:修改linux預設jdk版本,由於我這裡安裝的是最小化安裝,所以沒有預設的jdk)
6. 下載並解壓hadoop
在linux控制臺下載hadoop並將其解壓
1.切換回grid用戶
[root@tiny01 jdk1.8.0_131]# su grid
2.創建hadoop目錄併進入到該目錄中
[grid@tiny01 ~]$ sudo mkdir /opt/hadoop
[grid@tiny01 ~]$ sudo chown grid:grid /opt/hadoop
[grid@tiny01 ~]$ cd /opt/hadoop
[grid@tiny01 hadoop]$
3.下載並解壓hadoop
[grid@tiny01 hadoop]$ wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.4/hadoop-2.7.4.tar.gz
[grid@tiny01 hadoop]$ tar -xzvf hadoop-2.7.4.tar.gz
7. 修改配置文件
hadoop2.x的配置文件和hadoop1.x的配置文件並不相同,因此我們有不同的設置方法。
以上個別文件預設不存在的,可以複製相應的template文件獲得。
我們不需要修改master了
註意:在hadoop2.x中配置文件是放在etc下的
7.1. 修改hadooop-env.sh
我們打開該文件:
vi hadoop-2.7.4/etc/hadoop/hadoop-env.sh
修改一下JAVA_HOME
# The java implementation to use. Required.
export JAVA_HOME=/usr/java/jdk1.8.0_131
7.2 修改yarn-env.sh
打開該文件
vi hadoop-2.7.4/etc/hadoop/yarn-env.sh
修改JAVA_HOME的路徑
# some Java parameters
export JAVA_HOME=/usr/java/jdk1.8.0_131
if [ "$JAVA_HOME" != "" ]; then
#echo "run java in $JAVA_HOME"
JAVA_HOME=$JAVA_HOME
fi
if [ "$JAVA_HOME" = "" ]; then
echo "Error: JAVA_HOME is not set."
exit 1
fi
7.3 修改slaves文件
打開該文件
vi hadoop-2.7.4/etc/hadoop/slaves
修改為以下內容
tiny02
tiny03
7.4 修改core-site.xml文件
打開該文件
vi hadoop-2.7.4/etc/hadoop/core-site.xml
修改為以下內容(註意主機名和文件路徑)
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://tiny01:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/hadoop/hadoop-2.7.4/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>hadoop.proxyuser.hduser.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hduser.groups</name>
<value>*</value>
</property>
</configuration>
7.5 修改hdfs-site.xml文件
打開該文件
vi hadoop-2.7.4/etc/hadoop/hdfs-site.xml
修改為以下內容(註意主機名和文件路徑)
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>tiny01:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop/hadoop-2.7.4/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop/hadoop-2.7.4/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
7.6 複製並修改mapred-site.xml文件
複製並打開該文件
cp hadoop-2.7.4/etc/hadoop/mapred-site.xml.template hadoop-2.7.4/etc/hadoop/mapred-site.xml
vi hadoop-2.7.4/etc/hadoop/mapred-site.xml
修改為以下內容(註意主機名)
<configuration>
<property>
<name>mapreduce.framework.name</name>
<