使用kettle工具定时抽取mysql数据到hbase集群的表中(一)

前言

最近由于工作中的项目将要用到大数据和底层数据抽取,所以花了些时间研究了相关的技术。已经整理出了相关的文档上传到了csdn,但是现在上传的资源不能自己设置免费, 系统自动生成了5积分才能下载,所以打算在博客中写出来。如果有不对的地方欢迎指正。

 

简介

1.hadoop: 大数据处理框架,三个基本组件hdfs,yarn,Mapreduce

2.hbase:和hadoop配合使用,结构化数据的分布式存储系统

3.kettle:开源的etl工具,用来进行数据抽取

如标题所说,在使用关系型数据库(例如mysql,oracle)时,如果数据是按秒级进行刷新,并且历史数据需要记录方便以后进行数据分许,那么这个数据量就非常大,这个时候使用hadoop来存储非常合适。想要实现最终目的我分了5个步骤。也分为5篇文章来叙述。

1)hadoop集群环境搭建

2)使用kettle抽取mysql数据到hadoop

3)基于hadoop集群搭建hbase

4)抽取mysql数据到hbase表中

5)抽取任务定时执行

hadoop集群环境搭建

 

Linux命令

 

1.向系统中增加了一个新组zu1,同时指定新组的组标识号GID888

groupadd -g 888  zu1

 

 

2.删除已知组zu1

groupdel  zu1

 

3.将组zu1的标识号改为10000,组名修改为zu2

 groupmod –g 10000 -n zu2 zu1

 

4.将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组

 newgrp root

 

 5.查看组信息:cat /etc/group

 

在/etc/group 中的每条记录分四个字段:

  第一字段:用户组名称;

  第二字段:用户组密码;

  第三字段:GID

  第四字段:用户列表,每个用户之间用逗号(,)号分割;本字段可以为空;如果字段为空表示用户组为GID的用户名;

 

 

6.查询 wangkang所属的组都有哪些 

[root@localhost ~]# groups wangkang

wangkang: zu1

7.将用户wangkang从zu1中删除

gpasswd zu1 -d wangkang  

8.将用户wangkang加入到zu1中
usermod -a -G zu1 wangkang

安装前准备

Java版本:1.8

Hadoop版本:2.7.7

两台CentOS7虚拟机,修改主机名,内存分别为2G,固定ip地址。我的虚拟机分别是

master 192.168.93.131(主服务器)

slave1 192.168.93.132(从服务器)

1.使用root用户

分别在两台机器中新建用户wangkang,主目录为/home/wangkang(也可以在安装系统时直接创建出这个用户)

将用户wangkang加入到root用户组中

2.使用root用户

在两台机器的/etc/hosts文件中都加入

192.168.93.131 master

192.168.93.132 slave1

用丛域名解析

3.使用wangkang用户

将java安装包下载到主目录也就是/home/wangkang目录下(也可以下载好上传至linux系统下),输入命令

$cd ~  (进入主目录)

$tar -zxvf jdk-8u8o-linux-x64.tar.gz (解压缩)

4.使用wangkang用户

因为主从服务器需要相互访问,所以需要设置免密登陆

分别在两台机器上执行

$cd ~

$ssh-keygen -t rsa  (生成本机密钥)

在master主机上执行

$cd ~ /.ssh/(进入隐藏文件夹.ssh)

$ssh-copy-id 192.168.93.131(把生成的本机密钥追加到自身的authorized_keys文件里)

$scp/home/wangkang/.ssh/authorized_keys  192.168.93.132:/home/wangkang/.ssh/

(把master中的authorized_keys文件拷贝到slave1中)

在slave1中执行

$ssh-copy-id 192.168.93.132(把生成的本机密钥追加到authorized_keys文件里)

注意:此时authorized_keys问件中包含了两台机器的密钥。

$scp/home/wangkang/.ssh/authorized_keys  192.168.93.131:/home/wangkang/.ssh/

(把slave1中的authorized_keys文件拷贝到master中)

免密登陆配置完成。

验证是否成功:

在master上

$ssh slave1(登陆slave1,第一次登陆需要密码)

输入slave1的密码后成功登陆slave1

$exit(退出)

$ssh slave1(第二次登陆不需要密码)

在slave1上同样去登陆master验证免密登陆是否成功

 

安装配置hadoop

整个过程使用wangkang用户在master主机上进行

1.和解压缩jdk一样,将hadoop压缩包上传或直接下载到wangkang的主目录下,然后解压缩

2.在hadoop解压后的目录下创建新目录

$cd ~/hadoop-2.7.7

$mkdir tmp

$mkdir hdfs

$mkdir hdfs/data

$mkdir hdfs/name

3.修改hadoop的配置文件

进入~/hadoop-2.7.7/etc/hadoop

1)core-site.xml,添加

<property>

     <name>fs.defaultFS</name>

      <value>hdfs://192.168.93.131:9000</value>

   </property>

<property>

      <name>hadoop.tmp.dir</name>

      <value>file:/home/wangkang/hadoop-2.7.7/tmp</value>

     </property>

<property>

      <name>io.file.buffer.size</name>

      <value>131072</value>

</property>

2)hdfs-site.xml,添加

<property>

        <name>dfs.namenode.name.dir</name>

        <value>file:/home/wangkang/hadoop-2.7.7/hdfs/name</value>

</property>

<property>

        <name>dfs.datanode.data.dir</name>

        <value>file:/home/wangkang/hadoop-2.7.7/hdfs/data</value>

</property>

<property>

        <name>dfs.replication</name>

        <value>1</value>

</property>

<property>

        <name>dfs.namenode.secondary.http-address</name>

        <value>192.168.93.131:9001</value>

</property>

<property>

        <name>dfs.namenode.servicerpc-address</name>

        <value>192.168.93.131:10000</value>

</property>

<property>

        <name>dfs.webhdfs.enabled</name>

        <value>true</value>

</property>

3)yarn-site.xml,添加

<property>

        <name>yarn.nodemanager.aux-services</name>

        <value>mapreduce_shuffle</value>

</property>

<property>

        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

        <value>org.apache.hadoop.mapred.ShuffleHandler</value>

</property>

<property>

        <name>yarn.resourcemanager.address</name>

        <value>192.168.93.131:8032</value>

</property>

<property>

        <name>yarn.resourcemanager.scheduler.address</name>

        <value>192.168.93.131:8030</value>

</property>

<property>

        <name>yarn.resourcemanager.resource-tracker.address</name>

        <value>192.168.93.131:8031</value>

</property>

<property>

        <name>yarn.resourcemanager.admin.address</name>

        <value>192.168.93.131:8033</value>

</property>

<property>

        <name>yarn.resourcemanager.webapp.address</name>

        <value>192.168.93.131:8088</value>

</property>

<property>

        <name>yarn.nodemanager.resource.memory-mb</name>

        <value>1024</value>

</property>

 

4)mapred-site.xml(如果没有这个文件,就去找mapred-site.xml.templete文件,拷贝一份后,将其中一个文件名改为mapred-site.xml)

<property>

        <name>mapreduce.framework.name</name>

        <value>yarn</value>

</property>

<property>

        <name>mapreduce.jobhistory.address</name>

        <value>192.168.93.131:10020</value>

</property>

<property>

        <name>mapreduce.jobhistory.webapp.address</name>

        <value>192.168.93.131:19888</value>

</property>

 

 

5)slaves文件(3.0的版本中叫workers文件),添加

192.168.93.132

6)hadoop-env.sh,添加

Export JAVA_HOME=/home/wangkang/jdk_1.8.0_75

7)yarn-env.sh,添加

Export JAVA_HOME=/home/wangkang/jdk_1.8.0_75

8)将master主机上配置好的hadoop文件夹赋值到slave1中

$cd ~

$scp -r ./hadoop-2.7.7  192.168.93.132:/home/wangkang

安装后配置

分别在两台机器上使用root用户,打开/etc/profile文件,添加环境变量

export JAVA_HOME=/home/wangkang/jdk1.8.0_131

export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export HADOOP_HOME=/home/wangkang/hadoop-2.7.7

export HADOOP_COMMON_HOME=$HADOOP_HOME

export HADOOP_HDFS_HOME=$HADOOP_HOME

export HADOOP_MAPRED_HOME=$HADOOP_HOME

export HADOOP_YARN_HOME=$HADOOP_HOME

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/lib

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native

 

执行命令是环境变量立刻生效

#source /etc/profile

此命令生效后,如果关闭终端再打开,会发现环境变量失效了,此时还要再执行一遍#source /etc/profile。

解决办法是关机重启,然后环境变量就会一直生效了。

环境变量失效的后果是,很多脚本命令执行起来会报命令不存在的提示,例如jps

hadoop fs ,start-all.sh

初始化及运行验证(全部使用wangkang用户)

在master机器上执行以下命令:

$hdfs namenode -format

(格式化hdfs,此操作只能执行一次,多次执行可能会出现问题,当看见/name has been succussfully formatted  表名格式化成功)

$start-dfs.sh(启动hdfs,第一次启动较慢)

$start-yarn.sh(启动yarn)

$ jps(使用jps命令查看master机器上的java进程),如下

 

在slave1机器上执行以下命令:

 

通过问页面查看namemode,在虚拟加master上打开浏览器,输入192.168.93.131:50070,可以进入页面

 

但是在本机上访问虚拟机master的192.168.93.131:50070地址却打不开。

查证后发现是虚拟机的防火墙没有关闭,关闭后即可访问

 

分别在master上slave1上使用root用户

#sudo firewall-cmd --state(查看防火墙状态)

#sudo systemctl stop firewalld.service(关闭防火墙,只对本次启动有用,重启后防火墙依然打开)

# sudo systemctl disable firewalld.service(设置防火墙默认关闭,下次启动后不会开启)

如图

 

运行hadoop自带的mapreduce例子wordcount

 

wordcount是一个jar包,一个简单的mapreduce实现,用来统计文件中每个单词出现的次数

1.在/home/wangkang下创建一个叫做test.txt的文件,里面写上几个单词,如图

2.在hdfs文件系统中创建名为word的路径

$hadoop  fs  -mkdir  -p  /word

3.将本地的test文件上传至hdfs文件系统中的word路径下

$hadoop  fs  -put  /home/wankang/test.txt  /word/

4.需要执行的jar包在hadoop安装目录下,路径为

/home/wangkang/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar,执行此jar的命令是

$hadoop  jar  /home/wangkang/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar  wordcount  /word  /out

其中

wordcount是这个jar包内部映射的一个别名;

/word是hdfs文件系统中,需要计算的文件存放的路径;

/out是计算结果存放的路径。这个路径是有你来指定的,系统会在hdfs文件系统中自动生成。但是,这个路径在执行命令前一定不能存在,否则会执行失败

 

执行结果如图

 

 

5.查看执行的结果

$hadoop  fs  -text  /out/part-r-00000

 

 

6.执行时会遇到的问题。

问题1.

Invalid resource request, requested memory < 0, or requested memory > max configured, requestedMemory=1536, maxMemory=1024

第一次执行时可能会报这个错误,报错信息是说,这个任务请求的内存是1536,但是我们配置的内存最大只有1024

解决方案:

先关闭所有hadoop服务($stop-all.sh)

找到hadoop-2.7.7/etc/hadoop/yarn-site.xml

将yarn.nodemanager.resource.memory-mb属性由原来的1024改为2048

注意,需要将master机器和slave1机器都改掉。

改完后重启服务($start-all.sh)

问题2.

执行jar的时候任务卡死。

 Running job: job_1559553475936_0001

卡在这个地方不动了。

解决方案:

查阅资料之后了解到是虚拟机内存太小。我的两台虚拟机内存为2G。

先将服务全部关闭。然后关闭虚拟机,将两台虚拟机内存调整为4G,然后重启。

 

 

 

结束:

参考书籍《Hadoop构建数据仓库实践》

猜你喜欢

转载自blog.csdn.net/github_39538842/article/details/92578831