單機(jī)環(huán)境安裝Zookeeper+Hadoop+Hbase+Phoenix

單機(jī)環(huán)境安裝Zookeeper+Hadoop+Hbase+Phoenix

環(huán)境準(zhǔn)備

系統(tǒng)環(huán)境:Centos 7.6

配置映射

[root@ java]# vim /etc/hosts

添加如下配置:

# 文件末尾增加
本機(jī)IP地址  hadoop001

使用軟件版本說明
因?yàn)锳pache的Hadoop版本和Hbase的版本不太穩(wěn)定所以本文所用的都為CDH版本

<nav>
<a href="# 一.安裝JDK">一.安裝JDK</a>

????????<a href="#1.1 下載并解壓">1.1 下載并解壓</a>

????????<a href="#1.2 設(shè)置環(huán)境變量">1.2 設(shè)置環(huán)境變量</a>

????????<a href="#1.3 檢查是否安裝成功">1.3 檢查是否安裝成功</a>

<a href="#二.安裝Zookeeper">二.安裝Zookeeper</a>

????????<a href="#2.1 下載">2.1 下載</a>

????????<a href="#2.2 解壓">2.2 解壓</a>

????????<a href="#2.3 配置環(huán)境變量">2.3 配置環(huán)境變量</a>

????????<a href="#2.4 修改配置">2.4 修改配置</a>

????????<a href="#2.5 啟動(dòng)">2.5 啟動(dòng)</a>

????????<a href="#2.6 驗(yàn)證是否安裝成功">2.6 驗(yàn)證是否安裝成功</a>

<a href="#三.安裝Hadoop">三.安裝Hadoop</a>

????????<a href="#3.1 配置免密登錄">3.1 配置免密登錄</a>

????????????<a href="#3.1.1 生成公私鑰">3.1.1 生成公私鑰</a>

????????????<a href="#3.1.2 授權(quán)">3.1.2 授權(quán)</a>

????????<a href="#3.2 Hadoop(HDFS)環(huán)境搭建">3.2 Hadoop(HDFS)環(huán)境搭建</a>

????????????<a href="#3.2.1 下載并解壓">3.2.1 下載并解壓</a>

????????????<a href="#3.2.2 配置環(huán)境變量">3.2.2 配置環(huán)境變量</a>

????????????<a href="#3.2.3 修改Hadoop配置">3.2.3 修改Hadoop配置</a>

????????????<a href="#3.2.4 關(guān)閉防火墻">3.2.4 關(guān)閉防火墻</a>

????????????<a href="#3.2.5 初始化">3.2.5 初始化</a>

????????????<a href="#3.2.6 啟動(dòng)HDFS">3.2.6 啟動(dòng)HDFS</a>

????????????<a href="#3.2.7 驗(yàn)證是否啟動(dòng)成功">3.2.7 驗(yàn)證是否啟動(dòng)成功</a>

????????<a href="#3.3 Hadoop(YARN)環(huán)境搭建">3.3 Hadoop(YARN)環(huán)境搭建</a>

????????????<a href="#3.3.1 修改配置">3.3.1 修改配置</a>

????????????<a href="#3.3.2 啟動(dòng)服務(wù)">3.3.2 啟動(dòng)服務(wù)</a>

????????????<a href="#3.3.3 驗(yàn)證是否啟動(dòng)成功">3.3.3 驗(yàn)證是否啟動(dòng)成功</a>

<a href="#四.安裝Hbase">四.安裝Hbase</a>

????????<a href="#4.1 軟件下載解壓">4.1 軟件下載解壓</a>

????????<a href="#4.2 配置環(huán)境變量">4.2 配置環(huán)境變量</a>

????????<a href="#4.3 進(jìn)行HBase相關(guān)配置">4.3 進(jìn)行HBase相關(guān)配置</a>

????????<a href="#4.4 啟動(dòng)Hbase">4.4 啟動(dòng)Hbase</a>

????????<a href="#4.5 驗(yàn)證是否安裝成功">4.5 驗(yàn)證是否安裝成功</a>

<a href="#五.安裝Phoenix">五.安裝Phoenix</a>

????????<a href="#5.1 下載并解壓">5.1 下載并解壓</a>

????????<a href="#5.2 拷貝Jar包">5.2 拷貝Jar包</a>

????????<a href="#5.3 重啟 Region Servers">5.3 重啟 Region Servers</a>

????????<a href="#5.4 啟動(dòng)Phoenix">5.4 啟動(dòng)Phoenix</a>

????????<a href="#5.5 驗(yàn)證是否安裝成功">5.5 驗(yàn)證是否安裝成功</a>

一.安裝JDK

JDK 版本:jdk 1.8.0_20

<a name="1.1 下載并解壓">1.1 下載并解壓</a>

官網(wǎng) 下載所需版本的 JDK,這里我下載的版本為JDK 1.8 ,下載后進(jìn)行解壓:

[root@ java]# tar -zxvf jdk-8u201-linux-x64.tar.gz

<a name="1.2 設(shè)置環(huán)境變量">1.2 設(shè)置環(huán)境變量</a>

[root@ java]# vi /etc/profile

添加如下配置:

export JAVA_HOME=/usr/java/jdk1.8.0_201  
export JRE_HOME=${JAVA_HOME}/jre  
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
export PATH=${JAVA_HOME}/bin:$PATH

執(zhí)行 source 命令,使得配置立即生效:

[root@ java]# source /etc/profile

<a name="1.3. 檢查是否安裝成功">1.3. 檢查是否安裝成功</a>

[root@ java]# java -version

顯示出對(duì)應(yīng)的版本信息則代表安裝成功。

java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

<a name="二.安裝Zookeeper">二.安裝Zookeeper</a>

<a name="2.1 下載">2.1 下載</a>

下載對(duì)應(yīng)版本 Zookeeper,這里我下載的版本 3.4.14。官方下載地址:https://archive.apache.org/dist/zookeeper/

# wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz

<a name="2.2 解壓">2.2 解壓</a>

# tar -zxvf zookeeper-3.4.14.tar.gz

<a name="2.3 配置環(huán)境變量">2.3 配置環(huán)境變量</a>

# vim /etc/profile

添加環(huán)境變量:

export ZOOKEEPER_HOME=/usr/app/zookeeper-3.4.14
export PATH=$ZOOKEEPER_HOME/bin:$PATH

使得配置的環(huán)境變量生效:

# source /etc/profile

<a name="2.4 修改配置">2.4 修改配置</a>

進(jìn)入安裝目錄的 conf/ 目錄下,拷貝配置樣本并進(jìn)行修改:

# cp zoo_sample.cfg  zoo.cfg

指定數(shù)據(jù)存儲(chǔ)目錄和日志文件目錄(目錄不用預(yù)先創(chuàng)建,程序會(huì)自動(dòng)創(chuàng)建),修改后完整配置如下:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/log
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

配置參數(shù)說明:

  • tickTime:用于計(jì)算的基礎(chǔ)時(shí)間單元。比如 session 超時(shí):N*tickTime;
  • initLimit:用于集群,允許從節(jié)點(diǎn)連接并同步到 master 節(jié)點(diǎn)的初始化連接時(shí)間,以 tickTime 的倍數(shù)來表示;
  • syncLimit:用于集群, master 主節(jié)點(diǎn)與從節(jié)點(diǎn)之間發(fā)送消息,請(qǐng)求和應(yīng)答時(shí)間長度(心跳機(jī)制);
  • dataDir:數(shù)據(jù)存儲(chǔ)位置;
  • dataLogDir:日志目錄;
  • clientPort:用于客戶端連接的端口,默認(rèn) 2181

<a name="2.5 啟動(dòng)">2.5 啟動(dòng)</a>

由于已經(jīng)配置過環(huán)境變量,直接使用下面命令啟動(dòng)即可:

zkServer.sh start

<a name="2.6 驗(yàn)證是否安裝成功">2.6 驗(yàn)證是否安裝成功</a>

使用 JPS 驗(yàn)證進(jìn)程是否已經(jīng)啟動(dòng),出現(xiàn) QuorumPeerMain 則代表啟動(dòng)成功。

[root@hadoop001 bin]# jps
3814 QuorumPeerMain

<a name="三.安裝Hadoop">三.安裝Hadoop</a>

<a name="3.1 配置免密登錄">3.1 配置免密登錄</a>

Hadoop 組件之間需要基于 SSH 進(jìn)行通訊。

<a name="3.1.1 生成公私鑰">3.1.1 生成公私鑰</a>

執(zhí)行下面命令行生成公匙和私匙:

ssh-keygen -t rsa

<a name="3.1.2 授權(quán)">3.1.2 授權(quán)</a>

進(jìn)入 ~/.ssh 目錄下,查看生成的公匙和私匙,并將公匙寫入到授權(quán)文件:

[root@@hadoop001 sbin]#  cd ~/.ssh
[root@@hadoop001 .ssh]# ll
-rw-------. 1 root root 1675 3 月  15 09:48 id_rsa
-rw-r--r--. 1 root root  388 3 月  15 09:48 id_rsa.pub
# 寫入公匙到授權(quán)文件
[root@hadoop001 .ssh]# cat id_rsa.pub >> authorized_keys
[root@hadoop001 .ssh]# chmod 600 authorized_keys

<a name="3.2 Hadoop(HDFS)環(huán)境搭建">3.2 Hadoop(HDFS)環(huán)境搭建</a>

<a name="3.2.1 下載并解壓">3.2.1 下載并解壓</a>

下載 Hadoop 安裝包,這里我下載的是 CDH 版本的,下載地址為:http://archive.cloudera.com/cdh5/cdh/5/

# 解壓
tar -zvxf hadoop-2.6.0-cdh5.16.2.tar.gz 

<a name="3.2.2 配置環(huán)境變量">3.2.2 配置環(huán)境變量</a>

# vi /etc/profile

配置環(huán)境變量:

export HADOOP_HOME=/usr/app/hadoop-2.6.0-cdh5.16.2
export  PATH=${HADOOP_HOME}/bin:$PATH

執(zhí)行 source 命令,使得配置的環(huán)境變量立即生效:

# source /etc/profile

<a name="3.2.3 修改Hadoop配置">3.2.3 修改Hadoop配置</a>

進(jìn)入 ${HADOOP_HOME}/etc/hadoop/ 目錄下,修改以下配置:

1. hadoop-env.sh

# JDK安裝路徑
export  JAVA_HOME=/usr/java/jdk1.8.0_201/

2. core-site.xml

<configuration>
    <property>
        <!--指定 namenode 的 hdfs 協(xié)議文件系統(tǒng)的通信地址-->
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop001:8020</value>
    </property>
    <property>
        <!--指定 hadoop 存儲(chǔ)臨時(shí)文件的目錄-->
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/tmp</value>
    </property>
</configuration>

3. hdfs-site.xml

指定副本系數(shù)和臨時(shí)文件存儲(chǔ)位置:

<configuration>
    <property>
        <!--由于我們這里搭建是單機(jī)版本,所以指定 dfs 的副本系數(shù)為 1-->
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

4. slaves

配置所有從屬節(jié)點(diǎn)的主機(jī)名或 IP 地址,由于是單機(jī)版本,所以指定本機(jī)即可,編輯slaves設(shè)置為:

hadoop001

<a name="3.2.4 關(guān)閉防火墻">3.2.4 關(guān)閉防火墻</a>

不關(guān)閉防火墻可能導(dǎo)致無法訪問 Hadoop 的 Web UI 界面:

# 查看防火墻狀態(tài)
sudo firewall-cmd --state
# 關(guān)閉防火墻:
sudo systemctl stop firewalld.service

<a name="3.2.5 初始化">3.2.5 初始化</a>

第一次啟動(dòng) Hadoop 時(shí)需要進(jìn)行初始化,進(jìn)入 ${HADOOP_HOME}/bin/ 目錄下,執(zhí)行以下命令:

[root@hadoop001 bin]# ./hdfs namenode -format

<a name="3.2.6 啟動(dòng)HDFS">3.2.6 啟動(dòng)HDFS</a>

進(jìn)入 ${HADOOP_HOME}/sbin/ 目錄下,啟動(dòng) HDFS:

[root@hadoop001 sbin]# ./start-dfs.sh

<a name="3.2.7 驗(yàn)證是否啟動(dòng)成功">3.2.7 驗(yàn)證是否啟動(dòng)成功</a>

方式一:執(zhí)行 jps 查看 NameNodeDataNode 服務(wù)是否已經(jīng)啟動(dòng):

[root@hadoop001 hadoop-2.6.0-cdh5.16.2]# jps
9137 DataNode
9026 NameNode
9390 SecondaryNameNode

方式二:查看 Web UI 界面,端口為 50070
<div><img src="http://ww1.sinaimg.cn/large/c4d294bfly1gawcrlnew0j22bg16o48d.jpg"/></div>

<a name="3.3 Hadoop(YARN)環(huán)境搭建"></a>

<a name="3.3.1 修改配置">3.3.1 修改配置</a>

進(jìn)入 ${HADOOP_HOME}/etc/hadoop/ 目錄下,修改以下配置:

1. mapred-site.xml

# 如果沒有mapred-site.xml,則拷貝一份樣例文件后再修改
cp mapred-site.xml.template mapred-site.xml
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

2. yarn-site.xml

<configuration>
    <property>
        <!--配置 NodeManager 上運(yùn)行的附屬服務(wù)。需要配置成 mapreduce_shuffle 后才可以在 Yarn 上運(yùn)行 MapReduce 程序。-->
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

<a name="3.3.2 啟動(dòng)服務(wù)">3.3.2 啟動(dòng)服務(wù)</a>

進(jìn)入 ${HADOOP_HOME}/sbin/ 目錄下,啟動(dòng) YARN:

./start-yarn.sh

<a name="3.3.3 驗(yàn)證是否啟動(dòng)成功">3.3.3 驗(yàn)證是否啟動(dòng)成功</a>

方式一:執(zhí)行 jps 命令查看 NodeManagerResourceManager 服務(wù)是否已經(jīng)啟動(dòng):

[root@hadoop001 hadoop-2.6.0-cdh5.16.2]# jps
9137 DataNode
9026 NameNode
12294 NodeManager
12185 ResourceManager
9390 SecondaryNameNode

方式二:查看 Web UI 界面,端口號(hào)為 8088
<div><img src="http://ww1.sinaimg.cn/large/c4d294bfly1gawcteetpvj22bg16qwr9.jpg"/></div>

<a name="四.安裝Hbase">四.安裝Hbase</a>

HBase 的版本必須要與 Hadoop 的版本兼容,不然會(huì)出現(xiàn)各種 Jar 包沖突。這里我 Hadoop 安裝的版本為 hadoop-2.6.0-cdh5.16.2,為保持版本一致,選擇的 HBase 版本為 hbase-1.2.0-cdh5.14.2 。所有軟件版本如下:

  • Hadoop 版本: hadoop-2.6.0-cdh5.16.2
  • HBase 版本: hbase-1.2.0-cdh5.14.2
  • JDK 版本:JDK 1.8

這里為版本兼容情況
<div align="center"> <img src="http://ww1.sinaimg.cn/large/c4d294bfly1gawbiwzz7bj20r50n2myr.jpg"/></div>

<a name="4.1 軟件下載解壓">4.1 軟件下載解壓</a>

下載后進(jìn)行解壓,下載地址:http://archive.cloudera.com/cdh5/cdh/5/

# tar -zxvf hbase-1.2.0-cdh5.14.2.tar.gz

<a name="4.2 配置環(huán)境變量">4.2 配置環(huán)境變量</a>

# vim /etc/profile

添加環(huán)境變量:

export HBASE_HOME=/usr/app/hbase-1.2.0-cdh5.14.2
export PATH=$HBASE_HOME/bin:$PATH

使得配置的環(huán)境變量生效:

# source /etc/profile

<a name="4.3 進(jìn)行HBase相關(guān)配置">4.3 進(jìn)行HBase相關(guān)配置</a>

1.修改安裝目錄下的 conf/hbase-env.sh,指定 JDK 的安裝路徑:

# The java implementation to use.  Java 1.7+ required.
export JAVA_HOME=/usr/java/jdk1.8.0_201
# 使用外部zookeeper管理hbase
export HBASE_MANAGES_ZK=flase

2.修改安裝目錄下的 conf/hbase-site.xml,增加如下配置 (hadoop001 為主機(jī)名):

<configuration>
 <!--指定 HBase 以分布式模式運(yùn)行-->   
 <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
 </property>
 <!--指定 HBase 數(shù)據(jù)存儲(chǔ)路徑為 HDFS 上的 hbase 目錄,hbase 目錄不需要預(yù)先創(chuàng)建,程序會(huì)自動(dòng)創(chuàng)建-->   
 <property>
    <name>hbase.rootdir</name>
    <value>hdfs://hadoop001:8020/hbase</value>
  </property>
    <!--指定 zookeeper 數(shù)據(jù)的存儲(chǔ)位置-->   
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/usr/local/zookeeper/data</value>
  </property>
  <!--指定 Hbase Web UI 默認(rèn)端口-->  
  <property>
    <name>hbase.master.info.port</name>
    <value>60010</value>
  </property>
  <!--指定外置zookeeper--> 
  <property>
   <name>hbase.zookeeper.quorum</name>
   <value>hadoop001:2181</value>
  </property>
</configuration>

3.修改安裝目錄下的 conf/regionservers,指定 region servers 的地址,修改后其內(nèi)容如下:

hadoop001

<a name="4.4 啟動(dòng)Hbase">4.4 啟動(dòng)Hbase</a>

# bin/start-hbase.sh

<a name="4.5 驗(yàn)證是否安裝成功">4.5 驗(yàn)證是否安裝成功</a>

驗(yàn)證方式一 :使用 jps 命令查看進(jìn)程。其中 HMaster,HRegionServer 是 HBase 的進(jìn)程,HQuorumPeer 是 HBase 內(nèi)置的 Zookeeper 的進(jìn)程,其余的為 HDFS 和 YARN 的進(jìn)程。

[root@hadoop001 conf]# jps
28688 NodeManager
25824 GradleDaemon
10177 Jps
22083 HRegionServer
20534 DataNode
20807 SecondaryNameNode
18744 Main
20411 NameNode
21851 HQuorumPeer
28573 ResourceManager
21933 HMaster

驗(yàn)證方式二 :訪問 HBase Web UI 界面,需要注意的是 1.2 版本的 HBase 的訪問端口為 60010

<div><img src="http://ww1.sinaimg.cn/large/c4d294bfly1gawcusk23aj22bc170ail.jpg"/></div>

<a name="五.安裝Phoenix">五.安裝Phoenix</a>

Phoenix 是 HBase 的開源 SQL 中間層,它允許你使用標(biāo)準(zhǔn) JDBC 的方式來操作 HBase 上的數(shù)據(jù)。在 Phoenix 之前,如果你要訪問 HBase,只能調(diào)用它的 Java API,但相比于使用一行 SQL 就能實(shí)現(xiàn)數(shù)據(jù)查詢,HBase 的 API 還是過于復(fù)雜。Phoenix 的理念是 we put sql SQL back in NOSQL,即你可以使用標(biāo)準(zhǔn)的 SQL 就能完成對(duì) HBase 上數(shù)據(jù)的操作。同時(shí)這也意味著你可以通過集成 Spring Data JPAMybatis 等常用的持久層框架來操作 HBase。

其次 Phoenix 的性能表現(xiàn)也非常優(yōu)異,Phoenix 查詢引擎會(huì)將 SQL 查詢轉(zhuǎn)換為一個(gè)或多個(gè) HBase Scan,通過并行執(zhí)行來生成標(biāo)準(zhǔn)的 JDBC 結(jié)果集。它通過直接使用 HBase API 以及協(xié)處理器和自定義過濾器,可以為小型數(shù)據(jù)查詢提供毫秒級(jí)的性能,為千萬行數(shù)據(jù)的查詢提供秒級(jí)的性能。同時(shí) Phoenix 還擁有二級(jí)索引等 HBase 不具備的特性,因?yàn)橐陨系膬?yōu)點(diǎn),所以 Phoenix 成為了 HBase 最優(yōu)秀的 SQL 中間層。

<a name="5.1 下載并解壓">5.1 下載并解壓</a>

官方針對(duì) Apache 版本和 CDH 版本的 HBase 均提供了安裝包,按需下載即可。官方下載地址: http://phoenix.apache.org/download.html

# 下載
wget http://mirror.bit.edu.cn/apache/phoenix/apache-phoenix-4.14.0-cdh5.14.2/bin/apache-phoenix-4.14.0-cdh5.14.2-bin.tar.gz
# 解壓
tar tar apache-phoenix-4.14.0-cdh5.14.2-bin.tar.gz

<a name="5.2 拷貝Jar包">5.2 拷貝Jar包</a>

按照官方文檔的說明,需要將 phoenix server jar 添加到所有 Region Servers 的安裝目錄的 lib 目錄下。

這里由于我搭建的是 HBase 偽集群,所以只需要拷貝到當(dāng)前機(jī)器的 HBase 的 lib 目錄下。如果是真實(shí)集群,則使用 scp 命令分發(fā)到所有 Region Servers 機(jī)器上。

cp /usr/app/apache-phoenix-4.14.0-cdh5.14.2-bin/phoenix-4.14.0-cdh5.14.2-server.jar /usr/app/hbase-1.2.0-cdh5.14.2/lib

<a name="5.3 重啟 Region Servers">5.3 重啟 Region Servers</a>

# 停止Hbase
stop-hbase.sh
# 啟動(dòng)Hbase
start-hbase.sh

<a name="5.4 啟動(dòng)Phoenix">5.4 啟動(dòng)Phoenix</a>

在 Phoenix 解壓目錄下的 bin 目錄下執(zhí)行如下命令,需要指定 Zookeeper 的地址:

  • 如果 HBase 采用 Standalone 模式或者偽集群模式搭建,則默認(rèn)采用內(nèi)置的 Zookeeper 服務(wù),端口為 2181;
  • 如果是 HBase 是集群模式并采用外置的 Zookeeper 集群,則按照自己的實(shí)際情況進(jìn)行指定。
# ./sqlline.py hadoop001:2181

<a name="5.5 驗(yàn)證是否安裝成功">5.5 驗(yàn)證是否安裝成功</a>

啟動(dòng)后則進(jìn)入了 Phoenix 交互式 SQL 命令行,可以使用 !table!tables 查看當(dāng)前所有表的信息

<div><img src="http://ww1.sinaimg.cn/large/c4d294bfly1gawcxfmjfjj227m0xsdz6.jpg"/></div>

本文內(nèi)容部分摘自[https://github.com/heibaiying/BigData-Notes]

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容