一、操作系统及软件
操作系统:Cent OS 7.2
应用软件:
Spark 2.4.0
Hadoop 2.7.7
JDK 1.8
Scala 2.11.12
本次部署使用三个节点:
机器名 | IP地址 |
---|---|
Master | 192.168.8.185 |
Slave1 | 192.168.8.186 |
Slave2 | 192.168.8.187 |
下载后上传到/opt路径下。为方便操作,本次部署使用root账户,以/opt文件夹为部署地址。上传文件后,用tar命令解压缩,然后mv命令修改文件夹名称,便于后续操作。
tar -zxvf spark-2.4.0-bin-hadoop2.7.tgz
mv spark-2.4.0-bin-hadoop2.7 spark2.4
tar -zxvf hadoop-2.7.7.tar.gz
mv hadoop-2.7.7 hadoop2.7
tar -zxvf jdk-8u201-linux-x64.tar.gz
mv jdk-8u201-linux-x64 jdk1.8
tar -zxvf zookeeper-3.4.13.tar.gz
mv zookeeper-3.4.13 zookeeper3.4
tar -zxvf hbase-2.1.2-bin.tar.gz
mv hbase-2.1.2-bin hbase2.1
rpm -ivh scala-2.11.12.rpm #直接安装scala
最终效果是在/opt下有五个文件夹:spark2.4,hadoop2.7,jdk1.8,zookeeper3.4,hbase2.1
二、配置Linux环境
2.1 修改hosts文件
vi /etc/hosts #三台设备都需要修改
#增加如下内容
#Master、Slave1、Slave2是三台机器的机器名
192.168.8.185 Master
192.168.8.186 Slave1
192.168.8.187 slave2
source /etc/hosts #使修改的文件生效
可以使用如下命令修改主机名,立刻生效,并且重启有效
hostnamectl set-hostname [newname]
2.2 关闭防火墙
systemctl stop firewalld.service //关闭防火墙服务
systemctl disable firewalld.service //禁止防火墙服务开机启动
vi /etc/sysconfig/selinux #将SELINUX属性修改为disabled,关闭SELINUX
source /etc/sysconfig/selinux
2.3 Master到Slave免密码登录
Master操作
ssh-keygen -t rsa -P '' #生成密码对id_rsa和id_rsa.pub,默认位置"/root/.ssh"
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys #把id_rsa.pub追加到授权的key
vi /etc/ssh/sshd_config #修改ssh配置文件
#去掉下面内容的注释
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径
service sshd restart #重启ssh服务
ssh localhost #验证无密码登录本机是否成功
scp /root/.ssh/id_rsa.pub root@Slave1:/root/ #把公钥复制到slave设备
scp /root/.ssh/id_rsa.pub root@Slave2:/root/
Slave操作
两个slave分别执行下面操作
mkdir /root/.ssh #此文件夹可能已经存在
cat /root/id_rsa.pub >> /root/.ssh/authorized_keys #追加Master的公钥到授权文件
vi /etc/ssh/sshd_config #修改ssh配置文件
#去掉下面内容的注释
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径
service sshd restart #重启ssh服务。重启后可以从master测试ssh访问slave
rm /root/id_rsa.pub #删除文件
2.4 Slave到Master免密码登录
Slave操作
两个slave分别执行下面操作
ssh-keygen -t rsa -P ''
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
scp /root/.ssh/id_rsa.pub root@Master:/root/
Master操作
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm /root/id_rsa.pub
2.5 配置时间同步服务
Master操作
yum install ntp #安装ntp服务
设置向192.168.8.0/24的机器提供时间服务。修改 /etc/ntp.conf,加入下面内容
restrict 192.168.8.0 mask 255.255.255.0 nomodify notrap
restrict管控权限:
nomodify - 用户端不能更改ntp服务器的时间参数
noquery - 用户端不能使用ntpq,ntpc等命令来查询ntp服务器
notrap - 不提供trap远端登陆
systemctl start ntpd.service #启动ntp服务
systemctl enable ntpd.service #设置ntp服务开机启动
netstat -unlnp #检查ntp端口,看到123端口说明端口开启
Slave操作
修改/etc/ntp.conf,加入下面内容
server 192.168.8.185
systemctl start ntpd.service #启动ntp服务
systemctl enable ntpd.service #设置ntp服务开机启动
2.6 修改/etc/profile
vi /etc/profile #三台设备都需要修改
#增加如下内容
export JAVA_HOME=/opt/jdk1.8
export SCALA_HOME=/usr/share/scala
export SPARK_HOME=/opt/spark2.4
export ZK_HOME=/opt/zookeeper3.4
export HBASE_HOME=/opt/hbase2.1
export HADOOP_HOME=/opt/hadoop2.7
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”
export PATH=$JAVA_HOME/bin:$SCALA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SPARK_HOME/bin:$ZK_HOME/bin:$HBASE_HOME/bin:$PATH
source /etc/profile #使修改的文件生效
三、配置集群
3.1 Hadoop集群
- 修改$HADOOP_HOME/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/opt/jdk1.8
- 修改$HADOOP_HOME/etc/hadoop/slaves
#去掉localhost ,增加下面内容
Slave1
Slave2
- 修改$HADOOP_HOME/etc/hadoop/core-site.xml
<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/hadoop2.7/tmp</value>
</property>
</configuration>
- 修改$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/hadoop2.7/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop2.7/hdfs/data</value>
</property>
</configuration>
- 修改$HADOOP_HOME/etc/hadoop/mapred-site.xml
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>
- 修改$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>
在Slave1和Slave2上做同样的修改,或者直接将hadoop2.7文件夹拷贝过去
3.2 Spark集群
- 修改$SPARK_HOME/conf/spark-env.sh
cp spark-env.sh.template spark-env.sh
#增加以下内容
export JAVA_HOME=/opt/jdk1.8
export SCALA_HOME=/usr/share/scala
export HADOOP_HOME=/opt/hadoop2.7
export HADOOP_CONF_DIR=/opt/hadoop2.7/etc/hadoop
export SPARK_MASTER_IP=192.168.8.185
export SPARK_MASTER_HOST=192.168.8.185
export SPARK_LOCAL_IP=192.168.8.185 #此处是本设备地址,三台机器不一样
export SPARK_WORKER_MEMORY=1g
export SPARK_WORKER_CORES=2
export SPARK_HOME=/opt/spark2.4
export SPARK_DIST_CLASSPATH=$(/opt/hadoop2.7/bin/hadoop classpath)
- 修改$SPARK_HOME/conf/slaves
cp slaves.template slaves
#删除localhost,增加以下内容
Slave1
Slave2
在Slave1和Slave2上做同样的修改,或者直接将spark2.4文件夹拷贝过去(注意修改不一样的内容)
3.3 Zookeepr集群
- 创建文件夹和文件
mkdir /opt/zookeeper3.4/data
mkdir /opt/zookeeper3.4/dataLog
cd /opt/zookeeper3.4/data
touch myid #创建文件
vi myid #文件内容:Master、Slave1、Slave2分别设置为1、2、3
- 修改$ZK_HOME/conf/zoo.cfg,加入如下内容
dataDir=/opt/zookeeper3.4/data
dataLogDir=/opt/zookeeper3.4/dataLog
server.1=Master:2888:3888
server.2=Slave1:2888:3888
server.3=Slave2:2888:3888
注意这里的.1.2.3要和myid文件中的数字对应上
3.4 HBase集群
- 修改$HBASE_HOME/conf/hbase-env.sh,加入如下内容
export JAVA_HOME=/opt/jdk1.8
export HADOOP_HOME=/opt/hadoop2.7
export HBASE_HOME=/opt/hbase2.1
export HBASE_CLASSPATH=/opt/hadoop2.7/etc/hadoop
export HBASE_PID_DIR=/opt/hbase2.1/pids
export HBASE_MANAGES_ZK=false
- 修改$HBASE_HOME/conf/regionservers,加入如下内容
#删除localhost,增加以下内容
Slave1
Slave2
- 修改$HBASE_HOME/conf/hbase-site.xml,加入如下内容
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://Master:9000/hbase</value>
</property>
<!-- hbase端口 -->
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<!-- 超时时间 -->
<property>
<name>zookeeper.session.timeout</name>
<value>120000</value>
</property>
<!--防止服务器时间不同步出错 -->
<property>
<name>hbase.master.maxclockskew</name>
<value>150000</value>
</property>
<!-- 集群主机配置 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>Master,Slave1,Slave2</value>
</property>
<!-- 路径存放 -->
<property>
<name>hbase.tmp.dir</name>
<value>/root/hbase/tmp</value>
</property>
<!-- true表示分布式 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 指定master -->
<property>
<name>hbase.master</name>
<value>Master:60000</value>
</property>
</configuration>
四、启动和验证集群
在master节点上启动或者停止服务
hadoop namenode -format #hadoop格式化操作
/opt/hadoop2.7/sbin/start-all.sh #启动hadoop
/opt/spark2.4/sbin/start-all.sh #启动spark
zkServer.sh start #启动zookeeper服务,需要在每个节点上执行
zkServer.sh status #查看运行状态
start-hbase.sh #启动hbase
在master上用jps查看状态,内容如下
Master #spark
ResourceManager #hadoop
NameNode #hadoop
SecondaryNameNode #hadoop
QuorumPeerMain #zookeeper
HMaster #HBase
在slave上用jps查看状态,内容如下
DataNode
Worker
QuorumPeerMain
NodeManager
HRegionServer
访问地址:
服务 | 地址 |
---|---|
Hadoop | http://192.168.8.185:8088/ |
Spark | http://192.168.8.185:8080/ |
spark-shell | http://192.168.8.185:4040/ |
HDFS | http://192.168.8.185:50070/ |
HBase | http://192.168.8.185:16010/ |
异常处理:
1、Hadoop的Datanode启动后消失:原因是hadoop格式化后再次进行格式化,master的clusterId更新,但是更新不会自动同步到slave,导致不一致。按照master的clusterId修改slave的clusterId,保持一致即可。
2、HBase启动后消失,日志报错没有到主机的路由。最后发现竟然是重启之后,防火墙又启动了。关闭防火墙hbase正常
3、提交job: spark-submit --master yarn --deploy-mode client --class com.HBaseShow /opt/What.jar
4、Spark打包的时候,jar只带本身的包
5、虚拟内存溢出问题,在yarn-site.xml增加下面内容
yarn.nodemanager.vmem-pmem-ratio
2.5
6、遇到jar包找不到的时候,可以做下面两件事:
1)拷贝 hbaes2.1/lib下的所有文件到hadoop2.7/share/hadoop/common/lib
2)拷贝 hbase2.1/lib/client-facing-thirdparty/htrace-core4-4.2.0-incubating.jar 到 spark2.4/jars