Week08_day07(DataX從mysql上讀取數據傳輸到HDFS上)


簡介
DataX 是阿里巴巴集團內被廣泛使用的離線數據同步工具/平台,實現包括 MySQL、Oracle、HDFS、Hive、OceanBase、HBase、OTS、ODPS 等各種異構數據源之間高效的數據同步功能。DataX采用了框架 + 插件 的模式,目前已開源,代碼托管在github。

DataX安裝部署及小試
1.下載壓縮包:
下載頁面地址:https://github.com/alibaba/DataX 在頁面中【Quick Start】--->【Download DataX下載地址】進行下載。下載后的包名:datax.tar.gz。解壓后{datax}目錄下有{bin conf job lib log log_perf plugin script tmp}幾個目錄。

2.安裝
將下載后的壓縮包直接解壓后可用,前提是對應的java及python環境滿足要求。
  System Requirements:

Linux
JDK(1.6以上,推薦1.6)
Python(推薦Python2.6.X)一定要為python2,因為后面執行datax.py的時候,里面的python的print會執行不了,導致運行不成功,會提示你print語法要加括號,python2中加不加都行 python3中必須要加,否則報語法錯
Apache Maven 3.x (Compile DataX)

 

測試:

json的讀寫兩端可以去github上進行截取自己需要的代碼。

https://github.com/alibaba/DataX

雖然在使用之前花費的不少的時間去研究json的寫法,但是傳輸速度真的要比sqoop的傳輸速度要快很多。

 

1、編寫json文件,去這個github上截取自己鎖需要的read和write,我這里需要的是mysqlreader 和 hdfswriter,拼起來是下面的代碼(需要修改自己數據庫,對應的表名,ip地址,對應的字段及其類型,以及hdfs上的字段名,分隔符)在對應的md下面有各個參數介紹,根據自己需要進行修改添加。(注意,這里要現在hive中進行建表,對應字段和類型,不然會出現我下面的報錯

{
    "job": {
        "setting": {
            "speed": {
                 "channel": 3
            },
            "errorLimit": {
                "record": 0,
                "percentage": 0.02
            }
        },
        "content": [
            {
                "reader": {
                    "name": "mysqlreader",
                    "parameter": {
                        "username": "root",
                        "password": "123456",
                        "column": [
                            "id",
                            "name",
                            "age",
                            "gender",
                            "clazz"
                        ],
                        "splitPk": "clazz",
                        "connection": [
                            {
                                "table": [
                                    "student_zeng"
                                ],
                                "jdbcUrl": [
     "jdbc:mysql://192.168.230.20:3306/test"
                                ]
                            }
                        ]
                    }
                },
               "writer": {
                     "name": "hdfswriter",
                    "parameter": {
                        "defaultFS": "hdfs://192.168.230.20:9000",
                        "fileType": "text",
                        "path": "/user/hive/warehouse/test.db/dataX_hdfs",
                        "fileName": "dataX_hdfs",
                        "column": [
                            {
                                "name": "id",
                                "type": "INT"
                            },
                            {
                                "name": "name",
                                "type": "VARCHAR"
                            },
                            {
                                "name": "age",
                                "type": "INT"
                            },
                            {
                                "name": "gender",
                                "type": "VARCHAR"
                            },
                            {
                                "name": "clazz",
                                "type": "VARCHAR"
                            }
                        ],
                        "writeMode": "append",
                        "fieldDelimiter": ","
                    
                        }
                    }
            }
        ]
    }
}

 

2、去安裝dataX的bin目錄下執行命令:

python datax.py /usr/local/soft/a_data_shujia006/test/flumedata/mysql_hdfs.json

注意:

python datax.py 加上你的json文件的絕對路徑

 

3、因為我漏了在hdfs上建表,所以,我報了如下的錯誤:

 

 

4、所以我又在hive中建表,建表語句如下:(注意對應類型)

CREATE EXTERNAL TABLE IF NOT EXISTS dataX_hdfs(
    id BIGINT ,
    name STRING ,
    age INT ,
    gender STRING ,
    clazz STRING 
)
comment '學生表'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE

 

5、再執行一遍,如下圖:(看到這樣的結果就說明執行成功)

 

 

6、查看HDFS網頁

 

 

7、查看內容

 

 

8、結果發現,雖然將數據上傳了,但是這個分區和結果不是我們想要的,可能是因為json的參數沒有設置好。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM