1. 程式人生 > >使用DataX將Hive與MySQL中的表互導

使用DataX將Hive與MySQL中的表互導

DataX

DataX 是阿里巴巴集團內被廣泛使用的離線資料同步工具/平臺,實現包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各種異構資料來源之間高效的資料同步功能。

Features

DataX本身作為資料同步框架,將不同資料來源的同步抽象為從源頭資料來源讀取資料的Reader外掛,以及向目標端寫入資料的Writer外掛,理論上DataX框架可以支援任意資料來源型別的資料同步工作。同時DataX外掛體系作為一套生態系統, 每接入一套新資料來源該新加入的資料來源即可實現和現有的資料來源互通。

DataX詳細介紹

Quick Start

Support Data Channels

DataX目前已經有了比較全面的外掛體系,主流的RDBMS資料庫、NOSQL、大資料計算系統都已經接入,目前支援資料如下圖,詳情請點選:DataX資料來源參考指南

型別 資料來源 Reader(讀) Writer(寫) 文件
RDBMS 關係型資料庫 MySQL
Oracle
SQLServer
PostgreSQL
DRDS
通用RDBMS(支援所有關係型資料庫)
阿里雲數倉資料儲存 ODPS
ADS
OSS
OCS
NoSQL資料儲存 OTS
Hbase0.94
Hbase1.1
MongoDB
Hive
無結構化資料儲存 TxtFile
FTP
HDFS
Elasticsearch

二、開始正文

2.1 將Hive表匯入MySQL

1.將DataX下載後上傳到伺服器
2.解壓後使用自檢指令碼:
python {YOUR_DATAX_HOME}/bin/datax.py {YOUR_DATAX_HOME}/job/job.json
3.執行沒有問題後根據模板和自己的需求建立your_job.json配置檔案,這裡以hive2mysql為例:
(需要注意的是讀hive表其實就是讀hive存放在hdfs上的檔案)
{
    "job": {
        "setting": {
            "speed": {
                "channel": 3
            }
        },
        "content": [
            {
                "reader": {
                    "name": "hdfsreader",
                    "parameter": {
                        "path": "/apps/hive/warehouse/test_table/*",
                        "defaultFS": "hdfs://192.168.10.101:8020",
                        "column": [
                               {
                                "index": 0,
                                "type": "string"
                               },
                               {
                                "index": 1,
                                "type": "long"
                               }
                        ],
                        "fileType": "text",
                        "encoding": "UTF-8",
                        "fieldDelimiter": "\u0001"
                    }

                },
                "writer": {
                    "name": "mysqlwriter",
                    "parameter": {
                        "writeMode": "insert",
                        "username": "username",
                        "password": "password",
                        "column": [
                            "word",
                            "cnt"
                        ],
                        "session": [
                            "set session sql_mode='ANSI'"
                        ],
                        "preSql": [
                            "delete from test_table"
                        ],
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:mysql://192.168.10.116:3306/test_datax?useUnicode=true&characterEncoding=gbk",
                                "table": [
                                    "test_table"
                                ]
                            }
                        ]
                    }
                }
            }
        ]
    }
}
4.執行指令碼
[[email protected] datax]# python ./bin/datax.py ./job/hive2mysql.json 

DataX (DATAX-OPENSOURCE-3.0), From Alibaba !
Copyright (C) 2010-2017, Alibaba Group. All Rights Reserved.


2018-08-29 23:19:46.674 [main] INFO  VMInfo - VMInfo# operatingSystem class => sun.management.OperatingSystemImpl
2018-08-29 23:19:46.691 [main] INFO  Engine - the machine info  => 

    osInfo: Oracle Corporation 1.8 25.161-b12
    jvmInfo:    Linux amd64 2.6.32-696.23.1.el6.x86_64
    cpu num:    1

    totalPhysicalMemory:    -0.00G
    freePhysicalMemory: -0.00G
    maxFileDescriptorCount: -1
    currentOpenFileDescriptorCount: -1

    GC Names    [Copy, MarkSweepCompact]

    MEMORY_NAME                    | allocation_size                | init_size                      
    Eden Space                     | 273.06MB                       | 273.06MB                       
    Code Cache                     | 240.00MB                       | 2.44MB                         
    Survivor Space                 | 34.13MB                        | 34.13MB                        
    Compressed Class Space         | 1,024.00MB                     | 0.00MB                         
    Metaspace                      | -0.00MB                        | 0.00MB                         
    Tenured Gen                    | 682.69MB                       | 682.69MB                       


2018-08-29 23:19:46.732 [main] INFO  Engine - 
...
2018-08-29 23:20:00.489 [job-0] INFO  JobContainer - 
     [total cpu info] => 
        averageCpu                     | maxDeltaCpu                    | minDeltaCpu                    
        -1.00%                         | -1.00%                         | -1.00%


     [total gc info] => 
         NAME                 | totalGCCount       | maxDeltaGCCount    | minDeltaGCCount    | totalGCTime        | maxDeltaGCTime     | minDeltaGCTime     
         Copy                 | 0                  | 0                  | 0                  | 0.000s             | 0.000s             | 0.000s             
         MarkSweepCompact     | 1                  | 1                  | 1                  | 0.071s             | 0.071s             | 0.071s             

2018-08-29 23:20:00.490 [job-0] INFO  JobContainer - PerfTrace not enable!
2018-08-29 23:20:00.499 [job-0] INFO  StandAloneJobContainerCommunicator - Total 939 records, 31267 bytes | Speed 3.05KB/s, 93 records/s | Error 0 records, 0 bytes |  All Task WaitWriterTime 0.001s |  All Task WaitReaderTime 0.285s | Percentage 100.00%
2018-08-29 23:20:00.500 [job-0] INFO  JobContainer - 
任務啟動時刻                    : 2018-08-29 23:19:46
任務結束時刻                    : 2018-08-29 23:20:00
任務總計耗時                    :                 13s
任務平均流量                    :            3.05KB/s
記錄寫入速度                    :             93rec/s
讀出記錄總數                    :                 939
讀寫失敗總數                    :                   0

**特別注意:hive存在hdfs上的資料預設是以'\001'分隔的,如果用vim開啟檔案會看到是以^A分隔,但分隔符要用"fieldDelimiter": "\u0001"!!!**

2.2 將MySQL表匯入Hive

1.在Hive中建表(儲存為文字檔案型別)
hive> create table mysql_table(word string, cnt int) row format delimited fields terminated by ',' STORED AS TEXTFILE;
OK
Time taken: 0.194 seconds
hive> select * from mysql_table limit 10;
OK
Time taken: 0.162 seconds
2.編寫mysql2hive.json配置檔案
{
    "job": {
        "setting": {
            "speed": {
                 "channel": 3
            },
            "errorLimit": {
                "record": 0,
                "percentage": 0.02
            }
        },
        "content": [
            {
                "reader": {
                    "name": "mysqlreader",
                    "parameter": {
                        "writeMode": "insert",
                        "username": "root",
                        "password": "123456",
                        "column": [
                            "word",
                            "cnt"
                        ],
                        "splitPk": "cnt",
                        "connection": [
                            {
                                "table": [
                                    "test_table"
                                ],
                                "jdbcUrl": [
     "jdbc:mysql://192.168.10.116:3306/test_datax"
                                ]
                            }
                        ]
                    }
                },
               "writer": {
                    "name": "hdfswriter",
                    "parameter": {
                        "defaultFS": "hdfs://192.168.10.101:8020",
                        "fileType": "text",
                        "path": "/apps/hive/warehouse/mysql_table",
                        "fileName": "mysql_table",
                        "column": [
                            {
                                "name": "word",
                                "type": "string"
                            },
                            {
                                "name": "cnt",
                                "type": "int"
                            }
                        ],
                        "writeMode": "append",
                        "fieldDelimiter": ",",
                        "compress":"gzip"
                    }
                }
            }
        ]
    }
}
3.執行指令碼
[[email protected] datax]# python ./bin/datax.py ./job/mysql2hive.json 

DataX (DATAX-OPENSOURCE-3.0), From Alibaba !
Copyright (C) 2010-2017, Alibaba Group. All Rights Reserved.


2018-08-30 01:03:36.399 [main] INFO  VMInfo - VMInfo# operatingSystem class => sun.management.OperatingSystemImpl
2018-08-30 01:03:36.415 [main] INFO  Engine - the machine info  => 

    osInfo: Oracle Corporation 1.8 25.161-b12
    jvmInfo:    Linux amd64 2.6.32-696.23.1.el6.x86_64
    cpu num:    1

    totalPhysicalMemory:    -0.00G
    freePhysicalMemory: -0.00G
    maxFileDescriptorCount: -1
    currentOpenFileDescriptorCount: -1

    GC Names    [Copy, MarkSweepCompact]

    MEMORY_NAME                    | allocation_size                | init_size                      
    Eden Space                     | 273.06MB                       | 273.06MB                       
    Code Cache                     | 240.00MB                       | 2.44MB                         
    Survivor Space                 | 34.13MB                        | 34.13MB                        
    Compressed Class Space         | 1,024.00MB                     | 0.00MB                         
    Metaspace                      | -0.00MB                        | 0.00MB                         
    Tenured Gen                    | 682.69MB                       | 682.69MB                       


2018-08-30 01:03:36.469 [main] INFO  Engine - 
...
2018-08-30 01:03:52.094 [job-0] INFO  JobContainer - 
     [total cpu info] => 
        averageCpu                     | maxDeltaCpu                    | minDeltaCpu                    
        -1.00%                         | -1.00%                         | -1.00%


     [total gc info] => 
         NAME                 | totalGCCount       | maxDeltaGCCount    | minDeltaGCCount    | totalGCTime        | maxDeltaGCTime     | minDeltaGCTime     
         Copy                 | 1                  | 1                  | 1                  | 0.346s             | 0.346s             | 0.346s             
         MarkSweepCompact     | 1                  | 1                  | 1                  | 0.206s             | 0.206s             | 0.206s             

2018-08-30 01:03:52.094 [job-0] INFO  JobContainer - PerfTrace not enable!
2018-08-30 01:03:52.096 [job-0] INFO  StandAloneJobContainerCommunicator - Total 939 records, 19462 bytes | Speed 1.90KB/s, 93 records/s | Error 0 records, 0 bytes |  All Task WaitWriterTime 0.975s |  All Task WaitReaderTime 0.022s | Percentage 100.00%
2018-08-30 01:03:52.101 [job-0] INFO  JobContainer - 
任務啟動時刻                    : 2018-08-30 01:03:36
任務結束時刻                    : 2018-08-30 01:03:52
任務總計耗時                    :                 15s
任務平均流量                    :            1.90KB/s
記錄寫入速度                    :             93rec/s
讀出記錄總數                    :                 939
讀寫失敗總數                    :                   0
4.檢視hive表中是否有資料
hive> select * from mysql_table limit 10;
OK
at-spi-python-1.28.1    1
mesa-dri-drivers-9.2    1
m4-1.4.13-5.el6.x86_    1
libXxf86vm-1.1.2-2.e    1
libuuid-2.17.2-12.14    1
httpd-2.2.15-29.el6.    1
libgweather-2.28.0-5    1
lvm2-2.02.100-8.el6.    1
xmlrpc-c-1.16.24-121    1
parted-2.1-21.el6.x8    1
Time taken: 0.148 seconds, Fetched: 10 row(s)
hive> select * from mysql_table order by cnt desc limit 10;
Query ID = hdfs_20180830010430_68021b2b-9bd8-44a0-92df-dbe0c717053a
Total jobs = 1
Launching Job 1 out of 1
Tez session was closed. Reopening...
Session re-established.


Status: Running (Executing on YARN cluster with App id application_1535363634130_0005)

--------------------------------------------------------------------------------
        VERTICES      STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED
--------------------------------------------------------------------------------
Map 1 ..........   SUCCEEDED      1          1        0        0       0       0
Reducer 2 ......   SUCCEEDED      1          1        0        0       0       0
--------------------------------------------------------------------------------
VERTICES: 02/02  [==========================>>] 100%  ELAPSED TIME: 17.63 s    
--------------------------------------------------------------------------------
OK
Installing  918
warning:    2
*** 2
tcp_wrappers-libs-7.    1
m4-1.4.13-5.el6.x86_    1
httpd-2.2.15-29.el6.    1
libgweather-2.28.0-5    1
libXxf86vm-1.1.2-2.e    1
xmlrpc-c-1.16.24-121    1
parted-2.1-21.el6.x8    1
Time taken: 33.713 seconds, Fetched: 10 row(s)

備註:

1.可能會遇到的錯誤

2018-08-29 22:37:54.327 [job-0] ERROR JobContainer - Exception when job run com.alibaba.datax.common.
exception.DataXException: Code:[DBUtilErrorCode-01], Description:[獲取表字段相關資訊失敗.].  -
獲取表:test_table 的欄位的元資訊時失敗. 請聯絡 DBA 核查該庫、表資訊. -
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'id' in 'field list'

原因:”column”: [ ]中定義的列名與mysql不一致

經DataX智慧分析,該任務最可能的錯誤原因是:com.alibaba.datax.common.exception.DataXException: 
Code:[UnstructuredStorageReader-03], Description:[您填寫的引數值不合法.]. - 僅僅支援單字元切分, 
您配置的切分為 : ['01']

原因:分隔符問題,詳見上面的特別注意

2.MysqlWriter 針對 Mysql 型別轉換列表

DataX 內部型別 Mysql 資料型別
Long int, tinyint, smallint, mediumint, int, bigint, year
Double float, double, decimal
String varchar, char, tinytext, text, mediumtext, longtext
Date date, datetime, timestamp, time
Boolean bit, bool
Bytes tinyblob, mediumblob, blob, longblob, varbinary

* bit型別目前是未定義型別轉換

3.MysqlReader針對Mysql型別轉換列表

DataX 內部型別 Mysql 資料型別
Long int, tinyint, smallint, mediumint, int, bigint
Double float, double, decimal
String varchar, char, tinytext, text, mediumtext, longtext, year
Date date, datetime, timestamp, time
Boolean bit, bool
Bytes tinyblob, mediumblob, blob, longblob, varbinary

請注意:

  • 除上述羅列欄位型別外,其他型別均不支援
  • tinyint(1) DataX視作為整形
  • year DataX視作為字串型別
  • bit DataX屬於未定義行為

相關推薦

使用DataXHiveMySQL中的表

DataX DataX 是阿里巴巴集團內被廣泛使用的離線資料同步工具/平臺,實現包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(

滴滴雲使用 DataX 實現 Hive MySQL 資料傳輸

1. DataX 簡介: DataX 是阿里巴巴集團內被廣泛使用的離線資料同步工具/平臺,實現包括 MySQL、Oracle、SQLServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各種異構

利用sqoophiveMySQL資料匯入

1.    hadoop、hive、MySQL安裝(略)啟動hadoop 執行start-all.sh start-dfs.sh start-yarn.sh 2.    下載sqoop 3.    解壓 #tar -zxvfsqoop-1.4.6.bin__hadoop-

13-1 在PHP中使用mysqliMySQL

style value free error tor file mysql服務器 del 提示 1.建立、關閉與MySQL服務器的連接 1)連接指定的mysql服務器 [email protected]/* */_connect($host,

pythonmysql之虛擬環境搭建

packages 提示 pan 創建 項目 進行 出現 目錄 提示符 在使用命令 sudo pip install 包名稱 進行包的安裝時,會安裝到/usr/local/lib/python2.7/dist-packages下。接下來問題就出來了,如果在一臺機器上,想開

python腳本之mysql

mysql python yum install mysql-serverservice mysqld start[[email protected] ~]# mysql -u rootmysql> SET PASSWORD FOR ‘root‘@‘localhost‘ = PAS

PythonMySQL

mef incr visio gin ger odi window scroll 修改 交互類型 Windows安裝mysql-python: https://pypi.org/project/MySQL-python/1.2.5/#files

Nodejs學習筆記(四)—MySQL(felixge/node-mysql

ted iss eid 所在 err password soc deb 大連 簡介和安裝   Node.js與MySQL交互操作有很多庫,具體可以在 https://www.npmjs.org/search?q=mysql 查看。   我選擇了felixge/node-m

hivemysql兩種數據源之間的join

alt mar tab tom hql sql 行數 成功 use   這篇文章是基於上一篇文章的續集 一:程序 1.程序、 1 package com.scala.it 2 3 import java.util.Properties 4 5 import

CAD小技巧-怎麽DWGDXF進行轉?

ima dde 電腦 菜單欄 轉換 希望 拖拽 -o 朋友 CAD小技巧,怎麽將DWG與DXF進行互轉?在CAD行業中小夥伴們都知道,他們每天的日常工作就是編輯CAD圖紙文件,以前的CAD前輩們都是用手繪制的,但是隨著科技的發展,現在編輯CAD圖紙一般都是借助CAD編輯器來

CAD小技巧-怎麼DWGDXF進行轉?

CAD小技巧,怎麼將DWG與DXF進行互轉?在CAD行業中小夥伴們都知道,他們每天的日常工作就是編輯CAD圖紙檔案,以前的CAD前輩們都是用手繪製的,但是隨著科技的發展,現在編輯CAD圖紙一般都是藉助CAD編輯器來進行繪製,既方便又快捷,但是編輯出來的CAD圖紙都是dwg格式的,這樣不利用我們進行檢視,那怎麼

python3mysql

exce passwd object val user bin pip err res 1.安裝pymysql模塊 pip3 install pymysql3 2.pymysql的簡單使用: # /usr/bin/env python3 import pymysql

sqoop工具在hivemysql之間互相資料

參考: Sqoop中文手冊 1、列出mysql資料庫: sqoop list-databases --connect jdbc:mysql://192.168.100.13:3306 --username hive --password hive [[email 

使用sqoop1hive匯入mysql

#!/bin/sh #資料連線  srcConnect="connect jdbc:mysql://10.2.1.1:3306/test" #臨時表存放的目錄 tempTabPath=/user/test sql="select  NVL(rowkey,'') as row

HIVEmysql的關係 hive常用命令整理 hivehdfs整合過程

轉:https://my.oschina.net/winHerson/blog/190131 二、hive常用命令 1. 開啟行轉列功能之後: set hive.cli.print.header=true; // 列印列名 set hive.cli.print.row.to.vertical=true; /

Sqoop_具體總結 使用SqoopHDFS/Hive/HBaseMySQL/Oracle中的數據相互入、

能夠 mes south ase form html 技術 popu 沒有 一、使用Sqoop將MySQL中的數據導入到HDFS/Hive/HBase 二、使用Sqoop將HDFS/Hive/HBase中的數據導出到MySQL 2.3 HBase中的數據

利用SqoopMySQL數據Hive

sqoop參考http://www.cnblogs.com/iPeng0564/p/3215055.htmlhttp://www.tuicool.com/articles/j2yayyjhttp://blog.csdn.net/jxlhc09/article/details/168568731.list da

大資料案例——HiveMySQL、HBase資料

一、Hive預操作 1、建立臨時表user_action hive> create table dblab.user_action(id STRING,uid STRING, item_id STRING, behavior_type ST

sqoophive資料mysql報錯:Unsupported major.minor version 52.0

        離線分析需要將hive的資料匯入到mysql做視覺化,導資料時報錯,檢視log:發現jdk版本原因,sqoop shell命令會用系統jdk編譯成jar包,然後用cdh的jdk跑map將資料導到mysql.            檢視jdk(jdk1.7為報錯

Sqoop_詳細總結 使用SqoopHDFS/Hive/HBaseMySQL/Oracle中的資料相互匯入、匯出

一、使用Sqoop將MySQL中的資料匯入到HDFS/Hive/HBase 二、使用Sqoop將HDFS/Hive/HBase中的資料匯出到MySQL2.3HBase中的資料匯出到mysql目前沒有直