cd ~/.ssh/ # 若沒有該目錄,請先執行一次ssh localhost ssh-keygen -t rsa # 會有提示,都按回車就能夠 cat id_rsa.pub >> authorized_keys # 加入受權 chmod 600 ./authorized_keys # 修改文件權限
排錯:java
若是ssh連接服務器是出現:node
Agent admitted failure to sign using the key
解決方式 使用 ssh-add 指令將私鑰 加進來 (根據我的的密匙命名不一樣更改 id_rsa)web
$ ssh-add ~/.ssh/id_rsa
再經過ssh 主機名 就能夠實現無密碼登陸了。vim
$sudo vim /etc/hostname
主節點僅留一行Master,從節點僅留一行Slaver$centos
$sudo vim /etc/hosts
形式是:ip(空格)節點名稱(Master\Slaver1\Slaver2...)。就像
127.0.0.1 localhost localhost4 localhost4.localdomain4
::1 localhost localhost6 localhost6.localdomain6bash
192.168.1.2 Master 192.168.1.3 Slaver1
注意:執行這一步前,要刪除節點中原有的id_rsa和id_rsa.pub,再從新生成密鑰對。服務器
$ rpm -qa | grep java #列出已經安裝的jdk $ rpm -e --nodeps java-1.7.0-openjdk-1.7.0.111-2.6.7.2.el7_2.x86_64 #刪除所有,noarch文件能夠不用刪除
若是尚未刪除,則用yum -y remove去刪除他們。app
vim ~/.bashrcdom
export JAVA_HOME=/home/hadoop/opt/jdk1.8.0_101 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export HADOOP_HOME=/home/hadoop/opt/hadoop export HADOOP_INSTALL=$HADOOP_HOME export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export YARN_HOME=$HADOOP_HOME export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export ZOOKEEPER_HOME=/home/hadoop/opt/zookeeper export HBASE_HOME=/home/hadoop/opt/hbase export ROCKETMQ_HOME=/home/hadoop/opt/RocketMQ/devenv export ROCKETMQ_CLASSPATH=$ROCKETMQ_HOME/lib export NAMESRV_ADDR='10.61.2.118:9876;10.61.2.119:9876' export MAVEN_HOME=/home/hadoop/opt/maven export SCALA_HOME=/home/hadoop/opt/scala export SPARK_HOME=/home/hadoop/opt/spark export PATH=$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$HBASE_HOME/bin:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf:$ROCKETMQ_HOME/bin:$MAVEN_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH
使變量設置生效ssh
$source ~/.bashrc
java -version $JAVA_HOME/bin/java -version # 與直接執行 java -version 同樣 Shell 命令
若是設置正確的話,$JAVA_HOME/bin/java -version 會輸出 java 的版本信息,且和 java -version 的輸出結果同樣。
修改/hadoop/etc/hadoop/中的配置文件。
注意,Master是隻做爲NameNode仍是即做爲NameNode又做爲DataNode,須要考量。
集羣/分佈式模式須要修改 /home/hadoop/opt/hadoop/etc/hadoop 中的5個配置文件,更多設置項可點擊查看官方說明,這裏僅設置了正常啓動所必須的設置項: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。
1, 文件 slaves,將做爲 DataNode 的主機名寫入該文件,每行一個,默認爲 localhost,因此在僞分佈式配置時,節點即做爲 NameNode 也做爲 DataNode。分佈式配置能夠保留 localhost,也能夠刪掉,讓 Master 節點僅做爲 NameNode 使用。
本教程讓 Master 節點僅做爲 NameNode 使用,所以將文件中原來的 localhost 刪除,只添加一行內容:Slave1。
2, 文件 core-site.xml 改成下面的配置:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://Master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/home/hadoop/opt/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> </configuration>
3, 文件 hdfs-site.xml,dfs.replication 通常設爲 3,但咱們只有一個 Slave 節點,因此 dfs.replication 的值仍是設爲 1:
<configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>Master:50090</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/hadoop/opt/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/hadoop/opt/hadoop/tmp/dfs/data</value> </property> </configuration>
4, 文件 mapred-site.xml (可能須要先重命名,默認文件名爲 mapred-site.xml.template),而後配置修改以下:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>Master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>Master:19888</value> </property> </configuration>
5, 文件 yarn-site.xml:
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>Master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
$hdfs namenode -format # 首次運行須要執行初始化,以後不須要
成功的話,會看到 "successfully formatted" 和 "Exitting with status 0" 的提示,若爲 "Exitting with status 1" 則是出錯。
$systemctl stop firewalld.service # 關閉firewall $systemctl disable firewalld.service # 禁止firewall開機啓動
$start-dfs.sh $start-yarn.sh $mr-jobhistory-daemon.sh start historyserver
經過命令 jps 能夠查看各個節點所啓動的進程。正確的話,在 Master 節點上能夠看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 進程。
缺乏任一進程都表示出錯。另外還須要在 Master 節點上經過命令 hdfs dfsadmin -report 查看 DataNode 是否正常啓動,若是 Live datanodes 不爲 0 ,則說明集羣啓動成功。
在 Slave 節點能夠看到 DataNode 和 NodeManager 進程。
執行hadoop namenode -format出現了
Cannot create directory /usr/hadoop/tmp/hdfs/name/current
則有可能須要修改tmp的權限。
$chown -R hadoop:hadoop ~/opt/hadoop/tmp
而後重啓hadoop。
$stop-yarn.sh $stop-dfs.sh $mr-jobhistory-daemon.sh stop historyserver
運行 Hadoop 程序時,爲了防止覆蓋結果,程序指定的輸出目錄(如 output)不能存在,不然會提示錯誤,所以運行前須要先刪除輸出目錄。在實際開發應用程序時,可考慮在程序中加上以下代碼,能在每次運行時自動刪除輸出目錄,避免繁瑣的命令行操做。
執行分佈式實例過程與僞分佈式模式同樣,首先建立 HDFS 上的用戶目錄:
$hdfs dfs -mkdir -p /user/hadoop $hdfs dfs -mkdir input $hdfs dfs -put /home/hadoop/opt/hadoop/etc/hadoop/*.xml input
經過查看 DataNode 的狀態(佔用大小有改變),輸入文件確實複製到了 DataNode 中。能夠訪問 Web 界面 http://localhost:50070/ 查看 NameNode 和 Datanode 信息,還能夠在線查看 HDFS 中的文件。
接着就能夠運行 MapReduce 做業了:
$hadoop jar /home/hadoop/opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
運行時的輸出信息與僞分佈式相似,會顯示 Job 的進度。
可能會有點慢,但若是遲遲沒有進度,好比 5 分鐘都沒看到進度,那不妨重啓 Hadoop 再試試。若重啓還不行,則頗有多是內存不足引發,建議增大虛擬機的內存,或者經過更改 YARN 的內存配置解決。
一樣能夠經過 Web 界面查看任務進度 http://master:8088/cluster,在 Web 界面點擊 "Tracking UI" 這一列的 History 鏈接,能夠看到任務的運行信息。前提是你開啓了YARN。
執行完後輸出結果:
$hdfs dfs -cat output/*
注意:按照上面的一系列操做,若是不想啓動 YARN,務必把配置文件 mapred-site.xml 重命名,改爲 mapred-site.xml.template,須要用時改回來就行。不然在該配置文件存在,而未開啓 YARN 的狀況下,運行程序會提示 "Retrying connect to server: 0.0.0.0/0.0.0.0:8032" 的錯誤,這也是爲什麼該配置文件初始文件名爲 mapred-site.xml.template。