第一节、配置网络IP地址:
打开配置文件vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.206.10
NETMASK=255.255.255.0
GATEWAY=192.168.206.2
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=c5660370-0b73-429d-9357-38e440777d7f
DEVICE=ens33
ONBOOT=yes
网络重启:service network restart
测试是否连通:使用ping 192.168.206.2
第二节、配置jdk和hadoop的环境:
说明:apps放置解压文件,software放置压缩文件。
cd /opt/
1、创建两个文件夹
mkdir apps
mkdir software
cd software/
2、解压到指定的/opt/apps下
tar zxvf jre-8u251-linux-x64.tar.gz -C /opt/apps/
tar zxvf hadoop-2.7.4.tar.gz -C /opt/apps/
tar zxvf zookeeper-3.4.5.tar.gz -C /opt/apps/
3、更改文件名
cd /opt/apps/
mv jre1.8.0_251/ jdk
mv hadoop-2.7.4/ hadoop
mv zookeeper-3.4.5/ zookeeper
4、设置环境变量
vi /etc/profile
添加配置
export JAVA_HOME=/opt/apps/jdk
export HADOOP_HOME=/opt/apps/hadoop
ZOOKEEPER_HOME=/opt/apps/zookeeper
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH:$ZOOKEEPER_HOME/bin
source /etc/profile
5、查看版本是否生效
java -version
hadoop version
6、将解压数据和环境变量发送给其他主机:
scp -r /opt/apps root@master2:/opt/
scp -r /opt/apps root@slave1:/opt/
scp -r /opt/apps root@slave2:/opt/
scp -r /etc/profile root@master2:/etc/
scp -r /etc/profile root@slave1:/etc/
scp -r /etc/profile root@slave2:/etc/
每个节点让环境变量生效:source /etc/profile
7、配置域名解析信息:
vi /etc/hosts 192.168.206.10 master 192.168.206.11 master2 192.168.206.12 slave1 192.168.206.13 slave2
8、使用rsa加密技术,生成公钥和私钥。一路回车即可
root@master ~]# cd ~
[root@master ~]# ssh-keygen -t rsa
进入~/.ssh目录下,将id_rsa.pub复制一份文件,文件名为authorized_keys。保证此文件的权限是600
[root@master ~]# cd ~/.ssh
[root@master .ssh]# ssh-copy-id -i id_rsa.pub root@master
[root@master .ssh]# ssh-copy-id -i id_rsa.pub root@master2
[root@master .ssh]# ssh-copy-id -i id_rsa.pub root@slave1
[root@master .ssh]# ssh-copy-id -i id_rsa.pub root@slave2
进行验证
ssh master
ssh slave1
ssh slave2
第三节、配置zookeeper环境
1、基础环境准备
1. 将zookeeper-3.4.5.tar.gz上传到/opt/software中
2. 解压
[root@master software]# tar -zxvf zookeeper-3.4.5.tar.gz -C /opt/apps/
3. 更名zookeeper
[root@master software]# cd ../apps/
[root@master apps]# mv zookeeper-3.4.5 zookeeper
4. 配置环境变量
[root@master apps]# vi /etc/profile
.........省略......
export ZOOKEEPER_HOME=/opt/apps/zookeeper
export PATH=$ZOOKEEPER_HOME/bin:$PATH
5. 使当前会话生效
[root@master apps]# source /etc/profile
6. 查看zookeeper的版本号
[root@master apps]# echo stat|nc localhost 2181
2、复制出一个zoo.cfg文件
[root@master zookeeper]# cd conf/ #进入zookeeper的conf目录
[root@master conf]# cp zoo_sample.cfg zoo.cfg #复制出zoo.cfg文件
3、修改zoo.cfg文件
[root@master conf]# vi zoo.cfg
tickTime=2000 # 定义的时间单元(单位毫秒),下面的两个值都是tickTime的倍数。
initLimit=10 #follower连接并同步leader的初始化连接时间。
syncLimit=5 #心跳机制的时间(正常情况下的请求和应答的时间)
dataDir=/opt/apps/zookeeper/data/ #修改zookeeper的存储路径
dataLogDir=/opt/apps/zookeeper/log/ #修改zookeeper的日志存储路径
server.1=master2:2888:3888 #对应服务器id
server.2=slave1:2888:3888 #对应服务器id
server.3=slave2:2888:3888 #对应服务器id
clientPort=2181 #客户端连接服务器的port
4、创建两个文件
mkdir /opt/apps/zookeeper/data/
mkdir /opt/apps/zookeeper/log/
开启zookeeper:
zkServer.sh start开启三个节点
验证zookeeper:
zkServer.sh status 验证状态 分别是leader或者follower
第四节、HA的配置总结
1、 环境准备:
1. 三台虚拟机:master,slave1,slave2
2. 保证三台机器的防火墙都是关闭状态
3. 保证三台机器的免密登陆认证
4. 保证三台机器的时间同步
5. 保证三台机器的/etc/hosts文件的域名映射关系配置
6. 保证三台机器安装了jdk和hadoop,并且配置了环境变量且命令好使
说明:如果上述环境都准备好了,那么就修改hadoop的7个文件,参考如下:
2、hadoop/etc/hadoop/core-site.xml
<configuration>
<!-- 指定hdfs的ha的域名,注意这个是hdfs-site.xml文件里配置的逻辑名称 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://supercluster</value>
</property>
<!-- 指定hdfs的数据存储位置,此路径一旦指定,会被其他属性使用和依赖-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/apps/hadoop/tmp</value>
</property>
<!-- 指定journalnode的数据存储位置-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/apps/hadoop/tmp</value>
</property>
<!-- 指定zookeeper集群的服务器节点,如果没有搭建zookeeper,请参考zookeeper知识模块-->
<property>
<name>ha.zookeeper.quorum</name>
<value>master2:2181,slave1:2181,slave2:2181</value>
</property>
</configuration>
3、hadoop/etc/hadoop/hdfs-site.xml
<configuration>
<!-- 指定块文件的复本个数-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定块文件的大小-->
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
<!-- 节点动态上下线的配置
<property>
<name>dfs.hosts</name>
<value>/opt/apps/hadoop/etc/hadoop/include</value>
</property>
<property>
<name>dfs.hosts.exclude</name>
<value>/opt/apps/hadoop/etc/hadoop/exclude</value>
</property>
-->
<!-- 指定ha的名称服务:即逻辑名称-->
<property>
<name>dfs.nameservices</name>
<value>supercluster</value>
</property>
<!-- 指定ha的两个namenode的唯一标识符-->
<property>
<name>dfs.ha.namenodes.supercluster</name>
<value>nn1,nn2</value>
</property>
<!-- 指定两个唯一标识符,对应的主机和端口号-->
<property>
<name>dfs.namenode.rpc-address.supercluster.nn1</name>
<value>master:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.supercluster.nn2</name>
<value>master2:8020</value>
</property>
<!-- 指定两个唯一标识符,对应的web地址的主机和端口号-->
<property>
<name>dfs.namenode.http-address.supercluster.nn1</name>
<value>master:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.supercluster.nn2</name>
<value>master2:50070</value>
</property>
<!-- 指定journalnode集群的服务器ip、port和存储目录-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master2:8485;slave1:8485;slave2:8485/journalData</value>
</property>
<!-- 指定客户端联系Active节点的java类-->
<property>
<name>dfs.client.failover.proxy.provider.supercluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 指定防止脑裂的防护机制,注意centos 7很可能会因为少一些内置命令而失效-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 指定防火机制进行免密登陆的私钥-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- 指定防火机制进行免密登陆的超时时间,可选配置-->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<!-- start automatic-failover -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
4、hadoop/etc/hadoop/mapred-site.mxl
<configuration>
<!-- 配置执行mr的框架名称 -->
<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.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
5、hadoop/etc/hadoop/yarn-site.xml
<configuration>
<!-- 指定yarn的shuffle技术 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定resourcemanager的主机名 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
</configuration>
6、hadoop/etc/hadoop/hadoop-env.sh
[root@master hadoop]# vi hadoop-env.sh
................
# The java implementation to use.
export JAVA_HOME=/opt/apps/jdk #指定你的jdk路径
..................
7、hadoop/etc/hadoop/slaves
[root@master hadoop]# vi slaves
# 指定三台datanode节点
master
slave1
slave2
8、hadoop/etc/hadoop/yarn-env.sh
[root@master hadoop]# vi yarn-env.sh
........省略........
# some Java parameters
export JAVA_HOME=/opt/apps/jdk
........省略........
启动三个节点上的journalnode服务
[root@master ~]# hadoop-daemon.sh start journalnode
[root@slave1 ~]# hadoop-daemon.sh start journalnode
[root@slave2 ~]# hadoop-daemon.sh start journalnode
9、格式化namenode,启动集群
1、 先删除所有节点的${hadoop.tmp.dir}/tmp/的数据(可选,这一步表示弃用fsimage.)
2、选择master2节点namenode进行格式化(正常启动后只做一次格式化)
[root@master2 ~]# hdfs namenode -format
3、并启动namenode进程
[root@master2 ~]# hadoop-daemon.sh start namenode
在另一台namenode上拉取已格式化的那台机器的镜像文件(数据的一致性)
[root@master ~]# hdfs namenode -bootstrapStandby
然后关闭已经启动的namenode
[root@master2 ~]# hadoop-daemon.sh stop namenode
格式化zkfc
1、前提QuorumPeerMain服务必须处于开启状态,客户端zkfc才能格式化成功
[root@master2 ~]# zkServer.sh start
[root@slave1 ~]# zkServer.sh start
[root@slave2 ~]# zkServer.sh start
2、选择其中一个namenode节点进行格式化zkfc
[root@master2 ~]# hdfs zkfc -formatZK
你就可以快乐的开启HA集群进行测试了
[root@master2 ~]# start-all.sh
注意:以后开HA集群时,要先开zookeeper服务,再开HDFS。
第五节、Hive安装之mysql安装:
1、环境配置
检测系统是否自带Mysql
rpm -qa|grep mysql
如果有进行强行卸载
rpm -e --nodeps .........
检测系统是否自带mariadb
rpm -qa|grep mariadb
rpm -e --nodeps mariadb-libs-5.5.64-1.el7.x86_64
rpm -e --nodeps mariadb-5.5.64-1.el7.x86_64
rpm -e --nodeps mariadb-server-5.5.64-1.el7.x86_64
根据不同的版本号卸载
用连接工具将下载的mysql-5.7.21-el7-x86_64.tar.gz上传到linux服务器/data/software/的目录下面
2、安装
1、进入/data/software/目录下解压
tar -zxvf mysql-5.7.21-el7-x86_64.tar.gz
2、解压完成后重命名
mv mysql-5.7.21-el7-x86_64 mysql-5.7.21
mv mysql-5.7.21 /usr/local/
3、检查mysql组和用户是否存在,如果没有则创建
cat /etc/group|grep mysql
groupadd mysql
useradd -r -g mysql mysql #useradd -r参数表示mysql用户是系统用户,不可用于登录系统
3、安装数据库
a、创建data目录
cd /usr/local/mysql-5.7.21
mkdir data
b、 将/usr/local/mysql-5.7.28的所有者及所属组改为mysql
chown -R mysql.mysql /usr/local/mysql-5.7.21
c、 在/usr/local/mysql-5.7.28/support-files目录下创建my_default.cnf
vim my_default.cnf
[mysqld]
#设置mysql的安装目录
basedir =/usr/local/mysql-5.7.21
#设置mysql数据库的数据存放目录
datadir = /usr/local/mysql-5.7.21/data
#设置端口
port = 3306
socket = /tmp/mysql.sock
#设置字符集
character-set-server=latin1
#日志存放目录
log-error = /usr/local/mysql-5.7.21/data/mysqld.log
pid-file = /usr/local/mysql-5.7.21/data/mysqld.pid
d、拷贝,是否覆盖,是
cp my_default.cnf /etc/my.cnf
e、初始化Mysql
cd mysql-5.7.21
./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql-5.7.21/ --datadir=/usr/local/mysql-5.7.21/data/
如果报错:./bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or 就安装libaio,如果没有则跳过
yum install libaio
初始化完成之后查看日志
cat /usr/local/mysql-5.7.21/data/mysqld.log,蓝框里的是临时密码需要记下来,下次登陆mysql需要用到W<xPiraUC0IS
把启动脚本放到开机初始化目录
cp support-files/mysql.server /etc/init.d/mysql

f、启动mysql
service mysql start
进入mysql并更改密码
cd /usr/local/mysql-5.7.21
./bin/mysql -u root -p
mysql> set password=password('123456');
mysql> grant all privileges on *.* to root@'%' identified by '123456';
mysql> flush privileges;
g、添加远程访问权限
mysql> use mysql;
mysql> update user set host='%' where user = 'root';
mysql> flush privileges;
如果更改时报错:ERROR 1062 (23000): Duplicate entry ‘%-root’ for key ‘PRIMARY’,就先查询一下是否已更改,最后执行刷新。
查询命令:select host,user from user where user=‘root’;
查看一下host是否已经有了%这个值,有了就可以了.
重启mysql生效
service mysql restart
第六节:hive的安装部署
准备环境:
- jdk1.8
- hadoop-2.7.6
- hive-2.3.4
- mysql-5.7.21
1、搭建步骤
**步骤1)**安装hive,配置环境变量
1. 将hive安装包上传到/opt/software/,进行解压
[hadoop@master software]$ tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/apps/
2. 创建一个软连接
[hadoop@master apps]$ ln -s apache-hive-2.3.4-bin/ hive
3. 配置环境变量
[hadoop@master apps]$ vi /etc/profile
#hive environment
export HIVE_HOME=/opt/apps/hive
export PATH=$HIVE_HOME/bin:$PATH
4. 使.bash_profile生效
[hadoop@master apps]]$ source /etc/profile
**步骤2)**安装mysql环境:【上面已经配置完成】
**步骤3)**将mysql的驱动包mysql-connecter-5.1.28.bin.jar,放入hive的lib中
步骤4) 配置hive-env.sh(在hive的conf目录中)
[hadoop@master conf]$ cp hive-env.sh.template hive-env.sh
[hadoop@master conf]$ vi hive-env.sh
........省略........
export HADOOP_HOME=/opt/apps/hadoop/
export JAVA_HOME=/opt/apps/jdk/
export HIVE_CONF_DIR=/opt/apps/apache-hive-2.3.4-bin/conf
export HIVE_AUX_JARS_PATH=/opt/apps/apache-hive-2.3.4-bin
export HIVE_HOME=/opt/apps/apache-hive-2.3.4-bin
........省略........
步骤5) 配置hive-site.xml(在hive的conf目录中)
[hadoop@master conf]$ cp hive-default.xml.template hive-site.xml
[hadoop@master conf]$ vi hive-site.xml #找到相应属性修改值。或者删除所有默认配置,重新添加属性
<configuration>
<!--配置mysql的连接字符串-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true&characterEncoding=latin1</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<!--配置mysql的连接驱动-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<!--配置登录mysql的用户-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<!--配置登录mysql的密码-->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
<description>password to use against metastore database</description>
</property>
</configuration>
步骤6) 连接测试:
配置完上述属性,本地模式即完成,测试能否在mysql中创建hive元数据库。前提:集群和mysql都要先启动
[hadoop@master conf]$ schematool -initSchema -dbType mysql
Metastore Connection Driver : com.mysql.jdbc.Driver
Metastore connection User: root
Starting metastore schema initialization to 2.3.0
Initialization script hive-schema-2.3.0.mysql.sql
Initialization script completed
schemaTool completed
[hadoop@master conf]$ hive
Logging initialized using configuration in file:/opt/apps/hive2.3.4/conf/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
hive> show tables;
步骤7)HIVE的基本操作:库、表
1、说明和命名规范
hive有一个默认的数据库default,在操作HQL时,如果不明确的指定要使用哪个库,则使用默认数据库。
hive的数据库名、表名都不区分大小写
名字不能使用数字开头
不能使用关键字
尽量不使用特殊符号
库操作语法
2、创建数据库
语法1:create database mydb;
语法2:create database if not exists mydb;
语法3:create database if not exists mydb comment 'this is my database';
3、 查看所有数据库
语法:show databases;
4、切换数据库
语法:use mydb;
5、查看数据库信息
语法1:desc database databaseName;
语法2:desc database extended databaseName;
语法3:describe database extended databaseName;
6、删除数据库
语法1:drop database databasename; #这个只能删除空库
语法2:drop database databasename cascade; #如果不是空库,则可以加cascade强制删除
第七节、hbase全分布式安装
HBASE是一个分布式系统
其中有一个管理角色: HMaster(一般2台,一台active,一台backup)
其他的数据节点角色: HRegionServer(很多台,看数据容量)
实际上,您需要一个完全分布式的配置来全面测试HBase,并在实际场景中使用它。在分布式配置中,集群包含多个节点,每个节点运行一个或多个HBase守护进程。这些包括主实例和备份主实例、多个ZooKeeper节点和多个RegionServer节点。
1 角色分配&准备工作
- 角色分配
master2:hmaster
master:regionserver
slave1:regionserver
slave2:regionserver
- 准备工作
1. 安装zookeeper
2. hbase-env.sh
# 配置JDK的路径
export JAVA_HOME=/opt/apps/jdk
# 配置关闭HBASE管理zookeeper
export HBASE_MANAGES_ZK=false
2 安装
- hbase-site.xml
<configuration>
<!-- 指定hbase在HDFS上存储的路径 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:8020/hbase</value>
<description>配置hbase的数据存放在hdfs的目录</description>
</property>
<!-- 指定hbase是分布式的 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
<description>开启hbase的分布式模式</description>
</property>
<!-- 指定zk的地址,多个用“,”分割 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>master:2181,slave1:2181,slave2:2181</value>
<description>配置hbase使用真实的zookeeper的目录</description>
</property>
</configuration>
- 修改regionservers
master
slave1
slave2
- 在hbase的conf创建backup-masters的文件,并在其中添加主机名centos2
master
- 分发
[root@master2 local]# scp -r hbase-1.2.1/ master1:/usr/local/
[root@master2 local]# scp -r hbase-1.2.1/ slave1:/usr/local/
[root@master2 local]# scp -r hbase-1.2.1/ slave2:/usr/local/
- 启动hbase
1. 现启动hadoop和zookeeper
2. start-hbase.sh
- 配置环境变量(包含了:jdk/hadoop/mysql/hive/hbase/zookeeper)
export JAVA_HOME=/opt/apps/jdk
export HIVE_HOME=/opt/apps/hive2.3.4
export HADOOP_HOME=/opt/apps/hadoop
export MYSQL_HOME=/usr/local/mysql-5.7.21
export ZOOKEEPER_HOME=/opt/apps/zookeeper
export HBASE_HOME=/opt/apps/hbase
export PATH=$HBASE_HOME/bin:$MYSQL_HOME/bin:$HIVE_HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH:$ZOOKEEPER_HOME/bin
第八节、scala安装
配置环境变量即可:(如下环境变量包含了java/scala/spark/hadoop/zookeeper)
export JAVA_HOME=/opt/apps/jdk
export SCALA_HOME=/opt/apps/scala
export SPARK_HOME=/opt/apps/spark
export HADOOP_HOME=/opt/apps/hadoop
ZOOKEEPER_HOME=/opt/apps/zookeeper
export PATH=
J
A
V
A
H
O
M
E
/
b
i
n
:
JAVA_HOME/bin:
JAVAHOME/bin:HADOOP_HOME/bin:
H
A
D
O
O
P
H
O
M
E
/
s
b
i
n
:
HADOOP_HOME/sbin:
HADOOPHOME/sbin:PATH:
Z
O
O
K
E
E
P
E
R
H
O
M
E
/
b
i
n
:
ZOOKEEPER_HOME/bin:
ZOOKEEPERHOME/bin:SCALA_HOME/bin:
S
P
A
R
K
H
O
M
E
/
b
i
n
:
SPARK_HOME/bin:
SPARKHOME/bin:SPARK_HOME/sbin
第九节、spark安装
2.2 Standalone模式
集群搭建
集群组成使用了4台节点,在教学中可以根据自己的节点适当减少worker即可
基本条件:同步时间、免密登录、关闭防火墙、安装JDK1.8
1.上传安装包到hadoop01
2.将文件解压到指定的目录
tar -zxvf spark-2.2.0-bin-hadoop2.7.tgz -C /opt/software/
3.跳转到安装路径进入到conf进行配置
cd /opt/software/spark-2.2.0-bin-hadoop2.7/
cd conf/
3.1修改conf目录下的env文件
mv spark-env.sh.template spark-env.sh
vi spark-env.sh
在文件的末尾添加
export JAVA_HOME=/opt/apps/jdk
#JDK安装路径
#主节点IP(写节点名地址必须是节点 写IP地址必须是IP)
export SPARK_MASTER_PORT=7077
#主节点端口号(内部通信)
3.2修改slaves.template文件添加从节点
mv slaves.template slaves
vi slaves
内容(根据自己的节点适当删减):
master
slave1
slave2
配全局环境变量(选配好处:可以在任意位置使用bin下脚本,如spark-shell和sparkSubmit):
vi /etc/profile
export SPARK_HOME=/opt/apps/spark
source /etc/profile
配置Job History Server
在运行Spark应用程序的时候,driver会提供一个webUI给出应用程序的运行信息,但是该webUI随着应用程序的完成而关闭端口,也就是 说,Spark应用程序运行完后,将无法查看应用程序的历史记录。Spark history server就是为了应对这种情况而产生的,通过配置,Spark应用程序在运行完应用程序之后,将应用程序的运行信息写入指定目录,而Spark history server可以将这些运行信息装载并以web的方式供用户浏览。
1.确保HDFS系统启动
创建directory目录
hdfs dfs -mkdir /directory
2.进入到spark安装目录conf目录下
cd /opt/apps/spark/conf
3.将spark-default.conf.template复制为spark-default.conf
mv spark-defaults.conf.template spark-defaults.conf
vi spark-defaults.conf 在文件的末尾添加
spark.eventLog.enabled true 开启日志
spark.eventLog.dir hdfs://master:8020/directory 存储路径
spark.eventLog.compress true 是否压缩
#参数描述:
#spark.eventLog.dir:Application在运行过程中所有的信息均记录在该属性指定的路径下
#spark.eventLog.compress 这个参数设置history-server产生的日志文件是否使用压缩,true为使用,false为不使用。这个参数务可以成压缩哦,不然日志文件岁时间积累会过
ps:最好不要是用IE内核的浏览器不然效果是显示不出来的
启动的时候是
start-all.sh start-history-server.sh
Spark高可用
那就是Master节点存在单点故障,要解决此问题,就要借助zookeeper,并且启动至少两个Master节点来实现高可靠,配置方式比较简单:
Spark集群规划:master,master2是Master;master2,slave1,slave2是Worker
安装配置zk集群,并启动zk集群
停止spark所有服务,修改配置文件spark-env.sh,在该配置文件中删掉SPARK_MASTER_IP并添加如下配置
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=master2,slave1,slave2 -Dspark.deploy.zookeeper.dir=/spark"
分发到master2,slave1,slave2节点下
1.在master节点上修改slaves配置文件内容指定worker节点
ps:若是修改了slaves节点那么配置文件也发分发
2.先启动zookeeper集群
3.在master上执行sbin/start-all.sh脚本,然后在master2上执行sbin/start-master.sh启动第二个Master
ps:若使用spark-shell启动集群需要添加配置
spark-shell --master spark://master:port1,master2:7077
2.3 yarn 模式
集群搭建
1,在Hadoop配置下的yarn-site.xml文件中增加以下两项:
这两项判断是否启动一个线程检查每个任务正使用的物理内存量/虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true
如果不配置这两个选项,在spark-on-yarn的client模式下,可能会报错,导致程序被终止。
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
2,修改Spark-env.sh 添加:
HADOOP_CONF_DIR=/opt/apps/hadoop/etc/hadoop
YARN_CONF_DIR=/opt/apps/hadoop/etc/hadoop
PARK_MASTER_IP并添加如下配置
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=master2,slave1,slave2 -Dspark.deploy.zookeeper.dir=/spark"
分发到master2,slave1,slave2节点下
1.在master节点上修改slaves配置文件内容指定worker节点
ps:若是修改了slaves节点那么配置文件也发分发
2.先启动zookeeper集群
3.在master上执行sbin/start-all.sh脚本,然后在master2上执行sbin/start-master.sh启动第二个Master
ps:若使用spark-shell启动集群需要添加配置
spark-shell --master spark://master:port1,master2:7077
### 2.3 yarn 模式
#### 集群搭建
~~~xml
1,在Hadoop配置下的yarn-site.xml文件中增加以下两项:
这两项判断是否启动一个线程检查每个任务正使用的物理内存量/虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true
如果不配置这两个选项,在spark-on-yarn的client模式下,可能会报错,导致程序被终止。
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
2,修改Spark-env.sh 添加:
HADOOP_CONF_DIR=/opt/apps/hadoop/etc/hadoop
YARN_CONF_DIR=/opt/apps/hadoop/etc/hadoop
~~~