最近想要学习一下spark,买了本书来学习,但未曾想到是如此不靠谱,作者非常不负责任,于是在查阅大量前辈记录的文档结合我自己的实践后形成了这篇博客。

欢迎各位童鞋交流和指教!

注:本文部署的standalone模式的Spark

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

系统软件环境:

Win10(64),vmware11,centos7(64),jdk1.8,hadoop2.6(或更高),scala2.12.4,spark2.2.0

集群网络环境:

IP地址

机器名

类型

用户名

192.168.254.128

master

NameNode/Master

liu

192.168.254.129

slave1

DataNode/Worker

liu

192.168.254.130

slave2

DataNode/Worker

liu

 

1. vmware11自定义安装,全选,设置安装和共享虚拟机路径,https端口保持默认,输入注册码完成安装。

2. Centos7安装,首先在电脑bios设置intel-vtx有效,点开vmware创建新的虚拟机,典型,选择安装的iso文件,用户名liu,密码ndsc,设置安装路径,分配40g内存,选择自定义组件配置如图1所示,安装即可。

(注意虚拟机的安装路径不要和vmware11的安装路径在一起,否则会无法创建新虚拟机)

 

图1

安装完后可以设置终端的快捷键,applications→system tool→setting找到键盘,添加,命名Terminal,命令/usr/bin/gnome-terminal,快捷键edit然后按你要的快捷键(我的是ctrl+alt+t),然后add,完毕。

如果系统的界面语言和输入法想设置为中文,system tool→setting→region and language(第一栏的一面小旗子),输入法选择中文(pingyin)然后自动重启就好。

打开firefox设置首页为www.baidu.com。

安装jdk,先看下有没有预装好的java,java -version,

rpm -qa | grep java 看系统自带的openjdk

然后通过    rpm -e --nodeps   后面跟系统自带的jdk名   这个命令来删除系统自带的jdk,

 

图2

图2中带箭头的删掉。

root权限下

mkdir /usr/java

mv /home/liu/文档/jdk...... /usr/java/

tar -zxvf jdk.....

配置环境变量

gedit /etc/profile

(注:/etc/profile是全局性的环境变量,~/.bash_profile是每个用户下的环境变量设置

试一下都用全局环境变量)

在最后加入以下环境变量:

export JAVA_HOME=/usr/java/jdk1.8.0_151
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=$JAVA_HOME/bin:$PATH

使配置文件生效:

source /etc/profile

然后使用java -version查看java是否安装成功,如图2。

图3

3. 集群网络环境配置,右键master,管理→克隆,虚拟机当前状态,完整克隆,设置名称slave,路径。在每台机子上进行如下配置:

网络基本配置,su - root切换root用户(登录到用户root的根目录,su root仅登录root权限调用一些指令;sudo是临时的使用root权限),

使用hostnamectl指令,hostnamectl status查看主机名,hostnamectl set-hostname <hostname>设置永久主机名

Ifconfig查看ip地址。

关闭防火墙,setup 选择system services,Tab切换选择run tool,用空格关闭firewall。

配置hosts文件,gedit /etc/hosts将如下代码添加到文件中:(ip地址是真实查到的ip地址)

192.168.254.128 master

192.168.254.129 slave1

192.168.254.130 slave2

(其意思是每个ip地址对应每个名称,这个在后面scp拷贝文件会用到)

使用ping命令测试ip地址能否ping通:

ping 192.168.254.129

ping slave1

配置时钟同步:

在每个节点的root下crontab -e该命令为vi指令,输入i进行插入,

0 1 * * * /usr/sbin/ntpdate cn.pool.ntp.org

按Esc退出编辑,:wq保存退出,输入以下指令手动同步时间:

/usr/sbin/ntpdate cn.pool.ntp.org

4. 免秘钥登录设置,在liu用户下,在master节点上执行:ssh-keygen -t rsa,然后一直回车,生成秘钥文件,该文件在~/.ssh中。可cd ~/.ssh查看(ll或ls均可)。

复制公钥,cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

chmod修改authorized_keys的权限,

chmod 600 ~/.ssh/authorized_keys

将authorized_keys文件复制到slave节点中,

scp ~/.ssh/authorized_keys liu@slave1:~/

(如果出现port22的错误有可能是虚拟机没有连接到网络)

在slave1和slave2中分别执行如下指令生成ssh秘钥:

ssh-keygen -t rsa

mv authorized_keys ~/.ssh/

cd ~/.ssh

chmod 600 authorized_keys

验证免秘钥登录,在master:

ssh slave1

 

图4

5. hadoop配置,将hadoop2.6.5解压至用户主目录下。(2.7.x以上的版本也可以)

tar -xvf hadoop-2.6.5.tar.gz

cd hadoop-2.6.5

配置hadoop-env.sh。

gedit etc/hadoop/hadoop-env.sh

在文件靠前的位置将JAVA_HOME改为:

export JAVA_HOME=/usr/java/jdk1.8.0_151

配置yarn-env.sh。

gedit etc/hadoop/yarn-env.sh

将JAVA_HOME改为实际路径并去掉#。

配置core-site.xml。

分别在几个节点上创建hadoopdata目录:(只有该操作在每个节点进行)

mkdir ~/hadoopdata

gedit etc/hadoop/core-site.xml

用以下代码覆盖文件内容:

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

<property>

<name>fs.defaultFS</name>

<value>hdfs://master:9000</value>

</property>

<property>

<name>hadoop.tmp.dir</name>

<value>/home/liu/hadoopdata</value>

</property>

</configuration>

配置hdfs-site.xml

gedit etc/hadoop/hdfs-site.xml

用以下代码覆盖文件内容:

<?xml version=”1.0” encoding=”UTF-8”?>

<?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

</configuration>

配置yarn-site.xml

gedit etc/hadoop/yarn-site.xml

用以下代码覆盖内容:

<?xml version=”1.0”?>

<configuration>

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

<property>

<name>yarn.resourcemanager.address</name>

<value>master:18040</value>

</property>

<property>

<name>yarn.resourcemanager.scheduler.address</name>

<value>master:18030</value>

</property>

<property>

<name>yarn.resourcemanager.resource-tracker.address</name>

<value>master:18025</value>

</property>

<property>

<name>yarn.resourcemanager.admin.address</name>

<value>master:18141</value>

</property>

<property>

<name>yarn.resourcemanager.webapp.address</name>

<value>master:18088</value>

</property>

</configuration>

配置mapred-site.xml

cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml

(将前者复制并另存为后者)

gedit etc/hadoop/mapred-site.xml

用下面代码覆盖:

<?xml version=”1.0”?>

<?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>

<configuration>

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

</configuration>

(注意:如果直接从word文档中拷贝过去后面hdfs格式化的时候会报错,所以要把里面version等后面的字符串的引号重新写一下)

配置slaves文件

gedit etc/hadoop/slaves

用下面的代码替换内容

slave1

slave2

6. 配置从节点。

scp -r hadoop-2.6.5 liu@slave1:~/

(-r是scp复制文件夹)

7. 配置系统文件。分别在节点上以liu执行以下步骤:

gedit ~/.bash_profile

加入以下环境变量

export HADOOP_HOME=/home/liu/hadoop-2.6.5

export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

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_ROOT_LOGGER=INFO,console

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

 

source ~/.bash_profile

8. master节点下执行格式化命令:

hdfs namenode -format

没有报error的话就是格式化成功了,有的话最好到stackoverflow等上面查下。

启动hadoop,先cd ~/hadoop-2.6.5/,然后sbin/start-all.sh,提示输入yes/no,输入yes。

最后成功的话如图5所示。

分别jps指令查看进程,master有4个,slave有3个。正常启动的话效果如图5-7所示。

 

图5

 

图6

 

图7

也可以通过web ui查看集群是否启动,在master的firefox浏览器输入

http://master:50070/,如图8所示,namenode、datanode正常启动。

 

图8

在master的firefox中输入http://master:18088/检查yarn是否正常启动。

 

图9

9. 安装scala,在master节点tar -zxvf scala-2.12.4.tgz然后编辑环境变量。

gedit /home/liu/.bash_profile

添加下述语句:

export SCALA_HOME=/home/liu/scala-2.12.4

export PATH=$PATH:$SCALA_HOME/bin

使配置生效:

scource /home/liu/.bash_profile

将scala发送至slave节点。

scp -r /home/liu/scala-2.12.4 slave1:/home/liu/

scp -r /home/liu/scala-2.12.4 slave2:/home/liu/

然后在slave节点上分别配置环境变量如前几步所述。

配置完后验证:

 

 

图10

10. 安装spark。Master的主目录下tar -zxvf spark-2.2.0-bin-hadoop2.7.tgz,然后

cd spark-2.2.0-bin-hadoop2.7/conf

cp spark-env.sh.template spark-env.sh

gedit spark-env.sh

将以下代码加入到后面:

export SCALA_HOME=/home/liu/scala-2.12.4

export JAVA_HOME=//usr/java/jdk1.8.0_151

export HADOOP_HOME=/home/liu/hadoop-2.6.5

export HADOOP_CONF_DIR=/home/liu/hadoop-2.6.5/etc/hadoop

export SPARK_MASTER_IP=192.168.254.128

export SPARK_MASTER_PORT=7077

export SPARK_MASTER_WEBUI_PORT=8080

export SPARK_WORKER_PORT=7078

export SPARK_WORKER_WEBUI_PORT=8081

export SPARK_WORKER_CORES=1

export SPARK_WORKER_INSTANCES=1

export SPARK_WORKER_MEMORY=2g

SPARK_WORKER_CORES:每个worker节点占用的cpu核数目;SPARK_WORKER_INSTANCES:每台机器或者ip节点开启的worker节点数目;SPARK_WORKER_MEMORY:每个worker节点占用的最大内存。

然后:

cp spark-defaults.conf.template spark-defaults.conf

gedit spark-defaults.conf

在后面添加代码:

spark.master=spark://192.168.254.128:7077

然后配置slaves

cp slaves.template slaves

gedit slaves

在salves后面将localhost改为slave节点的ip地址:

192.168.254.129

192.168.254.130

将spark文件夹分发至slave节点:

scp -r ~/spark-2.2.0-bin-hadoop2.7 slave1:~/

scp -r ~/spark-2.2.0-bin-hadoop2.7 slave2:~/

(每次scp传送不成就要看看你的网络连接是不是断了。。。)

最后在每台机器上配置环境变量:

gedit /home/liu/.bash_profile

后面添加:

export SPARK_HOME=/home/liu/spark-2.2.0-bin-hadoop2.7

export PATH=$PATH:$SPARK_HOME/bin

然后生效:

source /home/liu/.bash_profile

11. 启动spark集群。

cd spark-2.2.0-bin-hadoop2.7/sbin

start-all.sh

 

图11

图11即为启动成功截图。

同样我们用jps来查看进程。

 

图12

如图12所示。

也可以用spark-shell进一步查看集群的安装情况。在bin下用spark-shell。

图13

也可在web上查看各节点状况。如图14-16所示。

 

图14

 

图15

 

图16

至此,standalone模式的spark集群搭建完毕。

(如若发生网络适配器启动不起来,虚拟机连不了网,是和NetworkManager服务有冲突按照以下步骤进行:service NetworkManager off,然后chkconfig NetworManager off,之后重启即可。)

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐