ETL:虚拟机中使用kettle导入.xlsx和.csv文件进HDFS和MySQL中(Mac Linux)

因为我有这个作业,但是在我找了很多的博客后,我决定还是自己写一个完整的。这里我用到的工具有:navicat、Termius、centos8(桌面版)、kettle-8.2、mysql-8.0、hadoop3.1.3

  • 导入项目素材中所有的.xlsx和.csv文件数据到MySQL数据库

     .xlsx和.csv的导入方法一样,只是在选择文件格式时选择对应的格式即可。

    我这里用的navicat直接导入的。首先连接上虚拟机mysql,有时候我的mysql会连接不上出现这个错误:

    ERROR 2002 (HY000): Can't connect to local MySQL server through socket /var/lib/mysql/mysql.sock'

    我出现这个错误是没有打开3306的这个端口,解决办法是

    //开启防火墙
    systemctl start firewalld
    //开放指定端口3306和8080
    firewall-cmd --zone=public --add-port=3306/tcp --permanent 
    firewall-cmd --zone=public --add-port=8080/tcp --permanent
    //重启防火墙
    firewall-cmd --reload

    更改你自己对应的端口开启就行了(反正我是这样)。

    1.连接数据库,进入navicat软件,点击左上脚的连接,就会出现下图窗口,编辑数据:连接名(自己定义就行)、主机(需要连接机子的IP地址)、密码(所需连接机子的mysql密码),然后测试连接,成功后就可以保存了。

     2.将表导入进指定数据库。右键点击导入向导

    这里呢,就是不同之处了,如果是要导入csv文件,就选择csv,如果是要xlsx呢就选择Excel选项,然后点击继续。 

    接着就是一直继续继续,中间的一些选择看自己来,我是按默认的一直继续,然后到最后第八步,点击开始,然后等待一小会儿,就完成了。

    3.刷新一下就可以看到表导入成功啦,然后双击一下左边一栏导入到的目标数据库,然后输入查看的命令,就可以看到数据导入成功(这里在result页面能看见数据)。

    select * from 目标数据库名字;
    • 使用Kettle把所有.xlsx文件同步到HDFS 

      在开始之前,我们得把HDFS启动;

      start-dfs.sh
      start-yarn.sh

      把hadoop里面的core-site.xml、yarn-site.xml和mapred-site.xml这三个文件放入hdp中;这里路径是自己安装的hadoop包下面的,要更换成自己的路径下 

      cp /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml./
      cp /opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml./
      cp /opt/module/hadoop-3.1.3/etc/hadoop/mapred-site.xml./

      1.创建一个转换,将表输入和hadoop file output拖到spoon主页面,并编辑它们。

      2.连接上数据库,这里有两个方法,点击主对象树,然后右键DB数据,点击新建数据库连接向导,然后就开始编辑弹出的页面。

      数据库名称是填写目标数据库的名字,然后就继续下一步输入mysql的用户名和密码,点击页面的测试数据库连接,当弹出一个窗口显示:正确连接到数据库[数据库名字]。这时就连接数据库成功。如果出错,有Divers这样的字段,那就是没有添加驱动,此时再向lib文件里放入驱动就可以了。

      修改表输入中SQL查询语句,预览看看是否是我们导入的正确数据。

       3.编辑Hadoop file output。进入Hadoop file output里后点击new,新建一个Hadoop Cluster,编辑里面的所有Hostname改为自己机子的名字。在HDFS中,有的不是8020端口(我的就是9000),Username和Password可填可不填(我看一些博客写的可以不填),要填就是填写自己mysql的用户名和密码,然后就点击测试。

       我这里没有开启zookeeper所以zookeeper那儿是❌,但对于现在我弄这些是没有什么大问题,如果想那儿也是绿色的勾,就得打开zookeeper然后又从新开始(退出spoon重新开始从第3步)

      4.接着确认出来后在new的那个界面,浏览确认导出的表,然后确实就可以了。(在这里,我们可创建一个空表以便装入我们导入的数据) 然后就是点击运行转换,运行成功。

      现在就可以进入我们的HDFS网页查看数据导入是否成功啦。

      • 使用Kettle把所有.csv文件同步到MySQL

        1.首先就是连接数据库(如上操作)。

        2.创建一个转换,引入csv文件输入和输出并编辑它们;在csv中需要浏览引入我们导入的文件名,看数据更改缓存的大小,弄好后预览数据,看是否为我们导入的数据

        3.在编辑表输出时,预览选中想要导入的目标表(表中必须的放一些东西,但是对后面导入数据是没有影响的,因为数据导入成功后会自动执行drop删除命令将前面我们放的数据删除),这里也要根据数据来更改记录数量,然后就是选中指定数据库字段​​​​​​​。

        4.接着就是点击最后一排按钮的SQL,出现如下这些SQL语句后点击执行就可以将数据导入进去了。(可以查看一下语句最后一行是否有drop这个命令)

         接着就是运行转换了,数据多时得等一小会会儿,传输完成后就可以进入mysql中查看是否导入到指定表里了,如下图所示(我这里是在navicat查看的),成功。

        我这里最后呢,有过错误,因为我给的数据char必须得很长,所以如果也是我这个错误,可以试试改一下表的结构长度。