Hadoop常用命令
hostname 查看珠璣名
vim /etc/sysconfig/network 設置主機名
ifconfig 查看ip情況
vim /etc/sysconfig/network-scripts/ifcfg-eth0 設置網絡
DEVICE="eth0" 接口名(設備、網卡)
BOOTPROTO=STATIC IP的配置方法(static:固定IP,dhcp:,none:手動)
ONBOOT=yes 系統啟動的時候網絡端口是否有效
IPADDR=192.168.1.2 IP網址
GATEWAY=192.168.1.0 網關
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
Hadoop常用命令