使用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屬於未定義行為
。
相關推薦
使用DataX將Hive與MySQL中的表互導
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 等各種異構
利用sqoop將hive和MySQL資料互匯入
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中使用mysqli與MySQL交互
style value free error tor file mysql服務器 del 提示 1.建立、關閉與MySQL服務器的連接 1)連接指定的mysql服務器 [email protected]/* */_connect($host,
python與mysql交互之虛擬環境搭建
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
Python與MySQL交互
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
hive與mysql兩種數據源之間的join
alt mar tab tom hql sql 行數 成功 use 這篇文章是基於上一篇文章的續集 一:程序 1.程序、 1 package com.scala.it 2 3 import java.util.Properties 4 5 import
CAD小技巧-怎麽將DWG與DXF進行互轉?
ima dde 電腦 菜單欄 轉換 希望 拖拽 -o 朋友 CAD小技巧,怎麽將DWG與DXF進行互轉?在CAD行業中小夥伴們都知道,他們每天的日常工作就是編輯CAD圖紙文件,以前的CAD前輩們都是用手繪制的,但是隨著科技的發展,現在編輯CAD圖紙一般都是借助CAD編輯器來
CAD小技巧-怎麼將DWG與DXF進行互轉?
CAD小技巧,怎麼將DWG與DXF進行互轉?在CAD行業中小夥伴們都知道,他們每天的日常工作就是編輯CAD圖紙檔案,以前的CAD前輩們都是用手繪製的,但是隨著科技的發展,現在編輯CAD圖紙一般都是藉助CAD編輯器來進行繪製,既方便又快捷,但是編輯出來的CAD圖紙都是dwg格式的,這樣不利用我們進行檢視,那怎麼
python3與mysql交互
exce passwd object val user bin pip err res 1.安裝pymysql模塊 pip3 install pymysql3 2.pymysql的簡單使用: # /usr/bin/env python3 import pymysql
sqoop工具在hive和mysql之間互相導資料
參考: Sqoop中文手冊 1、列出mysql資料庫: sqoop list-databases --connect jdbc:mysql://192.168.100.13:3306 --username hive --password hive [[email
使用sqoop1將hive匯入mysql
#!/bin/sh #資料連線 srcConnect="connect jdbc:mysql://10.2.1.1:3306/test" #臨時表存放的目錄 tempTabPath=/user/test sql="select NVL(rowkey,'') as row
HIVE與mysql的關係 hive常用命令整理 hive與hdfs整合過程
轉:https://my.oschina.net/winHerson/blog/190131 二、hive常用命令 1. 開啟行轉列功能之後: set hive.cli.print.header=true; // 列印列名 set hive.cli.print.row.to.vertical=true; /
Sqoop_具體總結 使用Sqoop將HDFS/Hive/HBase與MySQL/Oracle中的數據相互導入、導出
能夠 mes south ase form html 技術 popu 沒有 一、使用Sqoop將MySQL中的數據導入到HDFS/Hive/HBase 二、使用Sqoop將HDFS/Hive/HBase中的數據導出到MySQL 2.3 HBase中的數據
利用Sqoop將MySQL數據導入Hive中
sqoop參考http://www.cnblogs.com/iPeng0564/p/3215055.htmlhttp://www.tuicool.com/articles/j2yayyjhttp://blog.csdn.net/jxlhc09/article/details/168568731.list da
大資料案例——Hive、MySQL、HBase資料互導
一、Hive預操作 1、建立臨時表user_action hive> create table dblab.user_action(id STRING,uid STRING, item_id STRING, behavior_type ST
sqoop將hive資料導進mysql報錯:Unsupported major.minor version 52.0
離線分析需要將hive的資料匯入到mysql做視覺化,導資料時報錯,檢視log:發現jdk版本原因,sqoop shell命令會用系統jdk編譯成jar包,然後用cdh的jdk跑map將資料導到mysql. 檢視jdk(jdk1.7為報錯
Sqoop_詳細總結 使用Sqoop將HDFS/Hive/HBase與MySQL/Oracle中的資料相互匯入、匯出
一、使用Sqoop將MySQL中的資料匯入到HDFS/Hive/HBase 二、使用Sqoop將HDFS/Hive/HBase中的資料匯出到MySQL2.3HBase中的資料匯出到mysql目前沒有直