环境搭建及接口调用
一、基础环境搭建
1.节点基础网络配置
- 硬件上使集群中的各个节点处于同一局域网内。
- 设置各个节点中的网卡自动连接到网络。
- 编辑
/etc/sysconfig/network-scripts/ifcfg-eth0
。 - 设置
ONBOOT=yes
。 - 保存退出。
- 编辑
- 设置每台节点的 hostname 为不同名称。
spark1
spark2
spark3 - 根据实际网络环境,为每台节点设置固定的IP地址。
spark1 192.168.1.5
spark2 192.168.16
spark3 192.168.1.7
子网掩码 255.255.255.0
网关地址 192.168.1.1 - 在每台节点的
/etc/hosts
文件中添加解析。
192.168.88.51 spark1
192.168.88.52 spark2
192.168.88.53 spark3 - 关闭每台节点的防火墙
sudo service iptables stop
sudo chkconfig iptables off - 检查节点之间是否可以互相 ping 通。
例如在 spark1 节点上:
ping spark2
ping spark3
2.配置 SSH 免密码登录
- 保证每台节点中的用户名相同(例如都为
spark
)。如果没有,则创建。
不要直接使用 root 用户。请为集群单独创建用户。 - 将用户添加至 sudoer 列表
切换到 root 用户(su -
)
使用visudo
命令,添加 spark 用户到 sudoer 列表。
在 root 用户之后添加(请根据实际情况赋予权限)
root ALL=(ALL) ALL
spark ALL=(ALL) NOPASSWD:ALL - 配置 SSH
a.编辑/etc/ssh/sshd-config
文件(注意权限)。
去除以下选项前的注释符#
,使选项生效。
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
b.修改完成后,重启 sshd 服务:sudo service sshd restart
。
c.在/home/spark/.ssh
目录下生成公钥、私钥:ssh_keygen
。
d.将每个节点的id_rsa.pub
文件互相发送至其他节点(scp
命令)。
e.对于每一个节点,将所有的公钥写入authorized_keys
文件(例如cat id_rsa.pub >> authorized_keys
)。
f.修改目录和文件权限。
chomd 700 .ssh
chomd 600 .ssh/authorized_keys - 如有必要,配置内网 NTP 时间同步服务并同步时间。
3.安装 JDK、Scala
- 下载 JDK 。例如
jdk1.8.0_121.tar.gz
。 - 解压到
/opt
目录下并设置目录权限。 - 配置环境变量。
sudo vim /etc/profile
。- 在文件中添加:
export JAVA_HOME=/opt/jdk1.8.0_121
export PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH
export CLASSPATH=.: J A V A H O M E / l i b / d t . j a r : JAVA_HOME/lib/dt.jar: JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
- 配置完成后应使用
source /etc/profile
使其生效,并使用java -version
命令检查安装是否成功。 - 下载 Scala 。例如
scala-2-10-6.tgz
。 - 解压到
/opt
目录下并设置目录权限。 - 配置环境变量。
sudo vim /etc/profile
。- 在文件中添加:
export SCALA_HOME=/opt/scala-2.10.6
export PATH= P A T H : PATH: PATH:SCALA_HOME/bin
- 配置完成后应使用
source /etc/profile
使其生效,并使用scala
命令检查安装是否成功。
4.配置完全分布式的 Hadoop
- 下载 Hadoop 。例如
hadoop-2.6.5.tar.gz
、解压到/opt
目录下并设置目录权限。 - 配置环境变量。
sudo vim /etc/profile
- 在文件中添加:
export HADOOP_HOME=/opt/hadoop-2.6.5
export PATH= P A T H : PATH: PATH:HADOOP_HOME/bin:$HADOOP_HOME/sbin
- 更改配置文件(位于
/opt/hadoop-2.6.5/etc/hadoop
目录)。-
hadoop-env.sh
找到并修改:export JAVA_HOME=/opt/jdk1.8.0_121
。 -
core-site.xml
找到并修改:<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://spark1:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/home/spark/hadoop-2.6.5/tmp</value> <description>Abase for ohr temporary directories.</description> </property> </configuration>
请注意记录,此处的HDFS端口号为
9000
。 -
hdfs-site.xml
找到并修改:<configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>spark1:50090</value> </property> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/spark/hadoop-2.6.5/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/spark/hadoop-2.6.5/data</value> </property> </configuration>
请根据实际情况修改
dfs.replication
的值(默认为 3 )。 -
mapred-site.xml
找到并修改:<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>spark1:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>spark1:19888</value> </property> </configuration>
-
yarn-site.xml
找到并修改:<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>spark1</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
添加:
spark2
spark3 -
- 将 Hadoop 整个目录复制到 spark2 和 spark3 节点(scp 命令,scp 当前系统的文件路径 用户名@地址:目标主机的存放文件的路径)。
- 启动 Hadoop 的步骤
a.(仅首次启动前执行)**格式化 NameNode :hadoop namenode -format
。
b.启动 HDFS 文件系统服务:start-dfs.sh
。
c.启动 YARN:start-yarn.sh
。
d.使用jps
命令查看相关进程是否启动。
spark1:
NameNode
SecondaryNameNode
ResourceManager
spark2 和 spark3:
DataNode
NodeManager
如果上述进程未能全部启动,可以按照以下步骤排查:
使用 stop-yarn.sh
和 stop-dfs.sh
关闭所有服务。
检查 spark 用户是否拥有相关目录的权限。
尝试清空 core-site.xml 配置文件中的 hadoop.tmp.dir
配置项所指向的目录。
6. 新增hadoop集群节点或者恢复节点
在新增的节点或者恢复的节点上,启动datanode以及nodemanager,操作如下。
hadoop-daemon.sh start datanode
yarn-daemon.sh start nodemanager
yarn rmadmin -refreshNodes
hdfs dfsadmin -refreshNodes
查看状态
hdfs dfsadmin -report
7. 设置带宽,配置均衡器balancer,一般不在主节点上运行,以避免影响业务,可以有专门的balancer节点
hdfs dfsadmin -setBalancerBandwidth 1048576
如果某个datanode的磁盘里用率比平均水平高出5%,Blocks向其他低于平均水平的 datanode中传送
start-balancer.sh -threshold 5
8. 关闭 Hadoop 的步骤
依次输入 stop-yarn.sh
和 stop-dfs.sh
即可。
注意:每次关闭系统之前必须执行该步骤。
5.配置完全分布式的 HBase
- 下载 HBase ,例如
hbase-1.2.5.tar.gz
、解压到/opt
目录并设置目录权限。 - 编辑
habse-env.sh
(位于/opt/hbase-1.2.5/conf
目录,下同)。
找到或添加export JAVA_HOME=/opt/jdk1.8.0_121
- 编辑
habse-site.xml
。
找到并修改:<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://spark1:9000/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>spark1,spark2,spark3</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/home/spark/zookeeper</value> </property> </configuration>
注意
hbase.rootdir
中的 HDFS 端口号为 9000 。 - 编辑
reginserver
。
删除原有的localhost
,添加:
spark2
spark3 - 新建 backup-masters 文件,添加:
spark2 - 启动 HBase 的步骤
执行start-hbase.sh
。
使用jps
命令检查相关进程是否已经启动。
spark1:- HMaster
- HQuorumPeer
spark2: - HMaster
- HQuorumPeer
- HRegionServer
spark3: - HQuorumPeer
- HRegionServer
当存在节点宕机时或者新增集群节点,使用如下操作加入集群节点
在要加入的节点上执行以下命令
hbase-daemon.sh start regionserver
进入HBase Shell,设置开启负载均衡
balance_switch true
- 关闭 HBase 的步骤
执行stop-hbase.sh
即可。
注意:每次关闭系统之前必须执行该步骤。
6.配置 StandAlone 模式的 Spark
- 配置 Spark
下载 Spark 。例如spark-1.6.1-bin-hadoop2.6.tgz
。
解压至/opt
目录并设置目录权限。
复制spark-env.sh.template 为 spark-env.sh 文件(位于/opt/spark-1.6.1-bin-hadoop2.6/conf
目录,下同)。在 spark-env.sh 文件中添加以下配 置项:
export SCALA_HOME=/opt/scala-2.10.6
export JAVA_HOME=/opt/jdk1.8.0_121
export SPARK_MASTER_IP=192.168.88.51
export SPARK_WORKER_INSTANCE=2
export SPARK_MASTER_PORT=8070
export SPARK_MASTER_WEBUI_PORT=8090
export SPARK_WORKER_PORT=8092
export SPARK_WORKER_MEMORY=3072m
复制 slaves.template 为 slaves 文件。在 slaves 文件中添加以下配置项:
spark2 #192.168.88.52
spark3 #192.168.88.53 - 启动 Spark 服务
依次执行start-master.sh
和start-slaves.sh
。
执行jps
命令查看相关进程是否已经启动。
spark1:- Master
spark2 和 spark3 : - Worker
- Master
- 关闭 Spark 服务
依次执行stop-slaves.sh
和stop-master.sh
即可。
7.安装和配置 MySQL
- 安装 MySQL
下载 MySQL 的 yum 仓库文件。
cd ~/Downloads
wget https://dev.mysql.com/get/mysql57-community-release-el6-10.noarch.rpm
安装 MySQL yum 源。
sudo rpm -Uvh mysql57-community-release-el6-7.noarch.rpm
安装 MySQL Server。
sudo yum install mysql-community-server
安装完成后,测试启动 MySQL 服务。
sudo service mysqld start - 配置 MySQL 数据库
停止 MySQL 数据库服务。
sudo service mysqld stop
或使用/etc/init.d/mysqld stop
命令。
使用安全模式启动 MySQL 服务,并继续监控其运行情况。
audo mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
使用 root 用户登录 MySQL 数据库。
mysql -u root mysql
更新 root 用户密码。
mysql> UPDATE user SET authentication_string=PASSWORD(‘newpassword’) where USER=‘root’;
重要:请牢记此处的 newpassword (根据实际情况修改,例如 root )。
在 5.7 之前的版本中,请使用mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';
刷新权限。
mysql> FLUSH PRIVILEGES;
退出 MySQL 。
mysql> quit
重启 MySQL 服务。
sudo service mysqld restart
或使用/etc/init.d/mysqld restart
命令。
使用 root 用户重新登录 MySQL 。
mysql -u root -p
Enter password: <输入新设的密码newpassword>
开放 3306 端口访问权限。
mysql> USE mysql;
mysql> SELECT host,user FROM user;
mysql> UPDATE user SET host = ‘%’ WHERE user =‘root’;
mysql> SELECT host,user FROM user;
mysql> FLUSH PRIVILEGES;
mysql> QUIT;
退出后重启 MySQL 服务。
sudo service mysqld restart
使用netstat -an|grep 3306
命令检查该端口是否开放。如果看到:
tcp 0 0 :::3306 ::? LISTEN
则说明 3306 开放端口成功。
8.Hbase操作
- 进入shell界面
hbase shell - 查看表的结构
describe ‘test1’(表名) - 创建表
create ‘表名’, ‘列族’ ,create ‘表名’,{NAME=>‘列族1’,VERSIONS=>‘1(数值,表示数据存储的份数,如果为1,则插入同一条数据会覆盖原来的数据)’,REPLICATION_SCOPE=>‘0(表示不开启主从节点复制,1表示开启主从节点复制)’},{NAME=>‘列族2’,VERSIONS=>‘1(数值,表示数据存储的份数,如果为1,则插入同一条数据会覆盖原来的数据)’,REPLICATION_SCOPE=>‘0(表示不开启主从节点复制,1表示开启主从节点复制)’}
create ‘WPRMonitor’,{NAME=>‘Info’,VERSIONS=>‘3’}
create ‘WQMonitor’,{NAME=>‘Info’,VERSIONS=>‘3’}
create ‘WRMonitor’,{NAME=>‘Info’,VERSIONS=>‘3’}
create ‘WPMonitor’,{NAME=>‘Info’,VERSIONS=>‘3’}
create ‘WBMonitor’,{NAME=>‘Info’,VERSIONS=>‘3’}
create ‘WAMonitor’,{NAME=>‘Info’,VERSIONS=>‘3’} - 查看表数据
list ‘表名’ - 扫描表
scan ‘表名’ - 查看一行记录
get ‘表名’,‘行号’ - 禁用表
disable ‘表名’ - 删除表
drop ‘表名’ - 启用表
enable ‘表名’ - 计算行数
count ‘表名’,CACHE=>1000 hbase org.apache.hadoop.hbase.mapreduce.RowCounter ’
二、存储接口设计及使用说明
1.存储接口设计
- 存储接口都是基于HTTP请求的,客户端通过发送HTTP请求,提供标准的json格式,即可插入对应的数据。
- 在Hbase表中,【WQ】表用于存储所有来自type字段参数为‘wq’的所有数据。
由于查询结果的需求,另外创建两张表:
【wq_parameter_b】参数属性表:用于存放参数对应的属性值(参数名,化学式,参数 上下限值,参数单位等),存储的数据时候查询参数属性表,将查询所需信息读取并保 存到对应的数据表中;
【wq_stationdeviceparmeter_b】设备站点参数映射表:用于存放设备、站点、参数三者 的对应关系结构,查询时通过设备站点参数映射表找出参数id对应的站点、设备。 - 目前hbase连接用的是连接池,具体连接池大小在conf.property文件,其余相关配置也在resource文件夹下。
2.存储数据请求标准json格式
存储接口的json标准格式如下:
(以WQ表为例)
[
{
"status":"success",
"station":"",
"dbSource":"510100",
"type":"wq",
"pdate":"",
"data":{
"ID":"string",
"STCD":"string",
"DEVID":"int",
"PARID":"int",
"SPT":"datetime",
"MTDA":"double",
"NT":"string"
},
"crc":"",
}
]
3.存储接口调用
- 存储接口搭建在本地服务器,调用接口:http://192.168.1.6:9003/storeByLine/
(以WQ表为例) - 发送Post请求示例:
{
“status”:“success”,
“station”:"",
“dbSource”:“510100”,
“type”:“wq”,
“pdate”:"",
“data”:{
“ID”:"",
“STCD”:“5164”,
“DEVID”:“516”,
“PARID”:“100”,
“SPT”:“2023-07-07 04:19:34”,
“MTDA”:“1”,
“NT”:""
},
“crc”:""
}
返回结果:
4.存储返回状态码
存储返回状态码如下所示,存储到hbase数据库的状态:
{”code”:”1”}:存储成功,
{”code”:”2”}:字符串不符合JSON格式或者解析失败,
{”code”:”3”}:不包含token字段,
{”code”:”5”}:为该条数据重复了,
{”code”:”6”}:不包含type字段以及为空、不符合INIT_DB要求,
{”code”:”7”}:字符串字段没有对应或者值类型不对,
{”code”:”8”}:RowKey生成失败,
{”code”:”9”}:监测数据存储hbase失败。
5.参数属性表、设备站点参数射表
-
由于hbase本身不具有修改操作,所以用到的修改实际上是删除后重新插入
-
【wq_parameter_b】参数属性表插入接口:
http://192.168.1.6:9003/storeParam/
-
wq_parameter_b、wq_stationdeviceparmeter_b 删除接口
http://192.168.1.6:9003/delete
三、查询接口设计及使用说明
此节省略。。。。。。。。。