網絡配置java
hostname 查看珠璣名node
vim /etc/sysconfig/network 設置主機名linux
ifconfig 查看ip狀況shell
vim /etc/sysconfig/network-scripts/ifcfg-eth0 設置網絡vim
DEVICE="eth0" 接口名(設備、網卡)安全
BOOTPROTO=STATIC IP的配置方法(static:固定IP,dhcp:,none:手動)服務器
ONBOOT=yes 系統啓動的時候網絡端口是否有效網絡
IPADDR=192.168.1.2 IP網址ssh
GATEWAY=192.168.1.0 網關ide
DNS1=8.8.8.8 DNS服務器
service network restart 重啓網卡服務
service network start 開始網卡服務
service network stop 中止網卡服務
ifconfig eth0 up|down 啓用和關閉制定的網卡
ifconfig 查看配置的ip信息是否生效
vim /etc/hosts 設置珠璣和ip映射關係
192.168.1.2 master
192.168.1.3 slave1
192.168.1.4 slave2
ping master
service iptables stop 關閉防火牆
chkconfig iptables off 關閉自啓動防火牆服務
配置SSH
rpm -qa | grep openssh 查看是否安裝了ssh服務
rpm -qa | grep rsync 查看是否安裝了rsync服務
yum install ssh 安裝ssh協議
yum install rsync rsync是一個遠程數據同步工具
service sshd restart 啓動sshd服務
ssh-keygen -t rsa -p ' ' 生成無密碼密鑰對(存放路徑是/home/Haddop/.ssh)
cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys 將id_rsa.pub追加到受權的key中
chmod 600 ~/.ssh/authorized_keys 授予讀寫權限
vim /etc/ssh/sshd_config 修改sshd服務的配置文件
RSAAuthentication yes # 啓用 RSA 認證
PubkeyAuthentication yes # 啓用公鑰私鑰配對認證方式
AuthorizedKeysFile .ssh/authorized_keys # 公鑰文件路徑(和上面生成的文件同)
service sshd restart 重啓sshd服務,是修改生效
ssh master 嚴驗證ssh登陸(第一次會要求輸入密碼)
單點對多點的SSH無密碼登陸
ssh-keygen
ssh-copy-id storm@slave1 格式是"ssh-copy-id 用戶名@主機名"
ssh-copy-id storm@slave2 將本機名的公鑰複製到遠程機器的authorized_keys文件
安裝JDK
root用戶登陸
mkdir /usr/java 建立/usr/java目錄
cp /root/Downloads/jdk-6u31-linux-i584.bin /usr/java 複製
chmod +x jdk-6u31-linux-i584.bin 賦予執行的權限
./jdk-6u31-linux-i584.bin 執行解壓過的bin文件
rm -rf jdk-6u31-linux-i584.bin 刪除jdk安裝文件
vim /etc/profile
在尾部添加如下內容:
# set java environment
export JAVA_HOME=/usr/java/jdk1.6.0_31/
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
source /etc/profile 使profile的配置文件生效
java -version 驗證jdk是否安裝成功
安裝剩餘機器:
scp /usr/java/jdk1.6.0_31/ Hadoop@mster$i:/usr/java;
使用shell腳本安裝:
for i in $(seq 1 100);
do echo slave$i;
scp /usr/javajdk1.6.0_31/ Hadoop@slave$i:/usr/java;
done
profile環境變量的配置文件要能夠配置好後一次發送到全部集羣中
Hadoop集羣的安裝
以root用戶登陸
cp /root/Downloads/Hadoop-1.0.0.tar.gz /usr
cd /usr
tar -zxvf Hadoop-1.0.0.tar.gz 解壓tar.gz的安裝包
mv Hadoop-1.0.0.tar.gz hadoop 文件夾重命名
chown -R Hadoop:Hadoop Hadoop hadoop文件的屬主從新分配,-R是遞歸,hadoop文件夾分配給hadoop組下的hadoop用戶
rm -rf Hadoop-1.0.0.tar.gz 刪除安裝文件
配置Hadoop的環境變量
vim /etc/profile
export HADOOP_HOME=/usr/Hadoop
export PATH=$PATH:$HADOOP_HOME/bin
source /etc/profile 使配置生效
配置hadoop
配置hadoop-env.sh(文件位於/usr/Hadoop/bin/conf)
vim /usr/Hadoop/bin/conf/Hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.6.0_31
配置core-site.xml文件
mkdir /usr/Hadoop/tmp 建立文件夾tmp,用來保存hadoop臨時數據
vim /usr/Hadoop/bin/conf/core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop/tmp</value>
(備註:請先在 /usr/hadoop 目錄下創建 tmp 文件夾,默認採用系統的臨時目錄:/tmp/Hadoop-hadoop。而這個目錄每次重啓都會被幹掉,必須從新執行format才行,不然會出錯。)
<description>A base for other temporary directories.</description>
</property>
<!--file system properties ,配置NameNode的訪問地址-->
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.1.2:9000</value>
</property>
</configuration>
配置hdfs-site.xml ,默認備份方式是3
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
(備註:replication 是數據副本數量,默認爲3,salve少於3臺就會報錯)
</property>
<configuration>
配置mapred-site.xml
修改hadoop中mapreduce的配置文件,配置的jobTracker的地址和端口
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>http://192.168.1.2:9001</value>
</property>
</configuration>
配置mster
修改/usr/Hadoop/conf/masters文件,指定master機器的主機名
vim /usr/Hadoop/conf/masters
192.168.1.2(或者是master)
配置slave
vim /usr/Hadoop/conf/slaves
slave1
slave2
注意:單機啓動的時候,conf/slaves中必定不能爲空。沒有其餘機器,就指定本身。
集羣環境下,slave機器上能夠不配置slaves
在集羣中的其餘機器上重複此配置
建議普通用戶在hadoop下經過scp複製到其餘機器對應的目錄下,其中第6步是master機器特有的
使用shell腳本:
for i in $(seq1 100);
do echo slave$i;
scp /usr/hadoop Hadoop@slave$i:/usr;
scp /etc/profile Hadoop@slave$i:/etc;
done
複製文件後可能會發現hadoop目錄是root權限
chown -R hadoop:Hadoop Hadoop 受權給hadoop用戶
Hadoop啓動相關命令:
Hadoop namenode -format 在master機器上格式化namenode
只須要執行一次,若是要從新執行,必定要先刪除配置文件core-site.xml中配置
的hadoop.tmp.dir對應路徑下的文件
service iptables stop 關閉集羣中全部機器防火牆
for i in (seq 1 100);
Do ssh node $i "hostname;
service iptables stop;
chkconfig iptables off;
service iptables status";
done
start-all.sh 啓動hadoop的全部服務,包含(hdfs和mapreduce的相關服務)
能夠經過如下啓動日誌看出,首先啓動namenode,接着啓動datanode1,datanode2,......,而後啓動secondarynamenode。再啓動jobtracker,而後啓動tasktracker1,tasktracker2,.........。
啓動hadoop成功後,在master中的tmp文件夾中生成dfs文件夾,在slave中的tmp文件夾中均生成了dfs文件加和mapred文件夾
jps 查看進程
在master上的結果是
jobTracker
NameNode
jps
SecondaryNameNode
在slave上的結果是
TaskTracker
DataNode
jps
Hadoop dfsadmin -report 查看hadoop集羣的狀態
Hadoop dfsadmin -safemode leave 關閉hdfs的安全模式
http:192.168.1.2:50030 訪問mapreduce對應網頁
http:192.168.1.2:50070 訪問hdfs的對應網頁
服務器一直啓動不了的終極解決辦法:
刪除集羣中全部機器上的/usr/Hadoop/tmp文件
刪除集羣中全部機器上的pid文件。默認保存在/tmp目錄下。受權給hadoop用戶
從新執行stop-all.sh,把能關的服務先關掉
執行ps -ef|grep java|grep hadoop命令,查詢是否還有hadoop相關進程在運行,若有則kill -9 進程號 命令殺掉
從新格式話珠璣master
執行start-all.sh啓動hadoop
發現沒有報錯,執行Hadoop dfsadmin -report 命令查看hadoop運行狀態,發現只啓動了一個節點。可能仍是存在安全模式
執行hadoop dfsadmin -safemode leave 關閉主機上的安全模式
再一次執行hadoop dfsadmin -report
解決「no datanode to stop 」問題
緣由:
每次namenode format 會從新建立一個namenodeId,而/tmp/dfs/data下包含了上次 format下的id,namenode format 清空了namenode下的數據,可是沒有清空datanode下的數據,到時啓動是失敗,全部每次format前,清空tmp下的全部目錄
第一種方法:
刪除master上的tmp文件夾 rm -fr /usr/Hadoop/tmp