三臺機子,系統爲ubuntu14.01,公用一個路由器組成一個小型局域網。
首先配置固定的ip地址。
點擊屏幕右上方的網絡連接,Edit Connections -> Add -> 類型選Ethernet -> Create -> 選擇IPv4 Setting -> Method選擇 Manual(手動)-> Add
對於可以填什麼,可以點開網絡連接處的Connection Information,對應着填入。
修改hosts文件
三臺機子都要修改hosts文件:
sudo gedit /etc/hosts
在原文件後面加上:
192.168.1.102 Master
192.168.1.104 Slave1
192.168.1.105 Slave2
使配置文件生效:
source /etc/hosts
ssh無密碼驗證配置
安裝ssh:sudo apt-get update
sudo apt-get install ssh
注意,以下操作均在root用戶下執行,從普通用戶跳到root可使用命令sudo su
配置Master無密碼登陸slave
1、在Master節點上生成密碼對ssh-keygen -t rsa -P ''
生成的密碼對id_rsa和id_rsa.pub默認保存在/root/.ssh目錄下
2、將id_rsa.pub追加到授權的key裏面去
cat ~/.ssh/id_rsa.pub >> ~/.sh/authorized_keys
# ~/.ssh和/root/.ssh是同一個意思
3、修改ssh配置文件/etc/ssh/sshd_config裏面的內容,將以下三行的註釋去掉
RSAAuthentication yes # 啓用 RSA 認證
PubkeyAuthentication yes # 啓用公鑰私鑰配對認證方式
AuthorizedKeysFile .ssh/authorized_keys # 公鑰文件路徑(和上面生成的文件同)
4、驗證無密碼本地登陸:ssh localhost
5、把公鑰複製到所有的Slave機器上。很多博客做這一步都是用以下兩行命令:
scp /root/.ssh/id_rsa.pub root@Slave1:/root/.ssh/
scp /root/.ssh/id_rsa.pub root@Slave2:/root/.ssh/
但是我用這兩行命令後會被提問slave1和slave2的密碼,輸密碼後又permission denied,所以最後我直接用u盤拷貝的方法,把master的id_rsa.pub拷貝到其他兩臺機子的/root/.ssh/下面
接着配置slave節點,以slave1爲例:
1、在/root/下面創建".ssh"文件:mkdir /root/.ssh
(注意slave此刻也在root用戶下哦~)
2、將master的公鑰追加到slave1的授權文件中去:
cat /roo/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
3、修改配置文件etc/ssh/sshd_config,同上面的3、4步。
4、最後刪除master的公鑰文件id_rsa.pub
用Master無密碼登陸slave1,在master的終端上測試,成功的話,以下兩條命令都可以登陸slave1:
ssh Slave1
ssh 192.168.1.104
同樣的道理,想讓A機無密碼登錄B機,就先在A機本地生成密碼對(id_rsa.pub和id_rsa)。
把公鑰id_rsa.pub追加到A機自身的授權文件authorized_keys中去,成功的話,ssh localhost
可以本地登錄,然後將公鑰放置到B機上,追加到B機的授權文件中去,由此A機就能登錄B機,想讓B機登錄A機也是相同操作。
如此這番後,我的三臺機子都可以互相無密碼登錄啦~
java和scala基礎環境
這部分我就不寫啦,下載相應的包,解壓到指定路徑並添加路徑到配置文件/etc/profile。
hadoop完全分佈式搭建
在master節點進行以下操作:
1、下載二進制包hadoop-2.6.5.tar.gz
2、解壓並移動到對應的目錄:tar -zxvf hadoop-2.6.5.tar.gz -C /opt/
3、修改配置文件,在上一步添加java/scala路徑的配置文件中加入HADOOP_HOME及其路徑,並source /etc/profile
保存
4、修改 $HADOOP_HOME/etc/hadoop/slaves,將原來的localhost刪除並添加:
Slave1
Slave2
5、修改 $HADOOP_HOME/etc/hadoop/core-site.xml
(注意對應的hadoop路徑和版本根據你自己放的位置來寫)
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-2.7.3/tmp</value>
</property>
</configuration>
6、修改 $HADOOP_HOME/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>Master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop-2.7.3/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop-2.7.3/hdfs/data</value>
</property>
</configuration>
7、重命名template: cp mapred-site.xml.template mapred-site.xml
並修改內容:
<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.address</name>
<value>Master:19888</value>
</property>
</configuration>
8、修改 $HADOOP_HOME/etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>Master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</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>
</configuration>
9、複製Master節點的hadoop文件夾到Slave1和Slave2上。
scp -r /opt/hadoop-2.7.3 root@Slave1:/opt
scp -r /opt/hadoop-2.7.3 root@Slave2:/opt
10、修改Slave1和Slave2上的配置文件,過程和Master的一樣,添加路徑即可
11、在master上啓動集羣
首先,格式化一下namenode: hadoop namenode -format
啓動:/opt/hadoop-2.7.3/sbin/start-all.sh
接下來看到日誌信息,hadoop的分佈式就搭建成功了。
12、查看集羣是否成功啓動,輸入jps
, master顯示:
Slave1顯示:
瀏覽器中輸入:localhost:50070 可以看到hadoop中的Namenode Information :
spark分佈式搭建
首先在master機子上進行操作
1、下載二進制包spark-2.4.0-bin-hadoop2.7.tgz
2、解壓到指定位置tar -zxvf spark-2.4.0-bin-hadoop2.7.tgz -C /opt/
,我順便重命名了cp spark-2.4.0-bin-hadoop2.7.tgz spark
3、修改配置文件/etc/profile 添加路徑到SPARK_HOME
4、進入/opt/spark/conf,重命名spark-env.sh.template文件,並添加內容
cp spark-env.sh.template spark-env.sh
gedit spark-env.sh
--------------添加以下內容------------------
export JAVA_HOME=/opt/jdk1.8.0_191
export SCALA_HOME=/opt/scala-2.12.8
export SPARK_HOME=/opt/spark
export HADOOP_HOME=/opt/hadoop-2.6.5
export PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:${SCALA_PATH}/bin:${SPARK_HOME}/bin:
export SPARK_MASTER_IP=192.168.1.102 # 注意這裏是你的master的ip哦
export SPARK_WORKER_MEMORY=2g
5、重命名slaves.template文件並添加內容
cp slaves.template slaves
--------------添加以下內容------------------
Master
Slave1
Slave2
6、將配置好的spark文件夾複製到另外兩臺機子上:scp /opt/spark root@Slave1:/opt
7、修改兩臺slave的配置文件/etc/profile,添加spark路徑。同時注意,進入/opt/spark/conf,在spark-env.sh文件中將export SPARK_MASTER_IP=192.168.1.102
改爲:export SPARK_LOCAL_IP=#這裏是相應機子的IP
8、在master啓動集羣:/opt/spark/sbin/start-all.sh
9、查看集羣是否成功啓動:jps
這是在master上的結果,與上面對比,較hadoop多了一個Master:
這是在Slave1上的結果,比hadoop多了一個Worker:
spark集羣的web端口:8080
啓動和關閉hadoop/spark的命令
hadoop/sbin/start-all.sh
spark/sbin/start-master.sh
spark/sbin/start-slaves.sh
spark/sbin/stop-master.sh
spark/sbin/stop-slaves.sh
hadoop/sbin/stop-all.sh