環境搭建及接口調用
- 一、基礎環境搭建
-
- 1.節點基礎網絡配置
- 2.配置 SSH 免密碼登入
- 3.安裝 JDK、Scala
- 4.配置完全分布式的 Hadoop
- 5.配置完全分布式的 HBase
- 6.配置 StandAlone 模式的 Spark
- 7.安裝和配置 MySQL
- 8.Hbase操作
- 二、存儲接口設計及使用說明
-
- 1.存儲接口設計
- 2.存儲資料請求标準json格式
- 3.存儲接口調用
- 4.存儲傳回狀态碼
- 5.參數屬性表、裝置站點參數射表
- 三、查詢接口設計及使用說明
一、基礎環境搭建
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
找到并修改:
請注意記錄,此處的HDFS端口号為<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>
。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>
的值(預設為 3 )。dfs.replication
-
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>
複制 slaves.template 為 slaves,并編輯 slaves 檔案。
添加:
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>
注意
中的 HDFS 端口号為 9000 。hbase.rootdir
- 編輯
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
-
-
關閉 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
三、查詢接口設計及使用說明
此節省略。。。。。。。。。