操作系统:Cent OS 7.2
应用软件:软件可以到官网去下,也可以使用本站提供的地址
Spark 2.4.0: http://www.gaoq.vip/download/spark-2.4.0-bin-hadoop2.7.tgz
Hadoop 2.7.7:http://www.gaoq.vip/download/hadoop-2.7.7.tar.gz
JDK 1.8:http://www.gaoq.vip/download/jdk-8u201-linux-x64.tar.gz
Scala 2.11.12:http://www.gaoq.vip/download/scala-2.11.12.rpm
本次部署使用三个节点:
机器名 | 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
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]
systemctl stop firewalld.service //关闭防火墙服务
systemctl disable firewalld.service //禁止防火墙服务开机启动
vi /etc/sysconfig/selinux #将SELINUX属性修改为disabled,关闭SELINUX
source /etc/sysconfig/selinux
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 #删除文件
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
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服务开机启动
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 #使修改的文件生效
export JAVA_HOME=/opt/jdk1.8
#去掉localhost ,增加下面内容
Slave1
Slave2
fs.defaultFS
hdfs://Master:9000
io.file.buffer.size
131072
hadoop.tmp.dir
/opt/hadoop2.7/tmp
dfs.namenode.secondary.http-address
Master:50090
dfs.replication
2
dfs.namenode.name.dir
file:/opt/hadoop2.7/hdfs/name
dfs.datanode.data.dir
file:/opt/hadoop2.7/hdfs/data
cp mapred-site.xml.template mapred-site.xml
mapreduce.framework.name
yarn
mapreduce.jobhistory.address
Master:10020
mapreduce.jobhistory.address
Master:19888
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.address
Master:8032
yarn.resourcemanager.scheduler.address
Master:8030
yarn.resourcemanager.resource-tracker.address
Master:8031
yarn.resourcemanager.admin.address
Master:8033
yarn.resourcemanager.webapp.address
Master:8088
在Slave1和Slave2上做同样的修改,或者直接将hadoop2.7文件夹拷贝过去
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)
cp slaves.template slaves
#删除localhost,增加以下内容
Slave1
Slave2
在Slave1和Slave2上做同样的修改,或者直接将spark2.4文件夹拷贝过去(注意修改不一样的内容)
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
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文件中的数字对应上
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
#删除localhost,增加以下内容
Slave1
Slave2
hbase.rootdir
hdfs://Master:9000/hbase
hbase.zookeeper.property.clientPort
2181
zookeeper.session.timeout
120000
hbase.master.maxclockskew
150000
hbase.zookeeper.quorum
Master,Slave1,Slave2
hbase.tmp.dir
/root/hbase/tmp
hbase.cluster.distributed
true
hbase.master
Master:60000
在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