使用 SQOOP 将数据从 SQL 服务器导入到 HIVE
Importing data from SQL Server to HIVE using SQOOP
我能够使用 sqoop 成功地将数据从 SQL 服务器导入到 HDFS。但是,当它尝试 link 到 HIVE 时,我得到一个错误。我不确定我是否正确理解错误
sudo -u hdfs sqoop import \
-Dorg.apache.sqoop.splitter.allow_text_splitter=true \
--connect "jdbc:sqlserver://XX.XX.X.X:1433;instanceName=data-engr-sql-svr; databaseName=AdventureWorks2019" \
--username sa \
--password XXXXXXXX \
--driver com.microsoft.sqlserver.jdbc.SQLServerDriver \
--warehouse-dir "/user/hive/warehouse/AdventureWorks2019.db" \
--hive-import \
--create-hive-table \
--fields-terminated-by ',' \
--hive-table AdventureWorks2019.Production.TransactionHistory \
--table Production.TransactionHistory \
--split-by TransactionID \
-- --schema Production
我不知道如何处理模式,大部分教程使用没有正确模式的虚拟数据库,这没有帮助。
错误
21/03/31 08:52:47 INFO conf.HiveConf: Using the default value passed in for log id: 95e2b831-cfe5-4108-be0f-0df1d9a8797e
21/03/31 08:52:47 INFO session.SessionState: Updating thread name to 95e2b831-cfe5-4108-be0f-0df1d9a8797e main
21/03/31 08:52:47 INFO conf.HiveConf: Using the default value passed in for log id: 95e2b831-cfe5-4108-be0f-0df1d9a8797e
21/03/31 08:52:47 INFO ql.Driver: Compiling command(queryId=hdfs_20210331085247_050638e8-593a-4d01-8020-c40b7db8e66a): CREATE TABLE IF NOT EXISTS AdventureWorks2019.Production.TransactionHistory
( TransactionID
INT, ProductID
INT, ReferenceOrderID
INT, ReferenceOrderLineID
INT, TransactionDate
STRING, TransactionType
STRING, Quantity
INT, ActualCost
DOUBLE, ModifiedDate
STRING) COMMENT 'Imported by sqoop on 2021/03/31 08:52:45' ROW FORMAT DELIMITED FIELDS TERMINATED BY '4' LINES TERMINATED BY '2' STORED AS TEXTFILE
21/03/31 08:52:49 INFO hive.metastore: HMS client filtering is enabled.
21/03/31 08:52:49 INFO hive.metastore: Trying to connect to metastore with URI thrift://cnt7-naya-cdh63:9083
21/03/31 08:52:49 INFO hive.metastore: Opened a connection to metastore, current connections: 1
21/03/31 08:52:49 INFO hive.metastore: Connected to metastore.
21/03/31 08:52:49 INFO parse.SemanticAnalyzer: Starting Semantic Analysis
FAILED: SemanticException [Error 10255]: Invalid table name AdventureWorks2019.Production.TransactionHistory
21/03/31 08:52:49 ERROR ql.Driver: FAILED: SemanticException [Error 10255]: Invalid table name AdventureWorks2019.Production.TransactionHistory
在 Hive 的数据库中没有模式这样的东西。 Database
和 schema
意思相同,可以互换使用。
因此,错误在于使用 database.schema.table
。在 Hive 中使用 database.table
。
我能够使用 sqoop 成功地将数据从 SQL 服务器导入到 HDFS。但是,当它尝试 link 到 HIVE 时,我得到一个错误。我不确定我是否正确理解错误
sudo -u hdfs sqoop import \
-Dorg.apache.sqoop.splitter.allow_text_splitter=true \
--connect "jdbc:sqlserver://XX.XX.X.X:1433;instanceName=data-engr-sql-svr; databaseName=AdventureWorks2019" \
--username sa \
--password XXXXXXXX \
--driver com.microsoft.sqlserver.jdbc.SQLServerDriver \
--warehouse-dir "/user/hive/warehouse/AdventureWorks2019.db" \
--hive-import \
--create-hive-table \
--fields-terminated-by ',' \
--hive-table AdventureWorks2019.Production.TransactionHistory \
--table Production.TransactionHistory \
--split-by TransactionID \
-- --schema Production
我不知道如何处理模式,大部分教程使用没有正确模式的虚拟数据库,这没有帮助。
错误
21/03/31 08:52:47 INFO conf.HiveConf: Using the default value passed in for log id: 95e2b831-cfe5-4108-be0f-0df1d9a8797e 21/03/31 08:52:47 INFO session.SessionState: Updating thread name to 95e2b831-cfe5-4108-be0f-0df1d9a8797e main 21/03/31 08:52:47 INFO conf.HiveConf: Using the default value passed in for log id: 95e2b831-cfe5-4108-be0f-0df1d9a8797e 21/03/31 08:52:47 INFO ql.Driver: Compiling command(queryId=hdfs_20210331085247_050638e8-593a-4d01-8020-c40b7db8e66a): CREATE TABLE IF NOT EXISTS
AdventureWorks2019.Production.TransactionHistory
(TransactionID
INT,ProductID
INT,ReferenceOrderID
INT,ReferenceOrderLineID
INT,TransactionDate
STRING,TransactionType
STRING,Quantity
INT,ActualCost
DOUBLE,ModifiedDate
STRING) COMMENT 'Imported by sqoop on 2021/03/31 08:52:45' ROW FORMAT DELIMITED FIELDS TERMINATED BY '4' LINES TERMINATED BY '2' STORED AS TEXTFILE 21/03/31 08:52:49 INFO hive.metastore: HMS client filtering is enabled. 21/03/31 08:52:49 INFO hive.metastore: Trying to connect to metastore with URI thrift://cnt7-naya-cdh63:9083 21/03/31 08:52:49 INFO hive.metastore: Opened a connection to metastore, current connections: 1 21/03/31 08:52:49 INFO hive.metastore: Connected to metastore. 21/03/31 08:52:49 INFO parse.SemanticAnalyzer: Starting Semantic Analysis FAILED: SemanticException [Error 10255]: Invalid table name AdventureWorks2019.Production.TransactionHistory 21/03/31 08:52:49 ERROR ql.Driver: FAILED: SemanticException [Error 10255]: Invalid table name AdventureWorks2019.Production.TransactionHistory
在 Hive 的数据库中没有模式这样的东西。 Database
和 schema
意思相同,可以互换使用。
因此,错误在于使用 database.schema.table
。在 Hive 中使用 database.table
。