Hadoop + Spark + Hbase (二)

一、基础环境搭建

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: 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
  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.shstop-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.shstop-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.shstart-slaves.sh
    执行 jps 命令查看相关进程是否已经启动。
    spark1:
    • Master
      spark2 和 spark3 :
    • Worker
  3. 关闭 Spark 服务
    依次执行 stop-slaves.shstop-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":"",
	}
]

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”:""
    }
    返回结果:在这里插入图片描述

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/
    在这里插入图片描述

  3. wq_parameter_b、wq_stationdeviceparmeter_b 删除接口
    http://192.168.1.6:9003/delete
    在这里插入图片描述

三、查询接口设计及使用说明

此节省略。。。。。。。。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值