添加:
1 SSH無密碼登錄配置(方法2)
實現主機A免密登錄到主機B。
1.1 主機A生成密鑰對
# ssh-keygen -t rsa
1.2 複製公鑰的免密登錄目標主機B
# ssh-copy-id -i ~/.ssh/id_rsa.pub <主機B的hostname或ip>
1.3 免密登錄
# ssh <主機B的hostname或ip>
--------------------------------------------------------------------------------
1 系統環境
CentOS 6.5 32bit
hadoop-2.6.4.tar.gz
jdk-7-linux-i586.rpm
2 ip配置
2.1 修改配置文件
vi /etc/sysconfig/network-scripts/ifcfg-eth0
配置示例如下:
DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.91.255
IPADDR=192.168.91.10
IPV6INIT=no
IPV6_AUTOCONF=no
NETMASK=255.255.255.0
NETWORK=192.168.91.0
ONBOOT=yes
GATEWAY=192.168.1.1
DNS1=192.168.1.1
各配置說明:
DEVICE=eth0 #描述網卡對應的設備別名,例如ifcfg-eth0的文件中它爲eth0
BOOTPROTO=static #設置網卡獲得ip地址的方式,可能的選項爲static,dhcp或bootp,分別對應靜態指定的 ip地址,通過dhcp協議獲得的ip地址,通過bootp協議獲得的ip地址
BROADCAST=192.168.0.255#對應的子網廣播地址
HWADDR=00:07:E9:05:E8:B4#對應的網卡物理地址
IPADDR=12.168.1.2 #如果設置網卡獲得 ip地址的方式爲靜態指定,此字段就指定了網卡對應的ip地址
IPV6INIT=no
IPV6_AUTOCONF=no
NETMASK=255.255.255.0#網卡對應的網絡掩碼
NETWORK=192.168.1.0#網卡對應的網絡地址
ONBOOT=yes #系統啓動時是否設置此網絡接口,設置爲yes時,系統啓動時激活此設備
GATEWAY=192.168.1.1
DNS1=192.168.1.1
2.2 重啓網絡使配置生效
service network restart
3 Java環境配置
3.1 查看已有的jdk
rpm -qa | grep java
3.2 安裝jdk
rpm -ivh java-xxx-linux-i586-rpm
rpm包需到oracle官網下載,安裝後默認位於/usr/java/xxx。
3.3 設置環境變量
3.3.1 新建java的環境變量配置
vi /etc/profile.d/java.sh
內容如下:
export JAVA_HOME=/usr/java/xxx
exportCLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
3.3.2 給java.sh分配權限
chmod 755 /etc/profile.d/java.sh
3.3.3 使配置生效
. /etc/profile
測試代碼:
HelloWorld.java
public classHelloWorld {
public static void main(String[] args) {
System.out.println("helloworld in linux");
}
}
4 SSH無密碼登錄配置
本處示例兩臺服務器A和B之間的SSH登錄配置,通過以下配置後實現A通過SSH登錄B,B通過SSH登錄A配置過程與A登錄B一樣。
示例A、B配置信息爲:
Host HostName HostIp
A hosta ipa
B hostb ipb
4.1 修改主機名和IP
主機名可通過以下命令修改HOSTNAME來修改:
vi /etc/sysconfig/network
查看HOSTNAME:
hostname
4.2 配置hosts文件
實現ping主機名可ping通:
vi /etc/hosts
內容如下:
destHostIp destHostName
...(需要訪問幾臺服務器就添加幾條)
如:ipa hosta
ipb hostb
4.3 安裝openssh和rsync
查看是否已安裝:
rpm –qa | grep openssh
rpm –qa | grep rsync
安裝:
yum install openssh
yum install rsync
service sshd restart
4.4 主機A配置
配置當前主機A對目標登錄主機B做SSH免密登錄的核心在於兩點:
1、A和B都參考4.4.4進行SSH配置。
2、把A的公鑰發給B,B將A的公鑰添加到自己的authorized_keys 授權密鑰文件裏(位置:~/.ssh/authorized_keys)。
4.4.1 生成密鑰對
ssh-keygen
詢問其保存路徑時直接回車採用默認路徑。生成的密鑰對:id_rsa和id_rsa.pub,默認存儲在[ ~/.ssh ]目錄下,[.ssh]目錄權限爲700。爲便於區別,可將公鑰重命名,如:id_rsa_hostA.pub。
4.4.2 追加公鑰到自己授權的key裏面去
可將自己持有的公鑰,如自己的和其他主機的公鑰添加到授權文件裏,使得給出公鑰的一方能夠通過ssh登錄本主機,如:
cat ~/.ssh/id_rsa_hostA.pub >> ~/.ssh/authorized_keys
cat ~/.ssh/id_rsa_hostB.pub >> ~/.ssh/authorized_keys
4.4.3 修改文件authorized_keys權限
chmod 600 ~/.ssh/authorized_keys
4.4.4 設置SSH配置(需root權限)
vi /etc/ssh/sshd_config
內容如下:
RSAAuthentication yes # 啓用 RSA 認證
PubkeyAuthentication yes # 啓用公鑰私鑰配對認證方式
AuthorizedKeysFile .ssh/authorized_keys # 公鑰文件路徑(和上面生成的文件同)
重啓使生效:
service sshd restart
4.5 A將公鑰發給目標主機B
目標主機爲要通過SSH登錄到的主機。
scp ~/.ssh/id_rsa_hostA.pub 遠程用戶名@遠程服務器IP:~/.ssh
如:
scp ~/.ssh/[email protected]:~/.ssh
4.6 主機B配置
主機B使用上一步中公鑰複製到的用戶賬戶登錄,如hadoop賬戶,在賬戶HOME目錄下(如:/home/hadoop)下可看到複製過來的A的公鑰。
若在賬戶HOME目錄下無[.ssh]目錄則新建,並設置目錄權限爲700:
mkdir ~/.ssh
chmod 700 ~/.ssh
參考4.4.2-4.4.4,把A的公鑰添加到授權文件並配置SSH。
4.7 測試
在主機A命令行輸入:
ssh hadoop@ipb
或:
ssh hadoop@hostb
可實現登錄到主機B。
其中hadoop爲4.6中接收主機A的公鑰的賬戶。
5 Hadoop安裝配置(完全分佈式模式)
本例配置4臺服務器的集羣,服務器配置後的信息如下表5-1:
Server |
TYPE |
HostName |
IP |
1 |
NameNode |
nn |
192.168.1.100 |
2 |
DataNode |
dn01 |
192.168.1.101 |
3 |
DataNode |
dn02 |
192.168.1.102 |
4 |
SecondaryNameNode |
snn |
192.168.1.99 |
下列配置步驟需每臺服務器都進行配置。
5.1 安裝
5.1.1 下載
到官網http://hadoop.apache.org/releases.html/ 下載合適版本到自定路徑。
wget http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz
5.1.2 解壓
tar -xvf hadoop-2.7.2.tar.gz
5.1.3 移動至合適位置
mv hadoop-2.7.2 /usr/hadoop
安裝完成。
5.2 配置hadoop全局變量(可選)
vi /etc/profile.d/hadoop.sh
內容如下:
export HADOOP_HOME=/bigdata/hadoop-2.7.2
exportPATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
使配置生效:
. /etc/profile
5.3 指定配置文件位置
hadoop默認讀取位於hadoop根目錄下的etc/hadoop文件夾作爲配置文件的位置,可根據需要在etc下創建不同的配置目錄,通過連接(ln命令,符號鏈接)指定當前生效的配置文件目錄。注意修改默認的hadoop文件夾名稱(如改爲hadoop_default),避免與“hadoop”鏈接同名導致hadoop無法正確找到配置文件。
如當前使用集羣配置,配置所在的文件夾名稱爲hadoop_cluster,則創建連接如下:
ln -s hadoop_cluster hadoop
文件夾hadoop_cluster可直接複製自默認文件夾hadoop,如:
cp -R hadoop hadoop_cluster
5.4 配置hadoop-env.sh
配置etc/hadoop文件夾裏的hadoop-env.sh文件,設置JAVA_HOME值,若系統JAVA_HOME值已存在,則可跳過。如:
# The java implementation to use.
export JAVA_HOME=/usr/java/jdk1.8
5.5 配置hostname、ip和ssh
參考第2、4點,按照表5-1進行服務器hostname、ip和ssh的配置。
5.6 配置hadoop配置文件
配置文件位於etc/hadoop/下。
官方配置手冊:
http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/core-default.xml
http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
http://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml
http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-common/yarn-default.xml
5.6.1 core-site.xml
NameNode的配置信息。
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://nn:9000/</value><!-- 注意主機名不能包含下劃線等特殊字符 -->
</property>
</configuration>
5.6.2 hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value> <!-- 2個DataNode -->
</property>
</configuration>
5.6.3 mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
5.6.4 yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>nn</value> <!-- 指定服務器nn爲資源管理服務器 -->
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
5.6.5 slaves
寫入所有DataNode的hostname,一行一個:
dn01
dn02
5.7 配置Sencondary NameNode
經過5.6配置後,namenode和secondary namenode位於同一個主機,即namenode所在的主機上。若想將secondary namenode配置在另外一臺單獨的服務器上,則需在5.6的配置基礎上做些修改。
5.7.1 新增master配置文件
在etc/hadoop目錄下,
vi master
添加需要當作secondary namenode的ip或hostname,可填寫多臺,一行一個:
snn
5.7.2 修改core-site.xml
在配置文件中增加如下內容:
<property>
<name>fs.checkpoint.period</name>
<value>20</value>
<description>
The number of seconds between twoperiodic checkpoints.
</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://nn:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>如:/home/hadoop/tmp</value>
</property>
<property>
<name>fs.checkpoint.size</name>
<value>67108864</value>
</property>
5.7.3 修改hdfs-site.xml
在配置文件中增加如下內容:
<property>
<name>dfs.http.address</name>
<value>nn:50070</value>
<description>
The address and the base port where thedfs namenode web ui will listen on.
If the port is 0 then the server willstart on a free port.
</description>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>snn:50090</value>
</property>
5.8 啓動集羣
5.8.1 格式化NameNode
若集羣爲首次啓動,則需先格式化NameNode:
bin/hdfs namenode -format
5.8.2 啓動NameNode daemon和DataNode daemon
sbin/start-dfs.sh
啓動成功後,可以通過http://localhost:50070/訪問NameNode管理界面。
關閉:
sbin/stop-dfs.sh
5.8.3 啓動ResourceManager daemon和NodeManager daemon
sbin/start-yarn.sh
啓動成功後,可以通過http://localhost:8088/訪問ResourceManager管理界面。
關閉:
sbin/stop-yarn.sh
5.9 驗證
運行命令jps查看進程:
jps
每個服務器都有NodeManager。
5.9.1 服務器nn
xxxx NameNode
xxxx ResourceManager
5.9.2 服務器dn01
xxxx ResourceManager
xxxx DataNode
5.9.3 服務器dn02
xxxx ResourceManager
xxxx DataNode
5.9.4 服務器snn
6 常見問題
6.1 reverse mapping checking failed
0.0.0.0: reverse mapping checking getaddrinfofor localhost [127.0.0.1] failed - POSSIBLE BREAK-IN ATTEMPT!
解決:
假設從A登錄B,則修改A主機上的ssh_config:
vi /etc/ssh/ssh_config
啓用:GSSAPIAuthentication no
6.2 Does not contain a valid host:port authority
解決:
主機名稱不能包含下劃線和其他特殊字符。