為了將Hadoop和Spark的安裝簡單化,今日寫下此帖。
首先,要看手頭有多少機器,要安裝偽分布式的Hadoop+Spark還是完全分布式的,這里分別記錄。
1. 偽分布式安裝
偽分布式的Hadoop是將NameNode,SecondaryNameNode,DataNode等都放在一台機器上執行,Spark同理,一般用於開發環境。
1.1 准備工作
系統准備:一台Ubuntu16.04機器,最好能夠聯網
准備好四個安裝包:jdk-8u111-linux-x64.tar.gz,scala-2.12.0.tgz,hadoop-2.7.3.tar.gz,spark-2.0.2-bin-hadoop2.7.tgz
1.2 配置SSH免密碼登錄
SSH是集群不同機器間實現自由數據傳輸通信的根本保障。安裝完成后試試ssh到本機是否需要密碼即可。
sudo apt-get install ssh openssh-server # 安裝SSH ssh-keygen -t rsa -P "" cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # 配置秘鑰 service ssh start # 啟動SSH服務
1.3 解壓四個軟件包並配置環境變量
解壓四個軟件包:
tar -zxvf jdk-8u111-linux-x64.tar.gz sudo mv jdk1.8.0_111 /usr/lib/ # 解壓JDK並移動到/usr/lib/下 tar -zxvf scala-2.12.0.tgz sudo mv scala-2.12.0 /usr/lib/ # 解壓scala並移動到/usr/lib/下 tar -zxvf hadoop-2.7.3.tar.gz # 解壓hadoop包 tar -zxvf spark-2.0.2-bin-hadoop2.7.tgz # 解壓spark包
配置環境變量:
當前用戶的環境變量位於~/.profile,root用戶的環境變量位於/etc/profile。這里我們將環境變量按當前用戶配置。vim ~/.profile
vim ~/.profile # 打開環境變量 # 添加下面的變量 export JAVA_HOME=/usr/lib/jdk1.8.0_111 export SCALA_HOME=/usr/lib/scala-2.12.0 export HADOOP_HOME=/home/user/hadoop-2.7.3 export SPARK_HOME=/home/user/spark-2.0.2-bin-hadoop2.7 export PATH=$PATH:$JAVA_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin:$SPARK_HOME/sbin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar # 保存后使其立即生效 source ~/.profile
1.4 配置Hadoop
需要配置三個文件:core-site.xml,mapred-site.xml,hdfs-site.xml。
在core-site.xml中添加如下信息:
vim hadoop-2.7.3/etc/hadoop/core-site.xml # 打開文件 <configuration> <property> <name>hadoop.tmp.dir</name> <value>file:/home/user/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>
在mapred-site.xml中添加如下信息:
cp hadoop-2.7.3/etc/hadoop/mapred-site.xml.template hadoop-2.7.3/etc/hadoop/mapred-site.xml # 復制一份 vim hadoop-2.7.3/etc/hadoop/mapred-site.xml # 打開文件 <configuration> <property> <name>mapred.job.tracker</name> <value>localhost:9001</value> </property> </configuration>
在hdfs-site.xml中添加如下信息,其中replication是機器數量,此處為1,user為當前用戶名:
vim hadoop-2.7.3/etc/hadoop/hdfs-site.xml # 打開文件 <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/user/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/user/hadoop/tmp/dfs/data</value> </property> </configuration>
如果在啟動Hadoop時找不到環境變量,可以在hadoop-2.7.3/etc/hadoop/hadoop-env.sh中明確:export JAVA_HOME=/usr/lib/jdk1.8.0_111
1.5 配置Spark
Spark只需要配置spark-env.sh文件。
vim /home/user/spark-2.0.2-bin-hadoop2.7/conf/spark-env.sh # 打開文件 export JAVA_HOME=/usr/lib/jdk1.8.0_111 export SCALA_HOME=/usr/lib/scala-2.12.0 export SPARK_MASTER_HOST=localhost #單機下配置為localhost export HADOOP_CONF_DIR=/home/user/hadoop-2.7.3/etc/hadoop/ #hadoop配置目錄 export SPARK_WORKER_MEMORY=8g #給spark分配8G內存 export SPARK_WORKER_CORES=16 #允許spark以16核並行運算 # 配置項很多,請參考文件中的提示
1.6 啟動Hadoop和Spark
先格式化hadoop的HDFS(分布式文件系統),這是必要的步驟,否則NameNode無法啟動。但也不需要每次啟動Hadoop時都格式化,否則會造成Data和Name不兼容,使得DataNode無法啟動,若出現這種情況,刪掉tmp/data/current/下的VERSION文件。重新格式化HDFS即可。
啟動Hadoop和Spark命令為:
$HADOOP_HOME/bin/hdfs namenode -format # 格式化HDFS
$HADOOP_HOME/sbin/start-all.sh # 啟動Hadoop
$SPARK_HOME/sbin/start-all.sh # 啟動Spark
啟動后,輸jps命令,若Hadoop的DataNode,NameNode,SecondaryNameNode,***Manager都啟動,Spark的Master和Worker都啟動,則集群成功啟動,缺一不可。
此時,訪問http://localhost:50070可訪問Hadoop集群Web任務查看頁面,訪問http://localhost:8080可訪問Spark集群Web任務查看頁面。
注意:如果裝的是雙系統,ubuntu訪問ntfs盤符可以使用這條命令激活:ntfsfix /dev/sda5
2. 完全分布式安裝
顧名思義,完全分布式安裝是真正的集群部署,一般用於生產環境。
2.1 准備工作
系統准備:一台Ubuntu16.04機器作為master(ip:192.168.1.1),最好能夠聯網;1台及其以上Ubuntu16.04機器作為slave節點(ip:192.168.1.2 ...)
准備好四個安裝包:jdk-8u111-linux-x64.tar.gz,scala-2.12.0.tgz,hadoop-2.7.3.tar.gz,spark-2.0.2-bin-hadoop2.7.tgz
2.2 配置SSH免密碼登錄
SSH是集群不同機器間實現自由數據傳輸通信的根本保障。安裝完成后試試ssh到本機是否需要密碼即可。
此處步驟與1.2中相同,但是要將master上的RSA秘鑰拷貝到其他機器,實現機器間自由訪問。
scp ~/.ssh/id_rsa.pub user@slave01:/home/user/ # 遠程拷貝RSA秘鑰 ssh slave01; # 登錄slave01 mkdir ~/.ssh;cat ~/id_rsa.pub >> ~/.ssh/authorized_keys;exit; # 將秘鑰生成公鑰並退出 ssh slave11; # 重新連接看是否需要密碼,自動登錄則成功
依次類推,對所有的slave節點做相同操作,最后實現master到任意slave節點的SSH無密碼登錄。
此外,我們還需要對每台機器上的hosts文件做配置,以實現SSH到hostname即可訪問機器,無需顯式IP地址。
sudo vim /etc/hosts # 打開hosts # 存入下面的IP與hostname映射 192.168.1.1 master 192.168.1.2 slave01 192.168.1.3 slave02 192.168.1.4 slave03 ...
依次類推,對所有的slave節點做相同操作。
2.3 解壓四個軟件包並配置環境變量
在master主節點機器上解壓四個軟件包和配置環境變量,與1.3相同,不同的是,還需要通過scp命令將配置好的jdk和scala整體拷貝到其他從節點。
2.4 配置Hadoop
需要配置三個文件:core-site.xml,mapred-site.xml,hdfs-site.xml,slaves。
前三個與1.4都相同,只需將localhost改成master(主節點的hostname名),replication改成具體的機器個數。
最后,還需要通過scp命令將配置好的hadoop整體拷貝到其他從節點。
2.5 配置Spark
Spark只需要配置spark-env.sh文件,這一步與1.5相同。最后,通過scp命令將配置好的spark整體拷貝到其他從節點。
2.6 啟動Hadoop和Spark
在主節點上啟動hadoop和spark,通過jps驗證是否成功啟動集群。
到此,您就可以在單機上用Eclipse或Intellij做開發,在集群上運行整個集群任務咯!