当前位置:   article > 正文

Hadoop生态系统环境搭建(Hadoop全分布式、Zookeeper集群、Mysql、Hive集群、Hbase集群、Redis集群、ElasticSearch集群)_hadoop安装mysql

hadoop安装mysql

搭建成功后各节点分工如下所示:

NameNodeSecondaryNameNodeDateNodeZookeeperZKFailoverControllerJournalNodeResourceManagerNodeManagerMySQLHiveHMasterHRegionServerRedisElasticSearch
node01*******
node02*********
node03********
node04*******

一、基础环境配置

1、检查防火墙状态并关闭防火墙

检查防火墙状态,如果Active状态为active (running),则防火墙为开启状态。

systemctl status firewalld
  • 1

关闭防火墙

systemctl stop firewalld
  • 1

启动防火墙

systemctl start firewalld
  • 1

设置开机禁用防火墙

systemctl disable firewalld.service
  • 1

设置开机启用防火墙

systemctl enable firewalld.service
  • 1

2、配置免秘钥

(1)node01、node02、node03、node04分别执行以下命令,生成dsa

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
  • 1
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
  • 1
cd .ssh
  • 1

(2)分别分发密钥,本文只展示node01分发node02的命令,命令如下:
node01执行以下命令,分发密钥。

scp id_dsa.pub node02:`pwd`/node01.pub
  • 1

node02执行以下命令

cat ~/.ssh/node01.pub >> ~/.ssh/authorized_keys
  • 1

node01执行以下命令,验证免秘钥配置是否成功,如果成功,则不需要密码即可访问node02。

ssh node02
  • 1

node01、node02、node03、node04间分别执行上述命令,分发并配置密钥,实现所有节点之间可以在不使用密码的情况下互相访问。

3、Windows10下的地址映射(可不做)

进入C:\Windows\System32\drivers\etc目录,编辑hosts文件

在末尾添加如下配置:

192.168.153.11	node01
192.168.153.12	node02
192.168.153.13	node03
192.168.153.14	node04
  • 1
  • 2
  • 3
  • 4

添加后web端输入的IP地址即可被主机名代替。

4、安装JDK

解压JDK安装包

cd /opt/software
  • 1
rpm -i jdk-7u67-linux-x64.rpm
  • 1

编写环境变量

whereis java
  • 1
vi + /etc/profile
  • 1

环境变量中添加:

# JAVA_HOME
export JAVA_HOME=/usr/java/jdk1.7.0_67
export PATH=$PATH:$JAVA_HOME/bin
  • 1
  • 2
  • 3

重新加载环境变量。

. /etc/profile
  • 1

二、Hadoop环境搭建

Hadoop全分布式配合Zookeeper与Yarn集群实现高可用性(HA,high availability),集群各节点角色分配如下:

NameNodeSecondaryNameNodeDateNodeZookeeperZKFailoverControllerJournalNodeResourceManagerNodeManager
node01***
node02******
node03*****
node04****

各个角色的作用如下:

所属组件作用
NameNodeHDFS维护和管理文件系统元数据
SecondaryNameNodeHDFS帮助NameNode备份数据
DateNodeHDFS负责具体的数据块存储
ZookeeperZookeeperZKFailoverController启动所依赖的环境
ZKFailoverControllerZookeeperZooKeeper故障转移控制器,通过监视和控制Active NameNode与Standby NameNode之间的状态实现NameNode的主备切换
JournalNodeYarn负责监控日志并通过日志保持Active NameNode与Standby NameNode之间元数据同步
ResourceManagerYarn资源调度过程中监控 NodeManager的健康状况并分配与调度资源
NodeManagerYarn资源调度过程中管理单个节点上的资源

前期准备:配置IP、MAC地址、hosts、hostname、关闭防火墙、安装jdk、配置环境变量

1、伪分布式安装

在node01节点中先搭建伪分布式

(1)hadoop包安装并配置环变量

安装版本:hadoop-2.6.5.tar.gz

tar xf hadoop-2.6.5.tar.gz -C /opt/module
  • 1
vi + /etc/profile
  • 1

在环境变量中添加如下:

# HADOOP_HOME
HADOOP_HOME=/opt/module/hadoop-2.6.5
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  • 1
  • 2
  • 3

更新更改的配置

source /etc/profile
  • 1
(2)更改Hadoop的配置文件

进入Hadoop配置文件目录

cd /opt/module/hadoop-2.6.5/etc/hadoop
  • 1

Hadoop的第二次JAVA_HOME 环境变量配置

分别在hadoop-env.sh、mapred-env.sh、yarn-env.sh三个文件中添加JDK的环境变量

vi hadoop-env.sh
  • 1
vi mapred-env.sh
  • 1
vi yarn-env.sh
  • 1

修改三个配置文件中间的JAVA_HOME设置

export JAVA_HOME=/usr/java/jdk1.7.0_67
  • 1

配置core-site.xml

vi core-site.xml
  • 1

在core-site.xml中添加如下配置:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://node01:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/var/module/hadoop/pseudo</value>
    </property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

配置hdfs-site.xml

vi hdfs-site.xml
  • 1

在hdfs-site.xml中添加如下配置:

<configuration>
   <property>
        <name>dfs.replication</name>
        <value>1</value>
   </property>
   <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>node01:50090</value>
    </property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

配置slaves:

vi slaves
  • 1

在slaves中添加:

node01
  • 1
(3)格式化并启动hdfs

格式化hdfs(只能格式化一次,再次启动集群不要执行)

hdfs namenode -format
  • 1

启动集群

start-dfs.sh
  • 1

角色进程查看

jps
  • 1

帮助命令:

hdfs 
  • 1
hdfs dfs 	
  • 1

查看web UI

地址为http://node01:50070与http://192.168.153.11:50070。

如果之前未配置Windows10的地址映射,则地址只能为http://192.168.153.11:50070
在这里插入图片描述

创建目录:

hdfs dfs  -mkdir -p  /user/root
  • 1

查看目录:

hdfs dfs -ls /
  • 1

上传文件:

hdfs dfs -put hadoop-2.6.5.tar.gz /user/root				
  • 1

停止集群:

stop-dfs.sh
  • 1

2、全分布式环境搭建

事先准备:先将单节点的hadoop配置文件复制并保存到hadoop_pseudo文件夹备份:

cd /opt/module/hadoop-2.6.5/etc/
  • 1
cp -r hadoop hadoop_pseudo 
  • 1
(1)在伪分布式的基础上更改hadoop的配置文件

更改配置core-site.xml

cd /opt/module/hadoop-2.6.5/etc/hadoop/
  • 1
vi core-site.xml
  • 1

将core-site.xml改为如下格式

    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://node01:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/var/module/hadoop/full</value>
    </property>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

更改配置hdfs-site.xml

vi hdfs-site.xml
  • 1

将hdfs-site.xml改为如下格式

   <property>
        <name>dfs.replication</name>
        <value>2</value>
   </property>
   <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>node02:50090</value>
    </property>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

更改配置slaves:

vi slaves
  • 1

将slaves改为如下内容

node02
node03
node04
  • 1
  • 2
  • 3
(2)分发Hadoop到其他节点

分发 hadoop-2.6.5 给其他节点

cd /opt/module/
  • 1
scp -r hadoop-2.6.5 node02:`pwd`
  • 1
scp -r hadoop-2.6.5 node03:`pwd`
  • 1
scp -r hadoop-2.6.5 node04:`pwd`
  • 1

分发环境变量配置文件给其他节点

scp /etc/profile node02:/etc/
  • 1
scp /etc/profile node03:/etc/
  • 1
scp /etc/profile node04:/etc/
  • 1
. /etc/profile
  • 1
(3)格式化并启动

格式化(只能格式化一次)

hdfs namenode -format 
  • 1

启动Hadoop集群

start-dfs.sh
  • 1

完成简单的创建目录以及上传文件操作

hdfs dfs -mkdir -p /user/root
  • 1
for i in `seq 100000`;do  echo "hello world $i" >> test.txt;done
  • 1
hdfs dfs -D dfs.blocksize=1048576 -put test.txt
  • 1

登录web界面 http://node01:50070
在这里插入图片描述
在这里插入图片描述

3、HA高可用配置

前期准备:将全分布式的hadoop配置文件备份到hadoop_full文件夹中

cd /opt/module/hadoop-2.6.5/etc/
  • 1
cp -r hadoop hadoop_full
  • 1
(1)重新配置Hadoop的配置文件并分发

配置core-site.xml

cd /opt/module/hadoop-2.6.5/etc/hadoop/
  • 1
vi core-site.xml
  • 1

在core-site.xml文件中,更改原有配置

    <property>
       <name>fs.defaultFS</name>
       <value>hdfs://mycluster</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/var/module/hadoop/ha</value>
    </property> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

更改后,在core-site.xml文件中,增加如下

    <property>
       <name>ha.zookeeper.quorum</name>
       <value>node02:2181,node03:2181,node04:2181</value>
    </property>
  • 1
  • 2
  • 3
  • 4

配置hdfs-site.xml

vi hdfs-site.xml
  • 1

去掉原有的SNN配置

    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>node02:50090</value>
    </property>
  • 1
  • 2
  • 3
  • 4

增加如下配置

    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
    </property>
    <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>node01:8020</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>node02:8020</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.mycluster.nn1</name>
        <value>node01:50070</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.mycluster.nn2</name>
        <value>node02:50070</value>
    </property>
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>
    </property>
    <property>
        <name>dfs.client.failover.proxy.provider.mycluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <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_dsa</value>
    </property>
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/var/module/hadoop/ha/journalnode</value>
    </property>
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

更改后的hdfs-site.xml如下:

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
    </property>
    <property>
       <name>dfs.ha.namenodes.mycluster</name>
       <value>nn1,nn2</value>
    </property>
    <property>
       <name>dfs.namenode.rpc-address.mycluster.nn1</name>
       <value>node01:8020</value>
    </property>
    <property>
       <name>dfs.namenode.rpc-address.mycluster.nn2</name>
       <value>node02:8020</value>
    </property>
    <property>
       <name>dfs.namenode.http-address.mycluster.nn1</name>
       <value>node01:50070</value>
    </property>
    <property>
       <name>dfs.namenode.http-address.mycluster.nn2</name>
       <value>node02:50070</value>
    </property>

    <property>
       <name>dfs.namenode.shared.edits.dir</name>
       <value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>
    </property>

    <property>
       <name>dfs.client.failover.proxy.provider.mycluster</name>
       <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <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.journalnode.edits.dir</name>
       <value>/var/module/hadoop/ha/journalnode</value>
    </property>

    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
     </property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58

分发core-site.xml hdfs-site.xml 给其他节点

scp core-site.xml hdfs-site.xml node02:`pwd`
  • 1
scp core-site.xml hdfs-site.xml node03:`pwd`
  • 1
scp core-site.xml hdfs-site.xml node04:`pwd`	
  • 1
(2)安装zookeeper集群(node02、node03、node04):

1.zk压缩包解压在其他路径下(node02):

tar xf zookeeper-3.4.6.tar.gz -C /opt/module/
  • 1

2.进入conf目录,拷贝zoo_sample.cfg zoo.cfg 并配置dataDir,集群节点(node02)

cd /opt/module/zookeeper-3.4.6/conf
  • 1
mv zoo_sample.cfg zoo.cfg
  • 1
vi zoo.cfg
  • 1

在文件中间修改:

dataDir=/var/module/zk
  • 1

在文件末尾添加:

server.1=node02:2888:3888
server.2=node03:2888:3888
server.3=node04:2888:3888
  • 1
  • 2
  • 3

3.(node02)分发zookeeper到node03、node04

cd /opt/module/
  • 1
scp -r zookeeper-3.4.6/ node03:`pwd`
  • 1
scp -r zookeeper-3.4.6/ node04:`pwd`
  • 1

4.创建 /var/module/zk目录,进入各自目录 分别输出1,2,3 至文件 myid(node02、node03、node04)

node02、node03、node04先创建需要的zk文件夹

mkdir /var/module/zk
  • 1

node02进行如下配置,将node02的myid设置为1

echo 1 > /var/module/zk/myid
  • 1

node03进行如下配置,将node03的myid设置为2

echo 2 > /var/module/zk/myid
  • 1

node04进行如下配置,将node04的myid设置为3

echo 3 > /var/module/zk/myid
  • 1

node02、node03、node04检查myid是否配置正确

cat /var/module/zk/myid
  • 1

5.各节点配置环境变量,读取profile

vi + /etc/profile
  • 1

在环境变量中添加:

#ZOOKEEPER_HOME
export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.6
export PATH=$PATH:$ZOOKEEPER_HOME/bin
  • 1
  • 2
  • 3

分发到node03和node04中(也可以单独在node03、node04中配置环境变量)

scp /etc/profile node03:/etc/
  • 1
scp /etc/profile node04:/etc/
  • 1

更新配置文件

source /etc/profile
  • 1
  1. node02、node03、node04启动zkServer.sh start 集群
zkServer.sh start
  • 1
zkServer.sh status
  • 1
zkServer.sh stop
  • 1

node02、node03、node04节点启动journalnode集群

hadoop-daemon.sh start journalnode
  • 1

随意找一个nn节点格式化(node01):

hdfs namenode -format
  • 1

启动该节点(node01):

hadoop-daemon.sh start namenode
  • 1

另一nn节点同步(node02):

hdfs namenode -bootstrapStandby
  • 1

格式化zkfc,在zookeeper中可见目录创建(node01):

hdfs zkfc -formatZK
  • 1
(3)配置mr-hd2.x yarn
NN1NN2DNZKZKFCJNNRSNM
node01***
node02******
node03*****
node04****

进入配置文件目录并更改文件名称

cd /opt/module/hadoop-2.6.5/etc/hadoop
  • 1
mv mapred-site.xml.template mapred-site.xml  
  • 1

配置mapred-site.xml

vi mapred-site.xml
  • 1

在mapred-site.xml中增加如下配置:

	<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
	</property>
  • 1
  • 2
  • 3
  • 4

配置yarn-site.xml:

vi yarn-site.xml
  • 1

在yarn-site.xml中增加如下配置:

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property> 
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>cluster1</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>node03</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>node04</value>
    </property>
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>node02:2181,node03:2181,node04:2181</value>
    </property>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

分发两个文件到:node02、node03、node04节点

scp mapred-site.xml yarn-site.xml node02:`pwd`
  • 1
scp mapred-site.xml yarn-site.xml node03:`pwd`
  • 1
scp mapred-site.xml yarn-site.xml node04:`pwd`
  • 1

4、启动:

(1)首次启动

1.node02、node03、node04分别启动Zookeeper:

zkServer.sh start
  • 1

2.hdfs (注意,有一个脚本不要用,start-all)

start-dfs.sh
  • 1

如果nn 和 nn2没有启动,需要在node01、node02分别手动启动:

hadoop-daemon.sh start namenode	
  • 1

3.启动nodemanager:

start-yarn.sh
  • 1

4.在node03、node04节点分别执行脚本:

yarn-daemon.sh start resourcemanager
  • 1
(2)UI访问

Hadoop UI(node01)访问地址:
http://node01:50070
http://192.168.153.11:50070
在这里插入图片描述
Hadoop UI(node02)访问地址:
http://node02:50070
http://192.168.153.12:50070
在这里插入图片描述

yarnUI访问地址:
http://node03:8088
http://192.168.153.13:8088
在这里插入图片描述

(3)停止集群

node01: (停止nodemanager)

stop-dfs.sh 
  • 1
stop-yarn.sh
  • 1

node03、node04:(停止resourcemanager)

yarn-daemon.sh stop resourcemanager 
  • 1
(4)启动集群

以后每次启动集群,只需要执行以下命令
node02、node03、node04:

zkServer.sh start
  • 1

node01:

start-all.sh
  • 1

node03、node04:

yarn-daemon.sh start resourcemanager
  • 1

三、Hive安装

前置条件:配置IP、MAC地址、hosts、hostname、关闭防火墙、安装jdk、配置环境变量,测试安装Hadoop全分布式

Hive依赖于上一章搭建的高可用分布式系统与MySQL数据库。

NameNodeSecondaryNameNodeDateNodeZookeeperZKFailoverControllerJournalNodeResourceManagerNodeManagerMySQLHive
node01****
node02*******
node03******
node04*****

在搭建的Hive环境中,各节点的作用如下:

作用
node01安装MySQL,作为Hive启动必备条件
node02搭建单节点Hive
node03搭建多节点Hive,作为Hive的服务端
node04搭建多节点Hive,作为Hive的客户端

1、安装MySQL

node01中配置MySQL

yum install mysql-server
  • 1

如果提示“No package mysql-server available.”(找不到软件包),执行如下命令

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
  • 1
rpm -ivh mysql-community-release-el7-5.noarch.rpm
  • 1

启动 MySQL服务

systemctl start mysqld
  • 1

查看 MySQL 运行状态:

systemctl status mysqld
  • 1

进入数据库

mysql
  • 1

数据库中执行以下命令设置密码(密码设置为“121314”,可根据习惯修改):

use mysql;
  • 1
grant all privileges on *.* to 'root'@'%' identified by '121314' with grant option;
  • 1
select host,user,password from user;
  • 1
update user set password=password('121314') where user='root' and host='localhost';
  • 1
flush privileges;
  • 1
quit
  • 1

修改密码后进入MySQL的命令变为:

mysql -u root -p
  • 1

然后再PassWord后面输入设置的密码“121314”。

2、Hive单节点搭建(node02节点搭建)

单用户模式,node02单节点配置Hive,与node01的MySQL相连接

(1)解压并配置Hive配置文件(node02单节点)

在node02上解压安装Hive

cd /opt/software
  • 1
tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/module/
  • 1
cd /opt/module/
  • 1
mv apache-hive-1.2.1-bin hive
  • 1

在node02节点中配置环境变量。

vi + /etc/profile
  • 1

进行如下更改

#HIVE_HOME
HIVE_HOME=/opt/module/hive
export PATH=$PATH:$HIVE_HOME/bin
  • 1
  • 2
  • 3

更新环境变量

source /etc/profile
  • 1
(2)修改jar包名称并配置MySQL驱动(node02)

在node02节点中修改HADOOP_HOME\lib目录下的jline-*.jar 变成HIVE_HOME\lib下的jline-2.12.jar。

cd /opt/module/hadoop-2.6.5/share/hadoop/yarn/lib/
  • 1
rm -rf jline-0.9.94.jar 
  • 1
cp /opt/module/hive/lib/jline-2.12.jar ./
  • 1

在node02节点中拷贝MySQL驱动包到HIVE_HOME\lib目录下

cd /opt/software
  • 1
cp mysql-connector-java-5.1.32-bin.jar /opt/module/hive/lib/
  • 1
(3)修改配置文件(node02)

在node02节点中修改hive-site.xml

cd /opt/module/hive/conf
  • 1
mv hive-default.xml.template hive-site.xml
  • 1
vi hive-site.xml
  • 1

在node02节点中批量删除hive-site.xml原有的配置:在末行命令行输入: .,$-1d;并增加如下配置

    <property>  
        <name>hive.metastore.warehouse.dir</name>  
        <value>/user/hive_remote/warehouse</value>  
    </property> 
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://node01/hive_remote?createDatabaseIfNotExist=true</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>
    <property>
         <name>javax.jdo.option.ConnectionPassword</name>
         <value>121314</value>
    </property>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
(4)单节点启动Hive并执行简单的操作

启动条件:先在node02、node03、node04启动Zookeeper集群,并在node01启动Hadoop集群,最后在node03、node04启动Yarn
node02、node03、node04:

zkServer.sh start
  • 1

node01:

start-all.sh
  • 1

node03、node04:

yarn-daemon.sh start resourcemanager
  • 1

node02单节点启动Hive(记得先启动Hadoop集群)

hive
  • 1

node02进行Hive的基本操作:

show tables;
  • 1
create table tbl(id int,age int);
  • 1
show tables;
  • 1
insert into tbl values(1,1);
  • 1
select * from tbl;
  • 1
quit;
  • 1

在node01:50070的webUI页面中的Browse Directory输入路径/user/hive_remote/warehouse/tbl可以看到Hive中存入的表。
在这里插入图片描述

node01中进入数据库可以看到hive存到数据库中的表:

mysql -uroot -p
  • 1
show databases;
  • 1
use hive_remote;
  • 1
show tables;
  • 1
select * from TBLS;
  • 1
quit;
  • 1

在这里插入图片描述

3、Hive多节点搭建

多用户模式Remote分开,node03是服务端,node04是客户端

(1)分发Hive到其他节点并编辑配置文件

将node02中的单节点hive分发到node03、node04

scp -r hive/ node03:`pwd`
  • 1
scp -r hive/ node04:`pwd`
  • 1

node03、node04配置环境变量:

vi /etc/profile
  • 1
#HIVE_HOME
HIVE_HOME=/opt/module/hive
export PATH=$PATH:$HIVE_HOME/bin
  • 1
  • 2
  • 3
. /etc/profile
  • 1
(2)更改服务端配置文件(node03)

node03(服务端)更改hive.site.xml配置文件

cd /opt/module/hive/conf/
  • 1
vi hive-site.xml
  • 1

前两项的value改变,“hive_romate"改为"hive”

    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>       
    </property>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://node01/hive?createDatabaseIfNotExist=true</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>
    <property>
         <name>javax.jdo.option.ConnectionPassword</name>
         <value>121314</value>
    </property>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
(3)更改客户端配置文件(node04)

1.node04(客户端)更改hive.site.xml配置文件

cd /opt/module/hive/conf/
  • 1
vi hive-site.xml
  • 1

2.更改hive-site.xml

    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>
    </property>
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://node03:9083</value>
    </property>
    <property>
        <name>hive.metastore.local</name>
        <value>false</value>
    </property>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3.修改HADOOP_HOME\lib目录下的jline-*.jar 变成HIVE_HOME\lib下的jline-2.12.jar。

cd /opt/module/hadoop-2.6.5/share/hadoop/yarn/lib/
  • 1
rm -rf jline-0.9.94.jar
  • 1
cp /opt/module/hive/lib/jline-2.12.jar ./
  • 1
(4)先后启动服务端和客户端

node03服务端元数据启动(阻塞式窗口)

hive --service metastore
  • 1

node04客户端启动

hive
  • 1

在node04的hive客户端里进行简单的操作

create table psn(id int);
  • 1
show tables;
  • 1
insert into psn values(1);
  • 1

可以在node01的MySQL中查找hive库中的psn表
可以在http://node01:50070的web页面中进入/user/hive/warehouse/psn查找表文件
在这里插入图片描述

4、hiveserver2 Beeline启动

(1)node03启动hiveserver2(阻塞式窗口)
hiveserver2
  • 1
(2)node04的beeline连接(两种方式)

方式一:

beeline
  • 1

(连接成功后node03的hiveserver2会弹出ok)

!connect jdbc:hive2://node03:10000/default root 121314
  • 1

退出beeline连接

!close
  • 1
!quit
  • 1

方式二:

beeline -u jdbc:hive2://node03:10000/default root 121314
  • 1
show tables ;
  • 1

退出连接

!quit
  • 1

四、HBase

HBase依赖于Hadoop高可用分布式系统。集群各节点角色分配如下

NameNodeSecondaryNameNodeDateNodeZookeeperZKFailoverControllerJournalNodeResourceManagerNodeManagerMySQLHiveHMasterHRegionServer
node01*****
node02********
node03*******
node04*******

除去搭建完成的Hadoop高可用系统,本部分需要搭建的角色配置如下:

HMasterHRegionServer
node01*
node02*
node03*
node04**

其中HMaster与HRegionServer的配置如下:
各个角色的作用如下:

所属组件作用
HMasterHBase负责监控集群中所有的HRegionServer实例
HRegionServerHBase负责数据cell的处理,是拆分合并region的实际执行者

1、伪分布式

在node01节点中搭建

(1)解压安装HBase并配置环境变量

安装(node01单节点)

cd /opt/software
  • 1
tar -zxvf hbase-0.98.12.1-hadoop2-bin.tar.gz -C /opt/module/
  • 1
cd /opt/module
  • 1
mv hbase-0.98.12.1-hadoop2 hbase
  • 1

环境变量

vi /etc/profile
  • 1

环境变量中做如下修改

#HBASE_HOME
export HBASE_HOME=/opt/module/hbase
export PATH=$PATH:$HBASE_HOME/bin
  • 1
  • 2
  • 3

保存并更新环境变量

source /etc/profile
  • 1
(2)修改配置文件

1.修改hbase-env.sh

cd /opt/module/hbase/conf
  • 1
vi hbase-env.sh
  • 1

更改hbase-env.sh的JAVA_HOME

export JAVA_HOME=/usr/java/jdk1.7.0_67
  • 1

2.修改hbase-site.xml

vi hbase-site.xml
  • 1

进行如下配置:

    <property>
        <name>hbase.rootdir</name>
        <value>file:///home/testuser/hbase</value>
    </property>
    <property>
        <name>hbase.zookeeper.property.dataDir</name>
        <value>/home/testuser/zookeeper</value>
    </property>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
(3)启动HBase并进行简单的操作

1.启动HBASE

start-hbase.sh
  • 1

2.进入web端:node01:60010
在这里插入图片描述

3.进入hbase命令行:

hbase shell
  • 1

4.HBase基本操作:

status
  • 1
version
  • 1
whoami
  • 1
create 'tbl','cf'
  • 1
list
  • 1
put 'tbl','2','cf:name','zhangsanfeng'
  • 1
get 'tbl','2'
  • 1
scan 'tbl'
  • 1
flush 'tbl'
  • 1
quit
  • 1

2、完全分布式hbase搭建

node01主,node04从

在node01中配置,后续分发到node02、node03、node04

(1)更改HBase的配置文件

1.修改hbase-env.sh

vi hbase-env.sh 
  • 1

更改JAVA_HOME

export JAVA_HOME=/usr/java/jdk1.7.0_67
  • 1

更改HBASE_MANAGES_ZK(第124行)

export HBASE_MANAGES_ZK=false
  • 1

2.修改hbase-site.xml

vi hbase-site.xml
  • 1

删除原来的伪分布式配置

  <property>
        <name>hbase.rootdir</name>
        <value>hdfs://mycluster/hbase</value>
    </property>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>node02,node03,node04</value>
    </property>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3.修改regionservers

vi regionservers
  • 1

更改为:

node02
node03
node04
  • 1
  • 2
  • 3

4.创建backup-masters(以node01为启动节点,所以该文件中配置node04)

vi backup-masters
  • 1

添加以下配置

node04
  • 1

5、拷贝hdfs-site.xml到conf目录

cp /opt/module/hadoop-2.6.5/etc/hadoop/hdfs-site.xml ./
  • 1
(2)分发HBase到其他节点并配置环境变量

将hbase分发到其他节点(node02、node03、node04)

scp -r /opt/module/hbase node02:/opt/module/
  • 1
scp -r /opt/module/hbase node03:/opt/module/
  • 1
scp -r /opt/module/hbase node04:/opt/module/
  • 1

其他节点修改环境变量(node02、node03、node04)

vi + /etc/profile
  • 1
# HBASE_HOME
export HBASE_HOME=/opt/module/hbase
export PATH=$PATH:$HBASE_HOME/bin
  • 1
  • 2
  • 3
(3)启动HBase

启动条件:先在node02、node03、node04启动Zookeeper集群,并在node01启动Hadoop集群,最后在node03、node04启动Yarn
node02、node03、node04:

zkServer.sh start
  • 1

node01:

start-all.sh
  • 1

node03、node04:

yarn-daemon.sh start resourcemanager
  • 1

在node01启动HBase:

start-hbase.sh
  • 1

进入node01与node04的web端:

http://node01:60010
在这里插入图片描述
http://node04:60010
在这里插入图片描述
进入HBase命令行:

hbase shell
  • 1

关闭HBase:

stop-hbase.sh
  • 1

五、Redis

1、redis单机环境搭建

安装版本 redis-2.8.18.tar.gz

1.下载gcc、tcl 命令编译器

yum -y install gcc tcl
  • 1
whereis gcc tcl
  • 1

2.解压

cd /opt/software/
  • 1
tar xf redis-2.8.18.tar.gz -C /opt/module/
  • 1

3.编译、创建目录、拷贝

cd /opt/module/redis-2.8.18/
  • 1
make && make PREFIX=/opt/module/redis install
  • 1

4.配置环境变量:

vi + /etc/profile
  • 1
# REDIS_HOME
export REDIS_HOME=/opt/module/redis
export PATH=$PATH:$REDIS_HOME/bin
  • 1
  • 2
  • 3

5.重新加载配置文件:

. /etc/profile 
  • 1

6.进入utils 目录,安装服务脚本:

cd /opt/module/redis-2.8.18/utils
  • 1
./install_server.sh 
  • 1

端口、实例、配置文件、日志、持久化数据目录、执行路径配置

enter执行 、ctrl+c退出

7.启动客户端:

redis-cli
  • 1

8.使用帮助:

utils目录下:

redis-cli -h
  • 1
redis-server -h 	
  • 1

9.启动客户端:

redis -cli (6379)
  • 1

帮助: 直接输入 help

2、redis伪分布主从环境配置

(1)高可用搭建

进入opt目录下

cd /opt
  • 1

1.创建redis目录:

mkdir redis
  • 1

2.在redis目录下分别创建3个端口目录: 6380,6381,6382
(不在配置文件中写他的目录指定关系,直接在当前目录下执行,持久化目录)

cd redis/
  • 1
mkdir 6380
  • 1
mkdir 6381
  • 1
mkdir 6382
  • 1

3.当前目录下分别启动3个实例:
(1)启动服务端。在node01中新建三个终端,分别进入/opt/redis/6380、/opt/redis/6381以及/opt/redis/6382目录,并且执行以下命令:
进入6380的终端执行:

cd /opt/redis/6380
  • 1
redis-server --port 6380
  • 1

进入6381的终端执行:

cd /opt/redis/6381
  • 1
redis-server --port 6381 --slaveof 127.0.0.1 6380
  • 1

进入6382的终端执行:

cd /opt/redis/6382
  • 1
redis-server --port 6382 --slaveof 127.0.0.1 6380
  • 1

(2)在node01中新建三个终端作为三个客户端,分别执行以下命令:

redis-cli -p 6380
  • 1
redis-cli -p 6381
  • 1
redis-cli -p 6382
  • 1

4.主从演示 crud权限,高可用

(2)伪分布哨兵集群搭建:

1.拷贝src下的redis-sentinel至bin目录下:

cd /opt/module/redis-2.8.18/src/
  • 1
cp redis-sentinel /opt/module/redis/bin/
  • 1

2.创建哨兵配置文件目录:

cd /opt
  • 1
mkdir sent
  • 1

3.目录下创建启动配置文件病拷贝:

cd /opt/sent/
  • 1
vi s1.conf 
  • 1

配置文件内容:

port 26380
sentinel monitor mymaster 127.0.0.1 6380 2
  • 1
  • 2

拷贝

cp s1.conf s2.conf
  • 1
cp s1.conf s3.conf
  • 1

分别对拷贝的s2.conf、s3.conf进行更改

s2.conf:

vi s2.conf 
  • 1

s2.conf更改为:

port 26381
sentinel monitor mymaster 127.0.0.1 6380 2
  • 1
  • 2

s3.conf:

vi s3.conf 
  • 1

s3.conf更改为:

port 26382
sentinel monitor mymaster 127.0.0.1 6380 2
  • 1
  • 2

4 启动Redis伪分布式哨兵集群
需要在node01中启动九个终端,包括三个服务端、三个客户端以及三个哨兵。

(1)启动服务端
启动三个主从redis实例,在node01中新建三个终端,分别进入/opt/redis/6380、/opt/redis/6381、/opt/redis/6382目录,并且执行以下命令:
进入6380的终端执行:

cd /opt/redis/6380
  • 1
redis-server --port 6380
  • 1

​ 进入6381的终端执行:

cd /opt/redis/6381
  • 1
redis-server --port 6381 --slaveof 127.0.0.1 6380
  • 1

​ 进入6382的终端执行:

cd /opt/redis/6382
  • 1
redis-server --port 6382 --slaveof 127.0.0.1 6380
  • 1

(2)启动哨兵

启动sentinel读取配置文件,在node01中新建三个终端并进入/opt/sent/目录,三个终端分别执行以下命令:
三个终端统一执行:

cd /opt/sent/
  • 1

三个终端分别执行以下三个命令中的一个:

redis-sentinel s1.conf 
  • 1
redis-sentinel s2.conf 
  • 1
redis-sentinel s3.conf
  • 1

(3)启动客户端。
测试:演示自动提备
在node01中新建三个终端,分别执行以下命令:

redis-cli -p 6380
  • 1
redis-cli -p 6381
  • 1
redis-cli -p 6382
  • 1

挂断主节点,哨兵会自动寻找新的节点

3、redis主从全分布集群

全分布式redis集群搭建:单节点多实例
删除之前安装的2.8版本并安装3.0版本

1 删除2.8版本bin目录及文件:

cd /opt/module/
  • 1
rm -rf redis-2.8.18/
  • 1
cd /opt/module/redis
  • 1
rm -rf /opt/module/redis/bin/
  • 1

2 Xftp 上传redis-cluster 目录到根目录

3 redis-cluster目录下解压redis 3.0 :

cd /opt/software/redis-cluster/
  • 1
tar xf redis-3.0.4.tar.gz
  • 1

4 redis目录下make命令编译拷贝bin至 /opt/module/redis/下

cd /opt/software/redis-cluster/redis-3.0.4
  • 1
make && make PREFIX=/opt/module/redis install
  • 1

成功后会有哨兵显示

5 测试 是否成功

输入re后按table键看是有提示

6 安装rubby编译环境

yum -y install ruby rubygems 
  • 1

7 redis-cluster 目录下安装 redis gem 模块:

cd /opt/software/redis-cluster/
  • 1
gem install --local redis-3.3.0.gem
  • 1

8 创建文件目录、主从节点并匹配端口(已完成):
redis集群 3.x版本
物理节点1个
指定3个主节点端口为7000、7001、7002
对应的3个从节点端口为7003、7004、7005

mkdir cluster-test
  • 1
cd cluster-test
  • 1
mkdir 7000 7001 7002 7003 7004 7005
  • 1

9 创建配置文件redis.conf(启集群模式: 3.0 支持单机集群,但必须在配置文件中说明) (已完成)

指定不冲突的端口 及 <对应端口号>
文件内容:
声明支持集群模式
指定端口

在7000-7005每个目录中均放入redis.conf
redis.conf内容如下:

cluster-enabled yes
port 700X 
  • 1
  • 2

10 启动所有服务,要进入子目录启动服务
开启6个终端,分别进入7000到7005目录。执行启动命令redis-server redis.conf

cd /opt/software/redis-cluster/redis-test/7000
  • 1
cd /opt/software/redis-cluster/redis-test/7001
  • 1
cd /opt/software/redis-cluster/redis-test/7002
  • 1
cd /opt/software/redis-cluster/redis-test/7003
  • 1
cd /opt/software/redis-cluster/redis-test/7004
  • 1
cd /opt/software/redis-cluster/redis-test/7005
  • 1

6个终端同时执行以下命令,启动Redis:

redis-server redis.conf
  • 1
ss -tanl | grep 700
  • 1

11 创建集群,槽位认领

新建一个终端,在安装目录下的src中,找到 redis-trib.rb 这是rubby脚本执行程序,完成redis3.0集群创建

cd /opt/software/redis-cluster/redis-3.0.4/src
  • 1
./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 \127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
  • 1
Using 3 masters:
127.0.0.1:7000
127.0.0.1:7001
127.0.0.1:7002
Adding replica 127.0.0.1:7003 to 127.0.0.1:7000
Adding replica 127.0.0.1:7004 to 127.0.0.1:7001
Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: d4cbae0d69b87a3ca2f9912c8618c2e69b4d8fab 127.0.0.1:7000
   slots:0-5460 (5461 slots) master
M: bc2e33db0c4f6a9065792ea63e0e9b01eda283d7 127.0.0.1:7001
   slots:5461-10922 (5462 slots) master
M: 5c2217a47e03331752fdf89491e253fe411a21e1 127.0.0.1:7002
   slots:10923-16383 (5461 slots) master
M: 3d4b31af7ae60e87eef964a0641d43a39665f8fc 127.0.0.1:7003
   slots: (0 slots) master
   replicates d4cbae0d69b87a3ca2f9912c8618c2e69b4d8fab
M: 710ba3c9b3bda175f55987eb69c1c1002d28de42 127.0.0.1:7004
   slots: (0 slots) master
   replicates bc2e33db0c4f6a9065792ea63e0e9b01eda283d7
M: 7e723cbd01ef5a4447539a5af7b4c5461bf013df 127.0.0.1:7005
   slots: (0 slots) master
   replicates 5c2217a47e03331752fdf89491e253fe411a21e1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

自动分配了主从,自动分配了slots,所有槽都有节点处理,集群上线

客户端连接
新建三个端口,输入以下命令连接

redis-cli -p 7000 -c
  • 1
redis-cli -p 7001 -c
  • 1
redis-cli -p 7002 -c
  • 1

在7000输入set k1 a 跳转到7002
在7001输入get k1 跳转到7002
在7002输入get k1 不跳转

六、ElasticSearch

本章节与node01、node02、node03三个节点安装ElasticSearch并搭建集群,同时安装head可视化插件。

注意:ElasticSearch具有特殊性,不能使用root用户运行,所以创建一个es普通用户。安装ElasticSearch时直接切换到es用户安装,相比于用root安装,省去了转权限的步骤。

xftp拷贝elasticsearch-2.2.1.zip至software目录下

node01、node02、node03共同安装
1.安装unzip

yum -y install unzip
  • 1

2.共享模式下创建es用户:(node01、node02、node03)

useradd es
  • 1

为es用户添加密码

passwd es
  • 1

密码设置为:

123456
  • 1

3.root 用户创建 /opt/module/es(普通用户无法创建)(node01、node02、node03)(注意:此时的目录权限属于root)

mkdir -p /opt/module/es 
  • 1

在module目录下执行下面命令赋予权限(node01、node02、node03)

cd /opt/module/
  • 1
chown es:es es
  • 1

切换用户es(node01、node02、node03)

su es
  • 1

4.使用es用户解压elasticsearch-2.2.1.zip包至es目录,保证es文件属于用户es:

cd /opt/software
  • 1
unzip elasticsearch-2.2.1.zip -d /opt/module/es
  • 1

5.进入es/conf, 修改elasticsearch.yml配置文件:

cd /opt/module/es/elasticsearch-2.2.1/config/
  • 1
vi elasticsearch.yml
  • 1

修改elasticsearch.yml配置文件的cluster:

# elasticsearch集群名字
cluster.name: my-application
  • 1
  • 2

修改elasticsearch.yml配置文件的node(分发文件后记得修改node):

node.name: node01 
  • 1

修改elasticsearch.yml配置文件的network(分发文件后记得修改network):

network.host: 192.168.153.11
http.port: 9200
  • 1
  • 2

末尾增加防脑裂:

discovery.zen.ping.multicast.enabled: false 
discovery.zen.ping.unicast.hosts: ["192.168.153.11","192.168.153.12", "192.168.153.13"]
discovery.zen.ping_timeout: 120s
client.transport.ping_timeout: 60s
  • 1
  • 2
  • 3
  • 4

6.将提供的plugins文件夹通过Xftp工具传输到 /opt/module/es/elasticsearch-2.2.1/中
7.切换至root用户把plugins文件夹的权限给es用户(可以不做)

su root
  • 1
cd /opt/module/es/elasticsearch-2.2.1/
  • 1
chown es:es -R plugins/
  • 1
su es
  • 1

8.分发其他节点(用es角色分发):

cd /opt/module/es
  • 1
scp -r elasticsearch-2.2.1/ es@node02:/opt/module/es/
  • 1
scp -r elasticsearch-2.2.1/ es@node03:/opt/module/es/
  • 1

9.分别修改配置文件的主机名和IP地址

cd /opt/module/es/elasticsearch-2.2.1/config/
  • 1
vi elasticsearch.yml
  • 1

分别将node02和node03的elasticsearch.yml中主机名和IP地址修改成自己的。
10.进入bin目录,启动脚本:

cd /opt/module/es/elasticsearch-2.2.1/bin/
  • 1
./elasticsearch
  • 1

11.测试插件效果
http://node01:9200/_plugin/head
http://192.168.153.11:9200/_plugin/head?pretty
在这里插入图片描述

七、小结

至此Hadoop生态系统环境已经搭建完毕,首先搭建Hadoop分布式系统并通过Zookeeper集群与Yarn集群实现系统的高可用性,其次安装MySQL并搭建Hive的多节点集群,然后安装HBase数据库并搭建HBase的集群,最后分别安装哨兵模式的Redis集群和ElasticSearch集群。

集群启动步骤如下:
node02、node03、node04启动Zookeeper:

zkServer.sh start
  • 1

node01启动Hadoop:

start-all.sh
  • 1

node03、node04启动Yarn:

yarn-daemon.sh start resourcemanager
  • 1

node01启动HBase集群

start-hbase.sh
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/416327
推荐阅读
相关标签
  

闽ICP备14008679号