分布式集群的實現
環境:
192.168.36.129 ? node1:NN,SNN,RM
?192.168.36.130 ?node2:DN,NM
192.168.36.132 ? node3:DN,NM
192.168.36.133 ? node4:DN,NM
配置java環境,每個節點時間同步,基于主機名互相通信,定義/etc/hosts 文件
如果需要通過master節點啟動或停止集群,還需要在master節點上配置運行服務的用戶(如hdfs和yarn)能以密鑰認證的方式通過ssh遠程連接只各節點
1、配置java環境 – – – – – 每個節點
# vim /etc/profile.d/java.sh export JAVA_HOME=/usr # yum install java-1.8.0-openjdk-devel -y # java -version
2、基于主機名互相通信,定義/etc/hosts 文件 – – – – – 每個節點
192.168.36.129 ? node1 ? master
192.168.36.130 ?node2
192.168.36.132 ? node3
192.168.36.133 ? node4
3、創建用戶(最好id相同)、密鑰認證- – – – -每個節點
【 master 】
# groupadd hadoop
# useradd hadoop
# echo “queen” | passwd –stdin hadoop
【 其他節點 】
# useradd hadoop
# echo “queen” | passwd –stdin hadoop
【 master 】 # su - hadoop $ ssh-keygen -t rsa -P '' $ for i in 2 3 4; do ssh-copy-id -i .ssh/id_rsa.pub hadoop@node{$i}; done
說明:在Hadoop啟動以后,Namenode是通過SSH(Secure Shell)來啟動和停止各個datanode上的各種守護進程的,這就須要在節點之間執行指令的時候是不須要輸入密碼的形式,故我們須要配置SSH運用無密碼公鑰認證的形式。
以本文中的三臺機器為例,現在node1是主節點,他須要連接node2和node3。須要確定每臺機器上都安裝了ssh,并且datanode機器上sshd服務已經啟動。
( 說明:$ssh-keygen? -t? rsa
這個命令將為hadoop上的用戶hadoop生成其密鑰對,詢問其保存路徑時直接回車采用默認路徑,當提示要為生成的密鑰輸入passphrase的時候,直接回車,也就是將其設定為空密碼。生成的密鑰對id_rsa,id_rsa.pub,默認存儲在/home/hadoop/.ssh目錄下然后將id_rsa.pub的內容復制到每個機器(也包括本機)的/home/dbrg/.ssh/authorized_keys文件中,如果機器上已經有authorized_keys這個文件了,就在文件末尾加上id_rsa.pub中的內容,如果沒有authorized_keys這個文件,直接復制過去就行.)
4、安裝并配置hadoop
4.1 【 node1 】 # mkdir -pv /bdapps /data/hadoop/hdfs/{nn,snn,dn} # chown -R hadoop:hadoop /data/hadoop/hdfs/ # wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.7.4/hadoop-2.7.4.tar.gz
# tar xf hadoop-2.7.4.tar.gz -C /bdapps/ # cd /bdapps # ln -sv hadoop-2.7.4 hadoop # cd hadoop/
# vim /etc/profile.d/hadoop.sh???????????????? ???? export HADOOP_PREFIX=/bdapps/hadoop ???? export PATH=$PATH:${HADOOP_PREFIX}/bin:${HADOOP_PREFIX}/sbin ???? export HADOOP_YARN_HOME=${HADOOP_PREFIX} ???? export HADOOP_MAPPERD_HOME=${HADOOP_PREFIX} ???? export HADOOP_COMMON_HOME=${HADOOP_PREFIX} ???? export HADOOP_HDFS_HOME=${HADOOP_PREFIX} # ./etc/profile.d/hadoop.sh # scp /etc/profile.d/hadoop.sh node2:/etc/profile.d/ # scp /etc/profile.d/hadoop.sh node3:/etc/profile.d/ # scp /etc/profile.d/hadoop.sh node4:/etc/profile.d/
# mkdir logs # chmod g+w logs # chown -R hadoop:hadoop ./* # cd etc/hadoop
# vim core-site.xml??????? ?? <configuration> ??????? <property> ???????????? <name>fs.defaultFS</name>????????? ???????????? <value>hdfs://master:8020</value>???? ???????????? <final>true</final> ??? ????</property> ?? </configuration> # vim hdfs-site.xml???? ?<configuration> ? <property> ? <name>dfs.replication</name> ? <value>2<value> 建議3個 ? </propery> ? <property> ? <name>dfs.namenode.name.dir</name> ? <value>file:///data/hadoop/hdfs/nn</value> ? </propery> ? <property> ? <name>dfs.datanode.data.dir</name> ?<value>file:///data/hadoop/hdfs/dn</value> ?</propery> ?<property> ?<name>fs.checkpoint.dir</name> ?<value>file:///data/hadoop/hdfs/snn<value> ?</propery> ?<property> ?<name>fs.checkpoint.dir</name> ?<value>file:///data/hadoop/hdfs/snn<value> ?</propery> ?</configuration> 注意,如果需要其他用戶對hdfs有寫入權限,還需要添加 ?<property> ???? <name>dfs.premissions</name>?????? 不做嚴格權限限制 ???? <value>false<value> ?</propery> # cp mapred-site.xml.template mapred-site.xml # vim mapred-site.xml??? <configuration> ? <property> ??? <name>mapred.framwork.name</name> ??? <value>yarn</value> ? </property> </configuration> # vim yarn-site.xml <configuration> ? <property> ??? <name>yarn.resourcemanager.address</name> ??? <value>master:8032</value> ? </property> ? <property> ??? <name>yarn.resourcemanager.scheduleraddress</name> #調度器地址 ??? <value>master:8030</value> ? </property>? ? <property> ??? <name>yarn.resourcemanager.resource-tracker.address</name> #資源追蹤器地址 ??? <value>master:8031</value> ? </property> ? <property> ??? <name>yarn.resourcemanager.admin.address</name> #管理地址 ??? <value>master:8033</value> ? </property> ? <property> ??? <name>yarn.resourcemanager.webapp.address</name> ??? <value>master:8088</value> ? </property> ? ??<property> ??? <name>yarn.nodemanager.aux-service</name> #輔助服務 ??? <value>mapreduce_shuffle</value> ? </property> ? <property> ??? <name>yarn.nodemanager.auxservice.mapreduce_shuffle.class</name> #shuffle類 ??? <value>org.apache.hadoop.mapred.ShuffleHandler</value> ? </property> ? ??<property> ??? <name>yarn.resourcemanager.scheduler.class</name> ??? <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value> ? </property> ? </configuration>
# vim slave node2 node3 node4 4.2 【 其他節點 】 # mkdir -pv /bdapps /data/hadoop/hdfs/{nn,snn,dn} # chown -R hadoop:hadoop /data/hadoop/hdfs/ # tar xf hadoop-2.7.4.tar.gz -C /bdapps/ # cd /bdapps # ln -sv hadoop-2.7.4 hadoop # cd hadoop/ # mkdir logs # chmod g+w logs # chown -R hadoop:hadoop ./* # cd etc/hadoop
【 ?node1 】
# su - hadoop # scp /bdapps/hadoop/etc/hadoop/* node2:/bdapps/hadoop/etc/hadoop/ # scp /bdapps/hadoop/etc/hadoop/* node3:/bdapps/hadoop/etc/hadoop/ # scp /bdapps/hadoop/etc/hadoop/* node2:/bdapps/hadoop/etc/hadoop/
4.3 ?格式化并啟動hadoop
【 node1 】 # su - hdfs $ hadoop namenode -format 其中的“Storage directory /hadoop/temp/dfs/name has been successfully formatted”一行信息表明 對應的存儲已經格式化成功。 在master節點上執行Hadoop的start-all.sh腳本即可實現啟動整個集群。
$ start-dfs.sh 驗證 node2:# su - hadoop $ jps node1:
$ hdfs dfs -mkdir /test ??? drwxr-xr-x - hdfs supergroup???????????? $ hdfs -dfs -put /etc/fstab /test/fstab $ hdfs dfs -lsR /?? 查看是否上傳成功 $ hdfs dfs -cat /test/fstab $ start-yarn.sh 驗證 node2: $ jps
4.4 測試
1)HDFS和YARN ResourceManager各自提供了一個Web接口,通過這些接口可檢查HDFS集群以及YARN集群的相關狀態信息
HDFS-NameNode ? ? http://node1:50070
YARN-ResourceManager ? ? http://node1:8088
5. HDFS常用操作
hadoopdfs -ls 列出HDFS下的文件
hadoop dfs -ls in 列出HDFS下某個文檔中的文件
hadoop dfs -put test1.txt test 上傳文件到指定目錄并且重新命名,只有所有的DataNode都接收完數據才算成功
hadoop dfs -get in getin 從HDFS獲取文件并且重新命名為getin,同put一樣可操作文件也可操作目錄
hadoop dfs -rmr out 刪除指定文件從HDFS上
hadoop dfs -cat in/* 查看HDFS上in目錄的內容
hadoop dfsadmin -report 查看HDFS的基本統計信息,結果如下
hadoop dfsadmin -safemode leave 退出安全模式
hadoop dfsadmin -safemode enter 進入安全模式
原創文章,作者:nene,如若轉載,請注明出處:http://www.www58058.com/89610