HBASE实战(1):亿级数据从 MySQL 到 Hbase 的三种同步方案与实践(一)环境搭建

原文:https://blog.csdn.net/rlnlo2pnefx9c/article/details/108288956

1.导语

大家好,我是光城,下面是我之前在gitchat上发布的一个资料,今天全部开源!源码全部存放在本人github仓库,地址:https://github.com/Light-City/dbSyncScheme,欢迎大家提issue与star!接下来进入本节chat内容!PPT点击阅读原文可直达。

本节亿级数据从 MySQL 到 Hbase 的三种同步方案与实践将主要围绕下面架构图中的三种方法进行实践与讲解。

 

 

 

2.工欲善其事,必先利其器

2.1 环境需知

我的实验环境为:Ubuntu16.04+hadoop伪分布式(所以重点会介绍伪分布式环境部署),本节实验可以适用于大部分Linux。

实验的环境有:

  • MySQL

  • Hadoop伪分布式/完全分布式

  • HBase

  • Phoenix

  • Zookeeper

  • Kafka

  • Maxwell

  • Flink

所以,本节内容先从以上环境部署讲起,再来逐步分析亿级数据从 MySQL 到 Hbase 的三种同步方案与实践。

注意:本节不会非常深入的去讲解HBase、Phoenix、Kafka、Maxwell、Flink等内容,因为涉及的面非常多,光一个就可以讲很多天了,所以本节将具体的某一块与我们的场景相结合进行阐述,谈谈他们的具体应用与使用,相信大家看完后,对这些会有更加深入的理解!

2.2 伪分布式环境部署

2.2.1.准备工作

【JAVA】

Hadoop环境需要JAVA环境,所以首先得安装Java,而Ubuntu默认Java为OpenJdk,需要先卸载,再安装Oracle。除此之外,也可以不用卸载OpenJDK,将Oracle JAVA设为默认的即可。

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

关于java配置只要输入java或者javac看到输出,配置成功。

【用户】

在Ubuntu或者类Unix系统中,用户可以通过下列命令添加创建用户:

sudo useradd -s /bin/bash -g hadoop -d /home/hadoop -m hadoop

如果提示hadoop不再sudoers文件中,执行下列命令:

vi /etc/sudoers

编辑上述文件:

# User privilege specification
root    ALL=(ALL:ALL) ALL
hadoop    ALL=(ALL:ALL) ALL  # 添加此行

再执行上述命令:

light@city:~$ sudo useradd -s /bin/bash -g hadoop -d /home/hadoop -m hadoop
useradd:“hadoop”组不存在

添加用户组:

light@city:/home$ sudo groupadd hadoop

再次执行即可:

light@city:~$ sudo useradd -s /bin/bash -g hadoop -d /home/hadoop -m hadoop

设置或修改密码:

sudo passwd hadoop

【SSH】

安装ssh

sudo apt-get install openssh-server

配置免密登陆

su - hadoop
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys

然后输入

ssh localhost

此时不需要输入密码,说明成功!

注意:关于ssh免秘登陆失败问题,大家可以通过以下方法进行尝试,大部分问题在于目录及文件权限!

sudo chmod 755 $HOME
sudo chmod 600 id_rsa
sudo chmod 600 id_rsa.pub
sudo chmod 644 authorized_keys

2.2.2 伪分布式

【Hadoop】

  • 下载及安装

在下列镜像中下载Hadoop版本,我下载的3.0.2。

https://mirrors.cnnic.cn/apache/hadoop/common/

wget https://mirrors.cnnic.cn/apache/hadoop/common/hadoop-3.0.2/hadoop-3.0.2.tar.gz
tar zxvf hadoop-3.0.2.tar.gz
sudo mv hadoop-3.0.2 /usr/local/hadoop
  • 配置

编辑etc/hadoop/core-site.xmlconfiguration配置为

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

注意:一定要看本机的9000端口是否被占用,如果被占用了,后面就启动不出来NameNode!

关于查看本机的9000端口是否被占用:

sudo netstat -alnp | grep 9000

 

 

会发现9000端口被php-fpm给占用了,所以这里得修改为其他端口,比如我修改为9012,然后可以再次执行这个命令,会发现没被占用,说明可行!

编辑etc/hadoop/hdfs-site.xmlconfiguration配置为

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>
  • 初始化

格式化HDFS

bin/hdfs namenode -format

注意:格式化执行一次即可!

启动NameNode和DataNode

sbin/start-dfs.sh

这时在浏览器中访问http://localhost:9870/,可以看到NameNode相关信息。

http://localhost:9864/查看DataNode相关信息。

由于hadoop3.x版本与2.x版本监听端口不一样,所以如果还是原先的50070便访问不到相关信息,不知道上述9870或者9864,没关系,可以通过下面命令查看!

输入netstat命令即可查看tcp监听端口:

sudo netstat -ntlp

 

 jps_ntlp

上述两个重要端口,9864后面可以看到进程ID为17270,通过JPS查看可以看到对应DataNode,9870类似方法。

 

 hadoop

  • 配置YARN

编辑etc/hadoop/mapred-site.xmlconfiguration配置为

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

编辑etc/hadoop/yarn-site.xmlconfiguration配置为

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

启动YARN

sbin/start-yarn.sh

查看进程:

Jps
NodeManager
SecondaryNameNode
NameNode
ResourceManager
DataNode

YARN就是上述的资源管理:ResourceManager。

同理,可以通过上述方法查看ResourceManager的端口,默认为8088。

浏览器输入:http://localhost:8088/cluster

 

 hadoop

  • 启动与停止

启动:

sbin/start-dfs.sh
sbin/start-yarn.sh

停止:

sbin/stop-dfs.sh
sbin/stop-yarn.sh

至此,伪分布式搭建完毕!后面开始HBase与Phoenix搭建!

【HBase】

  • 下载安装

https://mirrors.cnnic.cn/apache/hbase/

wget https://mirrors.cnnic.cn/apache/hbase/stable/hbase-1.4.9-bin.tar.gz
tar zxvf hbase-1.4.9-bin.tar.gz
sudo mv zxvf hbase-1.4.9-bin /usr/local/hbase
  • 单机HBase配置

编辑conf/hbase-site.xmlconfiguration配置为

<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://localhost:9012/hbase</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/home/hadoop/zookeeper</value>
  </property>
</configuration

启动

bin/start-hbase.sh

jps查看进程:

HMaster
Jps

终端

bin/hbase shell

 

 hbaseshell

如果想要关闭HBase,则输入:

bin/stop-hbase.sh
  • HBase伪分布式配置

编辑conf/hbase-site.xmlconfiguration中添加

<property>
  <name>hbase.cluster.distributed</name>
  <value>true</value>
</property>

然后修改root由本地文件系统到HDFS,编辑conf/hbase-site.xmlhbase.rootdir值由

file:///home/hadoop/hbase

修改为

  1.  
    hdfs://localhost:9012/hbase
  2.  
     

注意后面的端口号9012,需要保证与Hadoop DFS配置中的fs.defaultFS相同!

这样子修改后,会在hdfs文件系统中看到HBase目录,当然你也可以不用配置此项!

上述配置完毕后,保存后,重启HBase即可!

【封装】

每次启动这些输入太多命令,太繁琐,直接一个bash脚本搞定,首先进入/usr/local,然后再运行这个脚本!

启动脚本:

#!/bin/bash
hadoop/sbin/start-dfs.shkuangjia
hadoop/sbin/start-yarn.sh
hbase/bin/start-hbase.sh

停止脚本:

#!/bin/bash
hadoop/sbin/stop-dfs.sh
hadoop/sbin/stop-yarn.sh
hbase/bin/stop-hbase.sh

【zookeeper】

由于Hbase自带了zookeeper,一开始使用自带的,后来发现出了很多问题,换成自己配置zookeeper,配置方法如下:

最近做的数据迁移,当上游数据流向下游过大的时候,HBase就会崩溃。HBase自带的Zookeeper出了问题,就尝试自己安装独立的Zookeeper。

(1)禁用HBase自带的Zookeeper

修改 ./conf/hbase-env.sh

export HBASE_MANAGES_ZK=false(如果值为true,则使用自带的Zookeeper,会随着HBase一起启动)
 

(2)安装及配置独立Zookeeper

Zookeeper最新的版本可以通过官网获取

wget http://apache.fayea.com/zookeeper/zookeeper-xxx/zookeeper-xxx.tar.gz
tar xfz zookeeper-xxx.tar.gz
mv zookeeper-xxx /usr/local/zookeeper

拷贝配置文件

cd zookeeper-xxx/conf/
cp zoo_sample.cfg zoo.cfg

修改配置项

dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/logs

dataDir:Zookeeper保存节点数据的目录。dataLogDir:Zookeeper保存节点数据的日志。

如果没有这个目录,就创建一下。

(3)HBase配置

拷贝 zoo.cfg 到 hbase/conf/ 目录下

  1.  
    cp zoo.cfg /usr/local/hbase/conf/
  2.  
     

这是官方文档推荐的做法,如果不拷贝 zoo.cfg,在 hbase-site.xml 中也可以对Zookeeper进行相关配置,但HBase会优先使用 zoo.cfg(如果有的话)的配置

修改 hbase-site.xml

在原文件上加入:

<property>
     <name>hbase.cluster.distributed</name>
     <value>true</value>
</property>

如果不加的话,在启动独立安装的Zookeeper后,HBase不能正常启动。

(4)启动Zookeeper

./bin/zkServer.sh start

(5)检查服务是否启动

  1. ps -ef | grep zookeeper
  2.  
     

(6)启动HBase

在成功启动Zookeeper后,就可以启动HBase了:

  1.  
    ./bin/start-hbase.sh
  2.  
     

【Phoenix】

版本要与HBase相匹配!

下载apache-phoenix-4.14.2-HBase-1.4-bin.tar.gz

安装

  1. tar -xvf apache-phoenix-4.14.2-HBase-1.4-bin.tar.gz
  2.  
    mv apache-phoenix-4.14.2-HBase-1.4-bin.tar.gz /usr/local/phoenix
  3.  
     
  4.  
     

配置

将hbase-site.xml配置文件拷贝到phoenix的bin目录下

启动

首先启动zookeeper与hbase。

hadoop@city:  ./start_zk.sh
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
hadoop@city: ./start_hbase.sh
running master, logging to /usr/local/hbase/logs/hbase-hadoop-master-city.out
: running regionserver, logging to /usr/local/hbase/logs/hbase-hadoop-regionserver-city.out

启动phoenix:

sqlline.py localhost

 

 install_phoenix

【Kafka】

什么是Kafka?

Kafka 是一种分布式的,基于发布 / 订阅的消息系统。在这里可以把Kafka理解为生产消费者模式。

Kafka是使用Java开发的应用程序,Kafka需要运行Zookeeper,两者都需要Java,所以在需要安装ZookeeperKafka之前,先安装Java环境。

启动Zookeeper

直接输入zkServer.sh start即可!

 

 zookeeper_start

Kafka安装及配置

Kafka下载地址:

http://kafka.apache.org/downloads

同上述安装,这里下载.tgz文件,也是解压后移动到/usr/local即可!

关于配置文件可以直接采用默认的即可。

启动Kafka

  1.  
    ./bin/kafka-server-start.sh ./config/server.properties
     
     

 

 enter image description here

Topic创建

当使用下面maxwell提取出来的binlog信息的时候,默认使用kafka进行消费。

  1.  
    ./kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
  2.  
     

发布与订阅

向Topic上发布消息,按Ctrl+D结束:

  1.  
    ./kafka-console-producer.sh --broker-list localhost:9092 --topic test
  2.  

 

 enter image description here

从Topic上接收消息,按Ctrl+C结束:

  1.  
    ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
  2.  
     

recv_mesg

【Maxwell】

Maxwell是什么?

官网原语:Maxwell's daemon, a mysql-to-json kafka producer。

这里解释一下Maxwell是将mysql binlog中的insert、update等操作提取出来,并以json数据返回作为kafka生产者。

当然自己也可以用编程实现binlog数据提取,并返回一个json数据。

下载地址:http://maxwells-daemon.io/

安装方式同上。

mysql配置Maxwell

Maxwell配置文件中默认用户名密码均为maxwell,所以需要在mysql中做相应的授权。

mysql> GRANT ALL on maxwell.* to'maxwell'@'%' identified by 'maxwell';
mysql> GRANT SELECT, REPLICATION CLIENT,REPLICATION SLAVE on *.* to 'maxwell'@'%';
mysql> flush privileges;

配置Maxwell

  1.  
    cp config.properties.example config.properties
  2.  
    vi config.properties
  3.  
     

maxwell配置:

log_level=info
# 默认生产者
producer=kafka
kafka.bootstrap.servers=localhost:9092
 
# mysql login info
host=localhost
user=maxwell
password=maxwell
 
# kafka配置
kafka_topic=test
kafka.compression.type=snappy
kafka.acks=all
kinesis_stream=test

启动maxwell

  1.  
    ./maxwell/bin/maxwell --user='maxwell' --password='maxwell' --host='127.0.0.1' --producer=kafka --kafka.bootstrap.servers=localhost:9092 --kafka_topic=test
  2.  
     

当然也可以把上述封装成一个启动脚本:

  1.  
    #!/bin/bash
  2.  
    ./maxwell/bin/maxwell --user='maxwell' --password='maxwell' --host='127.0.0.1' --producer=kafka --kafka.bootstrap.servers=localhost:9092 --kafka_topic=test
  3.  
     

直接启动:

  1.  
    ./start_maxwell.sh
  2.  

 

 maxwell

【Flink】

什么是Flink?

干说Flink比较抽象,直接举个例子吧,就拿本节的同步来说,本节使用的Flink就是做实时流计算的一个场景ETL,数据仓库的实时同步,当上游下发数据到Kafka队列中,然后通过Flink程序做window的收集,并将数据sink到Hbase中。

下载:https://flink.apache.org/

安装的时候,直接进行解压缩并配置path环境即可!

解压缩

  1.  
    tar -zxf xxx.tgz
  2.  
    mv xxx /usr/local
  3.  
     

配置环境变量

  1.  
    vim ~/.bashrc
  2.  
    export FLNK_HOME=/usr/local/flink
  3.  
    export PATH=$FLINK_HOME/bin:$PATH
  4.  
     

使上述生效:

  1.  
    source ~/.bashrc
  2.  
     

启动与关闭flink

  1.  
    cd flink/bin
  2.  
    ./start-cluster.sh # 启动
  3.  
    stop-cluster.sh # 关闭
posted @ 2020-12-13 12:43  秋华  阅读(428)  评论(0编辑  收藏  举报