先前东看一个教程,西看一个教程,一直没有安装成功。后来搜到厦大林子雨老师团队的大数据教程,真是相当得棒。我是按照这篇博客《Spark 2.0分布式集群环境搭建(Python版)》进行安装和配置的。事毕,总结记录一下。
1.安装ubuntu系统
我是在学院近期配备的台式机上安装的分布式系统,用我自己的机器做master节点,借用了代瑞同学的机器做slave节点。在安装hadoop+spark之前需要先在机器上安装linux系统。在安装新系统时候要注意备份原始windows系统数据,防止安装失败导致数据丢失。分区和设置引导是两个坑,如果设置失败多在网上搜搜原因。实在不行,就只能将硬盘全部分区,再次安装windows和ubuntu系统。
2.设置host
为了能和代瑞的电脑通信,我首先要知道她的ip地址,所以必须要先设置好host
#给我的电脑重新起一个名字叫做master,打开hostname文件,将原来的名字改成master
#同理,给代瑞的电脑起一个slave01的名字
sudo gedit /etc/hostname
#添加本地ip和代瑞的ip到我的host文件和她的host文件里
sudo gedit /etc/hosts
#如下
#127.0.0.1 localhost
#10.139.6.125 master
#10.139.6.142 slave01
3.创建用户
在master和slave上创建相同的用户方便对这个分布式系统进行管理。
#创建用户hadoop,不带参数的key m表示创建用户目录,带参数的key s加上后面的value表示用户的使用的shell
sudo useradd -m hadoop -s /bin/bash
#设置hadoop用户的密码
sudo passwd hadoop
#将hadoop用户加入到sudo用户组
sudo adduser hadoop sudo
sudo apt-get update
sudo apt-get install vim
4.安装ssh
安装ssh是为了我可以在我的电脑上远程地登录代瑞的电脑,而不必在两台电脑面前操作。安装的ssh是字符界面,所以我不能在我的电脑上通过ssh使用代瑞电脑上的gui工具,比如gedit,这种情况下最好是使用vi。
#在master和slave01上分别执行
sudo apt-get install openssh-server
ssh localhost
exit
cd ~/.ssh/
ssh-keygen -t rsa
cat ./id_rsa.pub >> ./authorized_keys #将本地的公钥加入到authorized_keys
#在master上执行
scp ~/.ssh/id_rsa.pub hadoop@slave01:/home/hadoop
#在slave01上执行
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys #将master的公钥加入到slave01的authoried_keys里
#在master上执行,远程登录slave01
ssh slave01
5.安装jdk
安装jdk可以说从大一按到现在,但是在安装hadoop+spark里它还是最容易出错的步骤。在安装的时候注意设置JAVA_HOME指到java的安装目录,如果不知道java的安装目录,可以通过which java 查看有那些可执行的文件名叫java,如果显示了/usr/bin/java,继续查看ll /esr/bin/java找到其指向,一直找到最后的java实际安装位置。
6.安装与配置hadoop
6.1安装hadoop
hadoop在master节点和slave01上都要安装,先在master节点上安装配置完成,然后复制到slave01节点上。
#解压缩到/usr/local目录下
sudo tar -zxvf ~/下载/hadoop-2.7.6.tar.gz -C /usr/local
#改名
sudo mv /usr/local/hadoop-2.7.6 /usr/local/hadoop
#使hadoop成为hadoop文件夹下所有文件的所有者,-R表示递归地进行,类似于rm -rf里的r
sudo chown -R hadoop /usr/local/hadoop
#添加hadoop到.bashrc文件,~表示当前用户的家目录,.bashrc文件前面有一个点表示这个文件在文件夹中不显示,除非使用ll
sudo gedit ~/.bashrc
#export HADOOP_HOME=/usr/local/hadoop
#export PATH=$PATH:$HADOOP_HOME/bin:%HADOOP_HOME/sbin
source ~/.bashrc
6.2配置hadoop
hadoop的所有的配置文件都在/usr/local/hadoop/etc/hadoop下
- 配置slaves文件,顾名思义slaves文件就是制定谁是这个hadoop系统里的slave节点,当再次增加slave节点的时候,还需要在所有节点的这个文件里添加新的slave名称
在slaves文件中写入
slave01
- 配置core-site.xml文件
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
- 配置hdfs-site.xml文件,dfs.replication表示文件的备份数量。按照hadoop分布式配置教程配置的时候,只配置里dfs.replication,在配置完成格式化name-node的时候报错“hadoop格式化namenode时报异常: URI has an authority component。后来参考里单机版和伪分布式的配置和《hadoop格式化namenode时报异常: URI has an authority component》这篇博客,加了dfs.namenode.name.dir和dfs.datanode.data.dir两个属性 。
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
- 配置mapred-site.xml文件
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
- 配置yarn-site.xml文件
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
</configuration>
6.3配置hadoop
复制hadoop到slave01节点。
#在master节点上
cd /usr/local
tar -zcf ~/hadoop.master.tar.gz ./hadoop
cd ~
scp hadoop.master.tar.gz hadoop@slave01:/home/hadoop
#在slave01节点上
sudo rm -rf /usr/local/hadoop
sudo tar -zxf hadoop.master.tar.gz -C /usr/local/
sudo chown -R hadoop /usr/local/hadoop
6.4运行hadoop
#在master节点上
cd /usr/local/hadoop
#格式化namenode节点,只需要一次
bin/hdfs namenode -format
#运行hadoop
sbin/start-all.sh
如果格式化报错说“Error: JAVA_HOME is not set and could not be found”,需要在/usr/local/hadoop/etc/hadoop/hadoop-env.sh修改“export JAVA_HOME=${JAVA_HOME} ”为“export JAVA_HOME=实际安装地址 ”。
在安装spark的时候也可能遇到spark work节点上启动不了,提示“JAVA_HOME is not set”,类似hadoop,参考这篇博客《spark work节点上启动不了 提示JAVA_HOME is not set》
#在master和slave01上运行jps查看
jps命令在slave01上运行没有问题,但是我的master节点上运行jps的时候,shell提醒我“程序 ‘jps’ 已包含在下列软件包中”。应该是因为我的master节点上安装过好几次java。《在Ubuntu 14.04 LTS上安装部署Hadoop 2.7.1(伪分布式)》参考里这篇博客里的解答,手动设置默认的JDK,问题解决。
至此,分布式hadoop安装成功!
7.安装与配置spark
7.1安装spark
#在master节点上
sudo tar -zxf ~/下载/spark-2.3.0-bin-hadoop2.7.tgz -C /usr/local/
sudo mv /usr/local/spark-2.3.0-bin-hadoop2.7 /usr/local/spark
sudo chown -R hadoop ./spark
#配置.bashrc
#export SPARK_HOME=/usr/local/spark
#export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
7.2配置spark
spark的配置文件在/usr/local/spark/conf下
- 配置slaves文件,复制slaves.template 为slaves,在slaves中添加如下内容
slave01
- 配置spark-env.sh文件,复制spark-env.sh.template为spark-env.sh,在spark-env.sh中添加如下内容,其中SPARK_MASTER_IP为spark集群master节点的ip
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export SPARK_MASTER_IP=10.139.6.125
- 复制master节点下/usr/local/spark到slave01
#在master节点上
tar -zcf ~/spark.master.tar.gz /usr/local/spark
cd ~
scp ./spark.master.tar.gz hadoop@slave01:/home/hadoop
#在slave01节点上
sudo rm -rf /usr/local/spark
sudo tar -zxf ~/spark.master.tar.gz -C /usr/local/
sudo chown -R hadoop /usr/local/spark
7.3启动spark
- 启动hadoop集群
cd /usr/local/hadoop
sbin/start-all.sh
- 启动spark集群
cd /usr/local/spark/
#启动master节点
sbin/start-master.sh
#启动slaves节点
sbin/start-slaves.sh
通过jps查看
7.4关闭spark
- 关闭master节点
sbin/stop-master.sh
- 关闭slaves节点
sbin/stop-slaves.sh
- 关闭hadoop集群
cd /usr/local/hadoop/
sbin/stop-all.sh
至此,分布式集群的hadoop+spark安装完成!
我遇到的所有问题和相关的解决方法(除去安装ubuntu系统)已经全记录在这里了。
再次感谢厦大林子雨老师团队的大数据相关博客和课程!