Der grundlegende Fall der Verwendung von DataX

Der grundlegende Fall der Verwendung von DataX



0. vorne schreiben

Dieser Artikel stellt DataX hauptsächlich zum Lesen von Stream-, MySQL- und HDFS-Daten vor

1. Lesen Sie Daten aus dem Stream und drucken Sie sie auf der Konsole aus

  • Geben Sie das Installationsverzeichnis von DataX ein und führen Sie den folgenden Befehl aus, um die Konfigurationsvorlage für das Stream-Lesen anzuzeigen
[whybigdata@node01 datax]$ ./bin/datax.py -r streamreader -w streamwriter
[whybigdata@node01 bin]$ python datax.py -r streamreader -w streamwriter DataX (DATAX-OPENSOURCE-3.0), From Alibaba !
Copyright (C) 2010-2017, Alibaba Group. All Rights Reserved.

Please refer to the streamreader document: https://github.com/alibaba/DataX/blob/master/streamreader/doc/streamreader.md

Please refer to the streamwriter document: https://github.com/alibaba/DataX/blob/master/streamwriter/doc/streamwriter.md

Please save the following configuration as a json file and	use
python {
    
    DATAX_HOME}/bin/datax.py {
    
    JSON_FILE_NAME}.json to run the job.

{
    
    
	"job": {
    
    
		"content": [
		{
    
    
			"reader": {
    
    
				"name": "streamreader", 
				"parameter": {
    
    
					"column": [], 
					"sliceRecordCount": ""
				}
			},
			"writer": {
    
    
				"name": "streamwriter", 
				"parameter": {
    
    
					"encoding": "", 
					"print": true
				}
			}
		}
		],
		"setting": {
    
    
			"speed": {
    
    
				"channel": ""
			}
		}
	}
}
  • Schreiben Sie die Konfigurationsdatei gemäß der Vorlage: Geben Sie das Jobverzeichnis unter dem DataX-Installationsverzeichnis ein
[whybigdata@node01 job]$ vim stream2stream.json

Fügen Sie Folgendes hinzu

{
    
    
	"job": {
    
    
		"content": [
		{
    
    
			"reader": {
    
    
				"name": "streamreader", 
				"parameter": {
    
    
					"column": [
						{
    
    
							"type": "long",
							"value": "18"
						},
						{
    
    
							"type": "string",
							"value": "zhangsan"
						}
					], 
					"sliceRecordCount": 10
				}
			},
			"writer": {
    
    
				"name": "streamwriter", 
				"parameter": {
    
    
					"encoding": "UTF-8", 
					"print": true
				}
			}
		}
		],
		"setting": {
    
    
			"speed": {
    
    
				"channel": 1
			}
		}
	}
}

Spalte gibt das zu lesende Datenfeld an. Es ist notwendig, den Datentyp und den entsprechenden Wert jedes Felds zu schreiben. Der Feldwert des numerischen Typs muss ebenfalls in Anführungszeichen eingeschlossen werden, und ein “”Fehler wird gemeldet, wenn die Zahl ist direkt verwendet.

  • Auftrag ausführen
[whybigdata@node01 job]$ /opt/module/datax/bin/datax.py /opt/module/datax/job/stream2stream.json
  • Operationsergebnis

Entsprechend sliceRecordCountdem Parameterwert gibt es 10 Datenstromausgaben an die Konsole

[Externer Link Bildübertragung fehlgeschlagen, die Quellseite verfügt möglicherweise über einen Anti-Leeching-Mechanismus, es wird empfohlen, das Bild zu speichern und direkt hochzuladen (img-qnM1uhSS-1675910277751)(./1.jpg)]


[Bildübertragung des externen Links fehlgeschlagen, die Quellseite verfügt möglicherweise über einen Anti-Leeching-Mechanismus, es wird empfohlen, das Bild zu speichern und direkt hochzuladen (img-5xTD7c8N-1675910277753)(./2.jpg)]

2. Lesen Sie die Daten in MySQL und speichern Sie sie in HDFS

2.1 Sehen Sie sich die offizielle Vorlage an

Führen Sie den folgenden Befehl aus, um die von MySQL gelesene und von hdfs geschriebene Konfigurationsvorlage anzuzeigen

[whybigdata@node01 datax]$ ./bin/datax.py -r mysqlreader -w hdfswriter

Die Vorlage lautet wie folgt:

{
    
    
    "job": {
    
    
        "content": [
            {
    
    
                "reader": {
    
    
					"name": "mysqlreader", 
					"parameter": {
    
    
						"column": [], 
						"connection": [
							{
    
    
							"jdbcUrl": [],
							"table": []
							}
						],
						"password": "",
						"username": "",
						"where": ""
					}
				},
				"writer": {
    
    
					"name": "hdfswriter",
					"parameter": {
    
    
						"column": [],
						"compress": "",
						"defaultFS": "", 
						"fieldDelimiter": "",
						"fileName": "",
						"fileType": "",
						"path": "",
						"writeMode": ""
					}
				}
			}
        ],
        "setting": {
    
    
            "speed": {
    
    
				"channel": ""
            }
        }
    }
}

2.1.1 Mysqlreader-Parameteranalyse:

"reader":{
    
    
	"name":"mysqlreader",
	"parameter":{
    
    
		"column":[],
		"connection":[
		  {
    
    
			"jdbcUrl":[],
			"table":[],
			【“querySql:[]}
		],
		"password:"",
		"usemname":"","where":""】
		【"splitPk":""}
}

Die Parameter werden wie folgt erklärt:

  • name:Lesername
  • column: Eine Sammlung von Spaltennamen, die synchronisiert werden müssen, verwenden Sie ein JSON-Array, um die eigenständigen Informationen zu beschreiben, * steht für alle Spalten
  • jdbcUrl: Die DBC-Verbindungsinformationen zur Datenbank werden mithilfe eines JSON-Arrays beschrieben, und mehrere Verbindungsadressen werden unterstützt
  • table: Die zu synchronisierende Tabelle unterstützt mehrere
  • querySql: Benutzerdefiniertes SQL, nach der Konfiguration ignoriert mysglreader direkt Tabelle, Spalte, wo
  • password: Das Kennwort, das dem Datenbankbenutzernamen entspricht
  • usemame: Datenbank-Benutzername
  • where: Filterzustand
  • splitPK: Datenfragmentierungsfeld, im Allgemeinen der Primärschlüssel, unterstützt nur ganze Zahlen

Hinweis: Die Parameter in [] sind optionale Parameter

2.1.2 hdfswriter-Parameteranalyse:

"writer":{
    
    
	"name":"hdfswriter",
	"parameter":{
    
    
		"column":[],
		"compress":""
		"defaultFS":"",
		"fieldDelimiter":"",
		"fileName":"",
		"fileType":"",
		"path":"",
		"writeMode":""
	}
}

Die Parameter werden wie folgt erklärt:

  • name: Name des Autors

  • column: Das Feld, in das Daten geschrieben werden, wobei Name den Feldnamen und Typ den Typ angibt

  • compress: hdfs-Dateikomprimierungstyp, wenn nicht standardmäßig ausgefüllt, bedeutet keine Komprimierung.

  • defaultFS: hdfs-Dateisystemnamenode-Knotenadresse, Format: hds/p: port

  • fieldDelimiter: Feldtrenner

  • fileName: Dateinamen schreiben

  • fileType: Der Dateityp, unterstützt derzeit nur die Benutzerkonfiguration als tet oderorc

  • path: Pfadinformationen, die im Hadoophdfs-Dateisystem gespeichert sind

  • writeMode: Datenreinigungsverarbeitungsmodus, bevor hdfswriter schreibt:

    • append: Führen Sie vor dem Schreiben keine Verarbeitung durch, DataX hdfswriter verwendet direkt den Dateinamen zum Schreiben und stellt sicher, dass der Dateiname nicht in Konflikt gerät.
    • nonConflict: Befindet sich im Verzeichnis eine Datei vor fileName, wird direkt ein Fehler gemeldet.

2.2 Daten vorbereiten

  • Schülertisch erstellen
 mysql> create database datax;
 mysql> use datax;     
 mysql> create table student(id int,name varchar(20));  
  • Daten einfügen
mysql> insert into student values(1001,'zhangsan'),(1002,'lisi'),(1003,'wangwu');

2.3 Konfigurationsdateien schreiben

[whybigdata@node01 datax]$ vim /opt/module/datax/job/mysql2hdfs.json
{
    
    
	"job": {
    
    
		"content": [
		{
    
    
			"reader": {
    
    
				"name": "mysqlreader", 
				"parameter": {
    
    
					"column": [
						"id", 
						"name"
					],
					"connection": [
					{
    
    
						"jdbcUrl": [
							"jdbc:mysql://node01:3306/datax"
						],
						"table": [
							"student"
						]
					}
					],
					"username": "root", 
					"password": "123456"
				}
			},
			"writer": {
    
    
				"name": "hdfswriter", 
				"parameter": {
    
    
					"column": [
						{
    
    
							"name": "id",
							"type": "int"
						},
						{
    
    
							"name": "name",
							"type": "string"
						}
					],
					"defaultFS": "hdfs://node01:9000", 
					"fieldDelimiter": "\t",
					"fileName": "student.txt", 
					"fileType": "text",
					"path": "/datax-out", 
					"writeMode": "append"
				}
			}
		}
		],
		"setting": {
    
    
			"speed": {
    
    
				"channel": "1"
			}
		}
	}
}

2.4 Ausführen von Aufgaben

  • Ausführungsergebnis: Die Gesamtzahl der Fehler ist 0, und 3 Datensätze wurden erfolgreich gelesen
[whybigdata@node01 datax]$ bin/datax.py job/mysql2hdfs.json
2023-01-10 15:54:16.581 [job-0] INFO	JobContainer -
任务启动时刻	: 2023-01-10 15:54:04
任务结束时刻	: 2023-01-10 15:54:16
任务总计耗时	: 12s
任务平均流量	: 3B/s
记录写入速度	: 0rec/s
读出记录总数	: 3
读写失败总数	: 0
  • Prozessanalyse

[Externer Link Bildübertragung fehlgeschlagen, die Quellseite verfügt möglicherweise über einen Anti-Leeching-Mechanismus, es wird empfohlen, das Bild zu speichern und direkt hochzuladen (img-LmwLhAkQ-1675910277754)(./3.jpg)]

So garantiert DataX Datenkonsistenz: ⭐⭐⭐⭐⭐

DataX liest die Daten der MySQL-Tabelle und schreibt sie in hdfs. Wenn die Operation gleichzeitig ausgeführt wird, ist sie nur erfolgreich, wenn alle Daten erfolgreich geschrieben und mit hdfs abgeglichen werden (zu Beginn dieses Vorgangs wird eine temporäre Datei generiert , und die temporäre Datei wird geändert, nachdem alle erfolgreich waren. Name, Pfad); Wenn es einzelne Fehler gibt, erklärt der Job direkt einen Fehler, und andere erfolgreiche Operationen in den entsprechenden gleichzeitigen Operationen löschen auch den entsprechenden temporären Pfad.

2.5 HDFS anzeigen

Hinweis: Wenn HdfsWriter tatsächlich ausgeführt wird, wird dem Dateinamen ein zufälliges Suffix als der tatsächliche Dateiname hinzugefügt, der von jedem Thread geschrieben wird.

Bildbeschreibung hier einfügen

2.6 Unterstützung für Hochverfügbarkeit

writer【parameter】Schreiben Sie einfach die folgenden Parameter in

"hadoopConfig":{
    
     
   "dfs.nameservices": "ns", 
   "dfs.ha.namenodes.ns": "nn1,nn2",
   "dfs.namenode.rpc-address.ns.nn1": "主机名:端口", 
   "dfs.namenode.rpc-address.ns.nn2": "主机名:端口",
  "dfs.client.failover.proxy.provider.ns":"org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
}

2.7 In Hive importieren

Im Wesentlichen wird es auch durch HDFS realisiert

Prozess: in Hive importieren -> hdfswriter-Konfigurationsdatei -> Daten in die Tabelle laden, die Hive entspricht | direkt in den Pfad schreiben, der der Hive-Tabelle entspricht

3. HDFS-Daten lesen und in MySQL schreiben

3. 1 Benennen Sie die im vorherigen Fall hochgeladene Datei um

[whybigdata@node01 datax]$ hadoop fs -mv /student.txt* /student.txt

3.2 Sehen Sie sich die offizielle Vorlage an

[whybigdata@node01 datax]$ python bin/datax.py -r hdfsreader -w mysqlwriter
{
    
    
	"job": {
    
    
		"content": [
		{
    
    
			"reader": {
    
    
				"name": "hdfsreader", 
				"parameter": {
    
    
					"column": [],
					"defaultFS": "",
					"encoding": "UTF-8",
					"fieldDelimiter": ",",
					"fileType": "orc",
					"path": ""
				}
			},
			"writer": {
    
    
				"name": "mysqlwriter", 
				"parameter": {
    
    
					"column": [], 
					"connection": [
						{
    
    
							"jdbcUrl": "",
							"table": []
						}
					],
					"passwoard": "",
					"preSql": [],
					"session": [],
					"username": "",
					"writeMode": ""
				}
			}
		}
		],
		"setting": {
    
    
			"speed": {
    
    
				"channel": ""
			}
		}
	}
}

3.3 Erstellen Sie eine Konfigurationsdatei

[whybigdata@node01 datax]$ vim job/hdfs2mysql.json
{
    
    
	"job": {
    
    
		"content": [
		{
    
    
			"reader": {
    
    
				"name": "hdfsreader", 
				"parameter": {
    
    
					"column": ["*"],
					"defaultFS": "hdfs://node01:9000", 
					"encoding": "UTF-8", 
					"fieldDelimiter": "\t",
					"fileType": "text", 
					"path": "/student.txt"
				}
			},
			"writer": {
    
    
				"name": "mysqlwriter", 
				"parameter": {
    
    
					"column": [
						"id", 
						"name"
					], 
					"connection": [
						{
    
    
							"jdbcUrl": "jdbc:mysql://node01:3306/datax", 
							"table": ["student2"]
						}
					],
					"password": "123456", 
					"username": "root", 
					"writeMode": "insert"
				}
			}
		}
		],
		"setting": {
    
    
			"speed": {
    
    
				"channel": "1"
			}
		}
	}
}

3.4 Erstellen Sie student2 in der MySQL-Datax-Datenbank

  • Tisch bauen
mysql> use datax; 
mysql> create table student2(id int,name varchar(20));         

3.5 Ausführen von Aufgaben

[whybigdata@node01 datax]$ bin/datax.py job/hdfs2mysql.json 
2023-01-10 16:21:53.616 [job-0] INFO  JobContainer -      
任务启动时刻          : 2023-01-10 16:21:41      
任务结束时刻          : 2023-01-10 16:21:53            
任务总计耗时          :  11s 
任务平均流量			  :  3B/s   
记录写入速度			  :  0rec/s   
读出记录总数		   	  :   3  
读写失败总数          :    0                

3.6 Sehen Sie sich die student2-Tabelle an

mysql> select * from student2;
+	+	+
| id	| name	|
+	+	+
| 1001 | zhangsan |
| 1002 | lisi	|
| 1003 | wangwu	|
+	+	+
3 rows in set (0.00 sec)

Beenden!

Ich denke du magst

Origin blog.csdn.net/m0_52735414/article/details/128948764
Empfohlen
Rangfolge