天天看點

Hadoop + Spark + Hbase (二)一、基礎環境搭建二、存儲接口設計及使用說明三、查詢接口設計及使用說明

環境搭建及接口調用

  • 一、基礎環境搭建
    • 1.節點基礎網絡配置
    • 2.配置 SSH 免密碼登入
    • 3.安裝 JDK、Scala
    • 4.配置完全分布式的 Hadoop
    • 5.配置完全分布式的 HBase
    • 6.配置 StandAlone 模式的 Spark
    • 7.安裝和配置 MySQL
    • 8.Hbase操作
  • 二、存儲接口設計及使用說明
    • 1.存儲接口設計
    • 2.存儲資料請求标準json格式
    • 3.存儲接口調用
    • 4.存儲傳回狀态碼
    • 5.參數屬性表、裝置站點參數射表
  • 三、查詢接口設計及使用說明

一、基礎環境搭建

1.節點基礎網絡配置

  1. 硬體上使叢集中的各個節點處于同一區域網路内。
  2. 設定各個節點中的網卡自動連接配接到網絡。
    1. 編輯

      /etc/sysconfig/network-scripts/ifcfg-eth0

    2. 設定

      ONBOOT=yes

    3. 儲存退出。
  3. 設定每台節點的 hostname 為不同名稱。

    spark1

    spark2

    spark3

  4. 根據實際網絡環境,為每台節點設定固定的IP位址。

    spark1 192.168.1.5

    spark2 192.168.16

    spark3 192.168.1.7

    子網路遮罩 255.255.255.0

    網關位址 192.168.1.1

  5. 在每台節點的

    /etc/hosts

    檔案中添加解析。

    192.168.88.51 spark1

    192.168.88.52 spark2

    192.168.88.53 spark3

  6. 關閉每台節點的防火牆

    sudo service iptables stop

    sudo chkconfig iptables off

  7. 檢查節點之間是否可以互相 ping 通。

    例如在 spark1 節點上:

    ping spark2

    ping spark3

2.配置 SSH 免密碼登入

  1. 保證每台節點中的使用者名相同(例如都為

    spark

    )。如果沒有,則建立。

    不要直接使用 root 使用者。請為叢集單獨建立使用者。

  2. 将使用者添加至 sudoer 清單

    切換到 root 使用者(

    su -

    使用

    visudo

    指令,添加 spark 使用者到 sudoer 清單。

    在 root 使用者之後添加(請根據實際情況賦予權限)

    root ALL=(ALL) ALL

    spark ALL=(ALL) NOPASSWD:ALL

  3. 配置 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

  4. 如有必要,配置内網 NTP 時間同步服務并同步時間。

3.安裝 JDK、Scala

  1. 下載下傳 JDK 。例如

    jdk1.8.0_121.tar.gz

  2. 解壓到

    /opt

    目錄下并設定目錄權限。
  3. 配置環境變量。
    • 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: JAVAH​OME/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: JAVAH​OME/lib/dt.jar:JAVA_HOME/lib/tools.jar

  4. 配置完成後應使用

    source /etc/profile

    使其生效,并使用

    java -version

    指令檢查安裝是否成功。
  5. 下載下傳 Scala 。例如

    scala-2-10-6.tgz

  6. 解壓到

    /opt

    目錄下并設定目錄權限。
  7. 配置環境變量。
    • sudo vim /etc/profile

    • 在檔案中添加:

      export SCALA_HOME=/opt/scala-2.10.6

      export PATH= P A T H : PATH: PATH:SCALA_HOME/bin

  8. 配置完成後應使用

    source /etc/profile

    使其生效,并使用

    scala

    指令檢查安裝是否成功。

4.配置完全分布式的 Hadoop

  1. 下載下傳 Hadoop 。例如

    hadoop-2.6.5.tar.gz

    、解壓到

    /opt

    目錄下并設定目錄權限。
  2. 配置環境變量。
    • 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

  3. 更改配置檔案(位于

    /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>
                 

    複制 slaves.template 為 slaves,并編輯 slaves 檔案。

    添加:

    spark2

    spark3

  4. 将 Hadoop 整個目錄複制到 spark2 和 spark3 節點(scp 指令,scp 目前系統的檔案路徑 使用者名@位址:目标主機的存放檔案的路徑)。
  5. 啟動 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

  1. 下載下傳 HBase ,例如

    hbase-1.2.5.tar.gz

    、解壓到

    /opt

    目錄并設定目錄權限。
  2. 編輯

    habse-env.sh

    (位于

    /opt/hbase-1.2.5/conf

    目錄,下同)。

    找到或添加

    export JAVA_HOME=/opt/jdk1.8.0_121

  3. 編輯

    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 。
  4. 編輯

    reginserver

    删除原有的

    localhost

    ,添加:

    spark2

    spark3

  5. 建立 backup-masters 檔案,添加:

    spark2

  6. 啟動 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

  7. 關閉 HBase 的步驟

    執行

    stop-hbase.sh

    即可。
注意:每次關閉系統之前必須執行該步驟。

6.配置 StandAlone 模式的 Spark

  1. 配置 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

  2. 啟動 Spark 服務

    依次執行

    start-master.sh

    start-slaves.sh

    執行

    jps

    指令檢視相關程序是否已經啟動。

    spark1:

    • Master

      spark2 和 spark3 :

    • Worker
  3. 關閉 Spark 服務

    依次執行

    stop-slaves.sh

    stop-master.sh

    即可。

7.安裝和配置 MySQL

  1. 安裝 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

  2. 配置 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操作

  1. 進入shell界面

    hbase shell

  2. 檢視表的結構

    describe ‘test1’(表名)

  3. 建立表

    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’}

  4. 檢視表資料

    list ‘表名’

  5. 掃描表

    scan ‘表名’

  6. 檢視一行記錄

    get ‘表名’,‘行号’

  7. 禁用表

    disable ‘表名’

  8. 删除表

    drop ‘表名’

  9. 啟用表

    enable ‘表名’

  10. 計算行數

    count ‘表名’,CACHE=>1000 hbase org.apache.hadoop.hbase.mapreduce.RowCounter ’

二、存儲接口設計及使用說明

1.存儲接口設計

  1. 存儲接口都是基于HTTP請求的,用戶端通過發送HTTP請求,提供标準的json格式,即可插入對應的資料。
  2. 在Hbase表中,【WQ】表用于存儲所有來自type字段參數為‘wq’的所有資料。

    由于查詢結果的需求,另外建立兩張表:

    【wq_parameter_b】參數屬性表:用于存放參數對應的屬性值(參數名,化學式,參數 上下限值,參數機關等),存儲的資料時候查詢參數屬性表,将查詢所需資訊讀取并保 存到對應的資料表中;

    【wq_stationdeviceparmeter_b】裝置站點參數映射表:用于存放裝置、站點、參數三者 的對應關系結構,查詢時通過裝置站點參數映射表找出參數id對應的站點、裝置。

  3. 目前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":"",
	}
]
           
Hadoop + Spark + Hbase (二)一、基礎環境搭建二、存儲接口設計及使用說明三、查詢接口設計及使用說明

3.存儲接口調用

  1. 存儲接口搭建在本地伺服器,調用接口:http://192.168.1.6:9003/storeByLine/

    (以WQ表為例)

  2. 發送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”:""

    }

    傳回結果:

    Hadoop + Spark + Hbase (二)一、基礎環境搭建二、存儲接口設計及使用說明三、查詢接口設計及使用說明

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.參數屬性表、裝置站點參數射表

  1. 由于hbase本身不具有修改操作,是以用到的修改實際上是删除後重新插入
  2. 【wq_parameter_b】參數屬性表插入接口:

    http://192.168.1.6:9003/storeParam/

    Hadoop + Spark + Hbase (二)一、基礎環境搭建二、存儲接口設計及使用說明三、查詢接口設計及使用說明
  3. wq_parameter_b、wq_stationdeviceparmeter_b 删除接口

    http://192.168.1.6:9003/delete

    Hadoop + Spark + Hbase (二)一、基礎環境搭建二、存儲接口設計及使用說明三、查詢接口設計及使用說明

三、查詢接口設計及使用說明

此節省略。。。。。。。。。

繼續閱讀