1. 程式人生 > >使用sqoop從Oracle或mysql抽取資料到HDFS遇到的報錯及解決

使用sqoop從Oracle或mysql抽取資料到HDFS遇到的報錯及解決

一、參考文件:

1、https://www.rittmanmead.com/blog/2014/03/using-sqoop-for-loading-oracle-data-into-hadoop-on-the-bigdatalite-vm/

2、http://www.cnblogs.com/bjtu-leefon/archive/2013/06/28/3160549.html

二、使用指令碼 
----sqoop import zdsd


使用注意:


1、執行節點 Sqoop_home/lib 裡新增目標資料庫的jar
2、-m 表示併發啟動map的數量 -m 1表示啟動一個map, 指定-m > 1時,必須新增 --split-by 指定分割列,
,分割列要求至少滿足兩個條件中任一個:1)目標表有主鍵   2)有num 型別或者date型別,因為會執行 min(split_column),max(split_column)操作,決定如何分割
否則無法啟用多個map
3、指定map數量不應過大,不然會增加資料來源的壓力


4、執行復雜sql 需要使用 --query 引數


sqoop import --connect jdbc:oracle:thin:@10.**.**.**:1521/jwy --username ** --password ** --table ZHZY.ZDSF --target-dir '/hawq_external/zdsd_sqoop_test1' -m 1


----kkxx   -m > 1 必須有主鍵,,,如果沒有主鍵則必須指定split-by 分佈列,,,,split-by  
---Generating splits for a textual index column allowed only in case of "-Dorg.apache.sqoop.splitter.allow_text_splitter=true" property passed as a parameter 會求最大值,最小值,,,必須不能是text型別
sqoop import --connect jdbc:oracle:thin:@10.**.**.**:1521/jwy --username ** --password ** --table ZHZY.CLD_TFC_PASS171201171215 --target-dir '/hawq_external/hg_sqoop_kkxx' -m 20 --split-by ZHKRKSJ


-ZHZY.B_XDRY


sqoop import --connect jdbc:oracle:thin:@10.**.**.**:1521/jwy --username ** --password ** --table table_name --target-dir '/hawq_external/hg_xdry_sqoop_test1' -m 1


---ZHZY.V_QS_JJ_KKXX 檢視


sqoop import --connect jdbc:oracle:thin:@10.**.**.**:1521/jwy --username ** --password ** --table ZHZY.V_QS_JJ_KKXX --target-dir '/hawq_external/hg_v_kkxx_sqoop_test' -m 10






三、使用過程中的報錯


1、在Kettle中用自帶作業中的sqoop import
 
2017/12/15 15:16:23 - Spoon - 正在開始任務...
2017/12/15 15:16:23 - sqoop_kk_zhugandao - 開始執行任務
2017/12/15 15:16:23 - sqoop_kk_zhugandao - 開始項[Sqoop Import]
2017/12/15 15:16:23 - Sqoop Import - 2017/12/15 15:16:23 - fs.default.name is deprecated. Instead, use fs.defaultFS
2017/12/15 15:16:23 - Sqoop Import - 2017/12/15 15:16:23 - $SQOOP_CONF_DIR has not been set in the environment. Cannot check for additional configuration.
2017/12/15 15:16:23 - Sqoop Import - 2017/12/15 15:16:23 - Running Sqoop version: 1.4.6.2.5.3.0-37
2017/12/15 15:16:23 - Sqoop Import - 2017/12/15 15:16:23 - $SQOOP_CONF_DIR has not been set in the environment. Cannot check for additional configuration.
2017/12/15 15:16:23 - Sqoop Import - 2017/12/15 15:16:23 - Data Connector for Oracle and Hadoop is disabled.
2017/12/15 15:16:23 - Sqoop Import - ERROR (version 6.1.0.1-196, build 1 from 2016-04-07 12.08.49 by buildguy) : Error running Sqoop
2017/12/15 15:16:23 - Sqoop Import - ERROR (version 6.1.0.1-196, build 1 from 2016-04-07 12.08.49 by buildguy) : java.lang.NoClassDefFoundError: org/apache/avro/LogicalType
2017/12/15 15:16:23 - Sqoop Import - at org.apache.sqoop.manager.DefaultManagerFactory.accept(DefaultManagerFactory.java:66)
2017/12/15 15:16:23 - Sqoop Import - at org.apache.sqoop.ConnFactory.getManager(ConnFactory.java:184)
2017/12/15 15:16:23 - Sqoop Import - at org.apache.sqoop.tool.BaseSqoopTool.init(BaseSqoopTool.java:282)
2017/12/15 15:16:23 - Sqoop Import - at org.apache.sqoop.tool.ImportTool.init(ImportTool.java:89)
2017/12/15 15:16:23 - Sqoop Import - at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:610)
2017/12/15 15:16:23 - Sqoop Import - at org.apache.sqoop.Sqoop.run(Sqoop.java:147)
2017/12/15 15:16:23 - Sqoop Import - at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
2017/12/15 15:16:23 - Sqoop Import - at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:183)
2017/12/15 15:16:23 - Sqoop Import - at org.apache.sqoop.Sqoop.runTool(Sqoop.java:225)
2017/12/15 15:16:23 - Sqoop Import - at org.pentaho.hadoop.shim.common.ClassPathModifyingSqoopShim$1.call(ClassPathModifyingSqoopShim.java:81)
2017/12/15 15:16:23 - Sqoop Import - at org.pentaho.hadoop.shim.common.ClassPathModifyingSqoopShim$1.call(ClassPathModifyingSqoopShim.java:1)
2017/12/15 15:16:23 - Sqoop Import - at org.pentaho.hadoop.shim.common.ClassPathModifyingSqoopShim.runWithModifiedClassPathProperty(ClassPathModifyingSqoopShim.java:62)
2017/12/15 15:16:23 - Sqoop Import - at org.pentaho.hadoop.shim.common.ClassPathModifyingSqoopShim.runTool(ClassPathModifyingSqoopShim.java:75)
2017/12/15 15:16:23 - Sqoop Import - at org.pentaho.hadoop.shim.common.delegating.DelegatingSqoopShim.runTool(DelegatingSqoopShim.java:41)
2017/12/15 15:16:23 - Sqoop Import - at org.pentaho.big.data.impl.shim.sqoop.SqoopServiceImpl.runTool(SqoopServiceImpl.java:62)
2017/12/15 15:16:23 - Sqoop Import - at org.pentaho.big.data.kettle.plugins.sqoop.AbstractSqoopJobEntry.executeSqoop(AbstractSqoopJobEntry.java:302)
2017/12/15 15:16:23 - Sqoop Import - at org.pentaho.big.data.kettle.plugins.sqoop.AbstractSqoopJobEntry$1.run(AbstractSqoopJobEntry.java:273)
2017/12/15 15:16:23 - Sqoop Import - at java.lang.Thread.run(Thread.java:745)
2017/12/15 15:16:23 - Sqoop Import - Caused by: java.lang.ClassNotFoundException: org.apache.avro.LogicalType
2017/12/15 15:16:23 - Sqoop Import - at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
2017/12/15 15:16:23 - Sqoop Import - at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
2017/12/15 15:16:23 - Sqoop Import - at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
2017/12/15 15:16:23 - Sqoop Import - at org.pentaho.di.core.plugins.KettleURLClassLoader.loadClassFromParent(KettleURLClassLoader.java:89)
2017/12/15 15:16:23 - Sqoop Import - at org.pentaho.di.core.plugins.KettleURLClassLoader.loadClass(KettleURLClassLoader.java:108)
2017/12/15 15:16:23 - Sqoop Import - at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
2017/12/15 15:16:23 - Sqoop Import - at java.lang.Class.forName0(Native Method)
2017/12/15 15:16:23 - Sqoop Import - at java.lang.Class.forName(Class.java:348)
2017/12/15 15:16:23 - Sqoop Import - at org.pentaho.hadoop.shim.HadoopConfigurationClassLoader.loadClass(HadoopConfigurationClassLoader.java:99)
2017/12/15 15:16:23 - Sqoop Import - at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
2017/12/15 15:16:23 - Sqoop Import - ... 18 more
2017/12/15 15:16:23 - sqoop_kk_zhugandao - 完成作業項[Sqoop Import] (結果=[false])
2017/12/15 15:16:23 - sqoop_kk_zhugandao - 任務執行完畢
2017/12/15 15:16:23 - Spoon - 任務已經結束.
  
2、

1.原表沒有設定主鍵,出現錯誤提示:

ERROR tool.ImportTool: Error during import: No primary key could be found for table xxx. Please specify one with --split-by or perform a sequential import with '-m 1'

提示說明的很清楚:在表xxx沒有發現主鍵,使用--split-by指定一個column作為拆分欄位或者在命令列上新增 ‘-m 1',為什麼會出現這樣的錯誤提示,我們需要了解一下Sqoop的並行匯入機制:

一般來說,Sqoop會建立4個程序,同時進行資料匯入操作

如果要匯入表的主鍵為id,並行的數量為4,那麼Sqoop首先會執行如下一個查詢:

select max(id) as max, select min(id) as min from table [where 如果指定了where子句];

通過這個查詢,獲取到需要拆分欄位(id)的最大值和最小值,假設分別是1和1000。

然後,Sqoop會根據需要並行匯入的數量,進行拆分查詢,比如上面的這個例子,並行匯入將拆分為如下4條SQL同時執行:

select * from table where 0 <= id < 250;

select * from table where 250 <= id < 500;

select * from table where 500 <= id < 750;

select * from table where 750 <= id < 1000;

注意,這個拆分的欄位需要是整數。

如果要匯入的表中沒有主鍵,則我們應該手動選取一個合適的拆分欄位。

首先查看錶中有那些欄位,如查看錶student:desc student;  

表中有id,name兩個欄位,那我們就可以選取id作為拆分欄位,將表匯入hive時在命令中新增 --split-by id,就不會報錯了。

參考:http://www.cnblogs.com/gpcuster/archive/2011/03/01/1968027.html

3.Sqoop Hive exited with status 1

當從mysql向Hive匯入資料時,執行:

 sqoop import --connect jdbc:mysql://localhost/hive --username hive --password hive --table dept_InnoDB --hive-table dept_InnoDB --hive-import --split-by deptno 

出現以下錯誤:

13/06/27 18:35:05 INFO hive.HiveImport: Exception in thread "main" java.lang.NoSuchMethodError: org.apache.thrift.EncodingUtils.setBit(BIZ)B
13/06/27 18:35:10 ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Hive exited with status 1

google之,原來是機器上裝的hive和hbase的版本不相容造成的,在這裡具體的說是hive和habse所使用的thrift版本不一樣。當hive和hbase的jar包都新增到CLASSPATH時,執行Sqoop時只會啟用一個版本的thrift,這樣往往導致hive執行出錯。

執行:

locate *thrift*.jar

看到:

果然,hive和hbase引用了不同版本的thrift.

這個問題解決起來也非常簡單,將HBASE_HOME設定為空,讓Sqoop不能載入hbase版本的thrift就OK了。


文件還待完善。

相關推薦

使用sqoopOraclemysql抽取資料到HDFS遇到的解決

一、參考文件: 1、https://www.rittmanmead.com/blog/2014/03/using-sqoop-for-loading-oracle-data-into-hadoop-on-the-bigdatalite-vm/ 2、http://www.cn

oracle線上遷移同步資料,資料庫

報需要升級的錯誤,具體處理步驟如下: 一、錯誤資訊 SQL> alter database open ;alter database open resetlogs*ERROR at line 1:ORA-01092: ORACLE instance terminated. Disconnection

mysql數據庫表字段使用DESC等關鍵字解決方法

直接 方式 sel max desc base 字段名 字段 方法 <!-- desc是MySQL數據庫的關鍵字,作為字段名直接使用會報錯 --><sql id="Base_Column"> id,mol,ip,port,name,t.desc,m

MySQL中查詢時"Lost connection to MySQL server during query"解決方案

解決 lose tool 查詢 不用 resolv 原因 網上 技術 一、問題描述: mysql數據庫查詢時,遇到下面的報錯信息: 二、原因分析: dw_user 表數據量比較大,直接查詢速度慢,容易"卡死",導致數據庫自動連接超時.... 三、解決辦法: 方案1.在my

mysql 高版本jdbc驅動程式 使用PreparedStatement.setBinaryStream方法解決辦法

mysql 使用以下版本驅動程式 在PreparedStatement中執行setBinaryStream方法時報錯誤: mysql-connector-java-5.0.8-bin.jar mysql-connector-java-5.1.13-bin.jar 錯誤資訊如下

SpringBoot 提交Json格式資料解決方法

錯誤資訊 org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' no

ORACLE 12C 安裝過程相關解決方案

對於oracle 12c最新版的資料庫,在安裝建庫的過程中,我們會遇到很多的問題,在這裡我講我遇到的問題整理了一下,並且給出相應的解決方案。 1.ORA-12500: TNS: 監聽程式無法啟動專用伺服器程序 顧名思義,這類問題與相關的監聽服務有關

sqooporacle資料庫抽取資料,匯入到hive

環境: hadoop-2.7.5 sqoop-1.4.7 zookeeper-3.4.10 hive-2.3.3 (使用mysql配置元資料庫) jdk1.8.0_151 oracle 11.2.0.3.0 經過一番baidu,總算初步成功,現在記錄一下中間過程. 1.拷貝hive/conf/

sqoop import Oracle往Hadoop導資料 Io exception: The Network Adapter could not establish the connection

一.問題描述       在Hadoop叢集的一個節點上用sqoop  import 從Oracle 取資料總報如下錯誤: 17/12/28 19:16:48 INFO mapreduce.Job: Task Id : att

sqooporacle抽取資料到hbase

sqoop import --connect jdbc:oracle:thin:@//*.*.*.*:1521/orcl --username * --password * --query " select TEST_REPORT_NO as ROWKEY,a.* from V_ESBHL_BLOOD_T

Sqoop的安裝與Mysql資料匯入到hdfs框架中

Sqoop簡介 Sqoop(發音:skup)是一款開源的工具,主要用於在Hadoop(Hive)與傳統的資料庫(mysql、postgresql...)間進行資料的傳遞,可以將一個關係型資料庫(例如 : MySQL ,Oracle ,Postgres等)中的資料導進到Hadoop的HDFS中,也

利用Sqooporacle同步資料到HDFS出現The Network Adapter could not establish the connection的解決方法

問題:Data Connector for Oracle and Hadoop is disabled,Error executing statement: java.sql.SQLException: Io exception: The Network Adapter c

使用 Binlog 和 Canal MySQL 抽取資料

資料抽取是 ETL 流程的第一步。我們會將資料從 RDBMS 或日誌伺服器等外部系統抽取至資料倉庫,進行清洗、轉換、聚合等操作。在現代網站技術棧中,MySQL 是最常見的資料庫管理系統,我們會從多個不同的 MySQL 例項中抽取資料,存入一箇中心節點,或直接進入 Hive。市

Navicat匯出oracle建表語句,應用sqooporacle中的表資料匯入到hive

                            ORACLE庫的操作首先選擇navicat作為這個檔案的工具,作為資料庫表結構的匯入和匯出工具。  匯出的時候 會連結構和資料都匯出來,會形成一個sql檔案  也可以只倒檢視或者表都可以的。但是以匯出的這個檔案匯入的時候

OracleMySQL,余額寶雲實踐分享

並行化 即使 速度 邊緣 直銷 初步 溝通 中心 比較 原文鏈接:http://www.csdn.net/article/2013-11-/2817426-interview-financial-case-yuerbao-aliyun07 余額寶、百度百發、騰訊財付通謀劃的

sqoopDB2遷移數據到HDFS

rda byte edi apache auto lec $2 doc .sql Sqoop import job failed to read data from DB2 database which has UTF8 encoding. Essentially, eve

Mybatis 搭配 阿里druid連線池 連線 oracle mysql

DRUID介紹     DRUID是阿里巴巴開源平臺上一個資料庫連線池實現,它結合了C3P0、DBCP、PROXOOL等DB池的優點,同時加入了日誌監控,可以很好的監控DB池連線和SQL的執行情況,可以說是針對監控而生的DB連線池(據說是目前最好的連線池,不知道速

SQOOPOracle匯入資料到Hive時hang up在MapReduce作業過程

打算從Oracle一個模式中匯入資料到Hive,打算匯入的資料都存在視圖裡。 其他幾個檢視的匯入過程都很順利,有一個小坑是如果沒有設定split-by column選項,只能用一個mapper(--num-mappers 1)。 基本語句為 sqoop import -

資料庫遷移之oracleMySQL最簡單的方法

因工作需要將oracle資料庫換到MySQL資料庫,資料量比較大,百萬級別的資料,表也比較多,有沒有一種既快捷又安全的方法呢?答案是肯定的,下面介紹一個工具,非常的好用 需要的工具:Navicat Premium  Navicat Premium 原本是收費的,但是網上也

Logstash學習10_LogstashKafka檔案接收資料的配置demo介紹

下面介紹兩個Logstash的配置Demo: Demo1: input { kafka { zk_connect => "10.10.16.2:2181,10.10.16.3:2181,10.10.16.4:2181" group_id => "test