1. 程式人生 > >Hadoop常用命令

Hadoop常用命令

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

  1. root用戶登錄

  2. mkdir /usr/java 創建/usr/java目錄

  3. cp /root/Downloads/jdk-6u31-linux-i584.bin /usr/java 復制

  4. chmod +x jdk-6u31-linux-i584.bin 賦予執行的權限

  5. ./jdk-6u31-linux-i584.bin 執行解壓過的bin文件

  6. rm -rf jdk-6u31-linux-i584.bin 刪除jdk安裝文件

  7. 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集群的安裝

  1. 以root用戶登錄

  2. cp /root/Downloads/Hadoop-1.0.0.tar.gz /usr

  3. cd /usr

  4. tar -zxvf Hadoop-1.0.0.tar.gz 解壓tar.gz的安裝包

  5. mv Hadoop-1.0.0.tar.gz hadoop 文件夾重命名

  6. chown -R Hadoop:Hadoop Hadoop hadoop文件的屬主重新分配,-R是遞歸,hadoop文件夾分配給hadoop組下的hadoop用戶

  7. rm -rf Hadoop-1.0.0.tar.gz 刪除安裝文件

配置Hadoop的環境變量

  1. vim /etc/profile

    1. export HADOOP_HOME=/usr/Hadoop

    2. export PATH=$PATH:$HADOOP_HOME/bin

  2. source /etc/profile 使配置生效

配置hadoop

  1. 配置hadoop-env.sh(文件位於/usr/Hadoop/bin/conf)

    1. vim /usr/Hadoop/bin/conf/Hadoop-env.sh

    2. export JAVA_HOME=/usr/java/jdk1.6.0_31

  2. 配置core-site.xml文件

    1. mkdir /usr/Hadoop/tmp 創建文件夾tmp,用來保存hadoop臨時數據

    2. 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>

  1. 配置hdfs-site.xml ,默認備份方式是3

<configuration>

<property>

<name>dfs.replication</name>

<value>1</value>

(備註:replication 是數據副本數量,默認為3,salve少於3臺就會報錯)

</property>

<configuration>

  1. 配置mapred-site.xml

修改hadoop中mapreduce的配置文件,配置的jobTracker的地址和端口

<configuration>

<property>

<name>mapred.job.tracker</name>

<value>http://192.168.1.2:9001</value>

</property>

</configuration>

  1. 配置mster

修改/usr/Hadoop/conf/masters文件,指定master機器的主機名

vim /usr/Hadoop/conf/masters

192.168.1.2(或者是master)

  1. 配置slave

vim /usr/Hadoop/conf/slaves

slave1

slave2

註意:單機啟動的時候,conf/slaves中一定不能為空。沒有其他機器,就指定自己。

集群環境下,slave機器上可以不配置slaves

  1. 在集群中的其他機器上重復此配置

建議普通用戶在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的對應網頁

服務器一直啟動不了的終極解決辦法:

  1. 刪除集群中所有機器上的/usr/Hadoop/tmp文件

  2. 刪除集群中所有機器上的pid文件。默認保存在/tmp目錄下。授權給hadoop用戶

  3. 重新執行stop-all.sh,把能關的服務先關掉

  4. 執行ps -ef|grep java|grep hadoop命令,查詢是否還有hadoop相關進程在運行,如有則kill -9 進程號 命令殺掉

  5. 重新格式話珠璣master

  6. 執行start-all.sh啟動hadoop

  7. 發現沒有報錯,執行Hadoop dfsadmin -report 命令查看hadoop運行狀態,發現只啟動了一個節點。可能還是存在安全模式

  8. 執行hadoop dfsadmin -safemode leave 關閉主機上的安全模式

  9. 再一次執行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常用命令