目录

一、基本知识储备

二、前期准备

三、将数据导入MongoDB

四、MongoDB数据迁移至Hbase



一、基本知识储备

1、MongoDB

MongoDB基本概念:

  • 数据库(database)
  • 集合(collection)
  • 文档(document)

MongoDB基本指令:

连接MongoDB:mongo IP:27017

显示所有数据库: show dbs/ show databases

进入指定数据库名: use 数据库名(若没有该数据库,则自动创建)

查看当前所在数据库ming: db

查看当前数据库所有集合: show collections

查看集合中所有记录:db.表名.find({})

当前数据库下创建集合:db.createCollection("集合名")

删除指定集合:db.集合.drop()

删除所在数据库:db.dropDatabase()

删除所在集合:db.collection.drop()

2、Hbase

Hbase的启动:hbase shell

查看Hbase中所有表:list

创建表:create '表名','列簇'

举例:

create 'test_table','0'
put 'test_table', 'row001','0:name','Jane' 
put 'test_table', 'row002','0:name','Tom'
put 'test_table', 'row003','0:name','Bill'

可使用scan扫描表

kettle mongodb 驱动问题 kettle抽取mongodb_kettle mongodb 驱动问题

要删除某个表,必须要先禁用表

禁用表: disable '表名'

删除表: drop '表名'

更新操作:在HBase中,也是用put命令来进行数据的更新,语法与之前的添加数据一模一样

在HBase中,可以使用delete命令来将一个单元格的数据删除。语法格式如下:

delete '表名','rowkey','列簇:列'

举例:delete 'ORDER_INFO','000001','C1:STATUS'

删除整行数据

delete命令可以将指定rowkey对应的所有列全部删除。

语法:delete '命令','rowkey'

二、前期准备

1、Excel上新建一张表,后缀名为xlsx,放至桌面

kettle mongodb 驱动问题 kettle抽取mongodb_mongodb_02

kettle mongodb 驱动问题 kettle抽取mongodb_mongodb_03

2、在MongoDB上建立一个名为temp的数据库,并建立集合test

kettle mongodb 驱动问题 kettle抽取mongodb_hbase_04

3、在Hbase上创建一张名为TEST的表

kettle mongodb 驱动问题 kettle抽取mongodb_数据_05

4、设置Hadoop环境

(我这里使用的kettle版本为8.2)

  • 集群上下载配置文件复制到Kettle的~/data-integration/plugins/pentaho-big-data-plugin/hadoop-configurations/hdp30/目录下,覆盖原来自带的core-site.xml、hdfs-site.xml、hive-site.xml、yarn-site.xml、mapred-site.xml 5个文件。
  • 在工具 -> Hadoop Distribution 中选择 “HortonWorks HDP 3.0.x”

kettle mongodb 驱动问题 kettle抽取mongodb_hbase_06

可在hadoop-configurations文件夹下查看,分别对应上图中的Shim

kettle mongodb 驱动问题 kettle抽取mongodb_hbase_07

  • 修改/data-integration8.2/plugins/pentaho-big-data-plugin/plugin.properties中 active.hadoop.configuration,指向对应shime(hdp30)

kettle mongodb 驱动问题 kettle抽取mongodb_数据库_08

  • 重新启动spoon

5、kettle创建一个Hadoop集群连接

kettle mongodb 驱动问题 kettle抽取mongodb_hbase_09

1、给集群起个名字 【Cluster name】

2、【Storage】选择HDFS

3、配置【HDFS】连接信息:

如果你的集群未开启NameNode HA,那么【Hostname】和【Port】如实填写即可,注意【Port】可不是 50070 这个 web 端口。如果开启了NameNode HA,那么【Hostname】这里就填写 HDFS 的 Namespace(命名空间),命名空间即为core-site.xml中fs.defaultFS去掉hdfs://后的的属性值,【Port】一定要留空。集群未配置访问认证的话,【Username】和【Password】不用填写;

我这里开启了,我的core-site.xml文件是这样子的

kettle mongodb 驱动问题 kettle抽取mongodb_数据库_10

那么HDFS连接为这样

kettle mongodb 驱动问题 kettle抽取mongodb_数据_11

4、配置【JobTracker】

如果 ResourceManager 未配置 HA,则【Hostname】和【Port】如实填写。如果配置了 HA,则【Hostname】这里需要将所有 ResourceManager 的主机地址都填写上,中间使用英文逗号分隔,【Port】一定要留空!

5、配置【Zookeeper】

【Hostname】这里需要将集群中所有的 Zookeeper 主机地址填写上,中间使用英文逗号分隔,【Port】如实填写;

6、配置【Oozie】

kettle mongodb 驱动问题 kettle抽取mongodb_mongodb_12

若没有安装,则留空

7、配置【Kafka】

需要填写bootstrap-server所在主机地址以及运行端口,多个之间使用英文逗号分隔。未安装 Kafka 的话留空即可。

8、配置完成以后,点击【测试】按钮可以测试一下集群连接,如果配置无误的话,可以看到全是绿色的对勾:

kettle mongodb 驱动问题 kettle抽取mongodb_数据库_13

Hadoop集群连接常见报错与警告解答:

  • Active Shim Load】出现报错或者警告,需要检查是否在Spoon工具栏 -> 工具 -> Hadoop Distribution中设置了对应的 Hadoop 平台;
  • 【Shim Configuration Verification】报出警告:The Hadoop File System URL does not match the URL in the shims core-site.xml,这个时候就需要检查【HDFS】的【Hostname】是否与core-site.xml中fs.defaultFS属性值一致;
  • 【User Home Directory Access】报错:Could not read directory contents,是因为 Kettle 是使用当前操作系统用户去访问 HDFS 的,如果 HDFS 上/user/目录下没有该用户的目录,则该项检测就会失败。解决办法:手动在 HDFS 上/user/目录下创建以当前操作系统用户名命名的文件夹即可(电脑用户名)。

假如我的用户名为Darlene,则创建文件夹的方法为

kettle mongodb 驱动问题 kettle抽取mongodb_hbase_14

创建成功后,可以在user目录下查看

  • 【Root Directory Access】报错,是因为 Kettle 访问 HDFS 的用户没有读写 HDFS 跟目录的权限,可通过修改集群配置文件解决:在hdfs-site.xml文件中增加一个属性配置,重启集群生效:
<property>  
 <name>dfs.permissions.enabled</name>   
<value>false</value> 
</property>

kettle mongodb 驱动问题 kettle抽取mongodb_数据库_15

  • Verify User Home Permissions警告

在data-integration8.2/plugins/pentaho-big-data-plugin/hadoop-configurations/hdp30/config.properties文件末尾添加一行 "authentication.superuser.provider=NO_AUTH"

kettle mongodb 驱动问题 kettle抽取mongodb_数据库_16

三、将数据导入MongoDB

1、ITerm上直接使用命令行导入

(1) 将xlsx后缀名改为CSV

kettle mongodb 驱动问题 kettle抽取mongodb_hbase_17

( 注意:如果Excel文件中有中文、特殊符号会抛出异常,这种情况下在执行mongoimport命令前,需要将该CSV文件编码转为UTF-8,如上图所示。)

改后如图所示:

kettle mongodb 驱动问题 kettle抽取mongodb_数据库_18

(2)打开iterm

输入命令将表中的数据导入MongoDB

mongoimport —host IP —port 27017  —db 数据库名 -c 集合名 —type csv —headerline —file /Users/Kilig/Desktop/test.csv

可以看到成功将数据导入MongoDB

kettle mongodb 驱动问题 kettle抽取mongodb_kettle mongodb 驱动问题_19

(3)通过NoSQLBooster可以查看导入的数据,如图所示:

kettle mongodb 驱动问题 kettle抽取mongodb_数据_20

kettle mongodb 驱动问题 kettle抽取mongodb_数据_21

2、使用kettle将数据从Excel文件导入MongoDB

(1)先将方法一导入的数据删除,重新建立一个集合

kettle mongodb 驱动问题 kettle抽取mongodb_数据库_22

(2)打开kettle新建一个转换

a.Excel输入设置如下:

kettle mongodb 驱动问题 kettle抽取mongodb_kettle mongodb 驱动问题_23

kettle mongodb 驱动问题 kettle抽取mongodb_kettle mongodb 驱动问题_24

b.MongoDB输入设置如下

kettle mongodb 驱动问题 kettle抽取mongodb_数据_25

kettle mongodb 驱动问题 kettle抽取mongodb_mongodb_26

kettle mongodb 驱动问题 kettle抽取mongodb_数据_27

kettle mongodb 驱动问题 kettle抽取mongodb_hbase_28

c.最后点击运行转换即可,我们可以看到数据成功的导入MongoDB

kettle mongodb 驱动问题 kettle抽取mongodb_数据_29

四、MongoDB数据迁移至Hbase

1、MongoDB Input步骤设置如下:

kettle mongodb 驱动问题 kettle抽取mongodb_数据库_30

kettle mongodb 驱动问题 kettle抽取mongodb_数据库_31

kettle mongodb 驱动问题 kettle抽取mongodb_mongodb_32

2、Hbase Output设置

kettle mongodb 驱动问题 kettle抽取mongodb_hbase_33

kettle mongodb 驱动问题 kettle抽取mongodb_mongodb_34

这里设置mapping名称(自己起的),将_id设置为主键,这里我为了查询时建立映射的方便,将所有的数据类型都改为String型,实际过程中可按需求变化

kettle mongodb 驱动问题 kettle抽取mongodb_mongodb_35

这里我们可以看到mapping成功创建

kettle mongodb 驱动问题 kettle抽取mongodb_kettle mongodb 驱动问题_36

3、最后点击运行,可以看到数据已经成功地导入Hbase中TEST表中了

kettle mongodb 驱动问题 kettle抽取mongodb_数据_37

3、在HBase中使用scan查看导入的数据

kettle mongodb 驱动问题 kettle抽取mongodb_数据库_38

4、使用create语句在Phoenix中创建映射表


create table "TEST" ("_id" VARCHAR PRIMARY KEY, "base"."name" VARCHAR, "base"."id" VARCHAR, "base"."age" VARCHAR, "base"."sex" VARCHAR, "base"."address" VARCHAR) column_encoded_bytes=0;


kettle mongodb 驱动问题 kettle抽取mongodb_hbase_39

至此,我们已成功将数据从MongoDB中迁移至Hbase,并在Phoenix创建映射表,成功查询到了表中的数据