利用Sqoop在數據庫和Hive、HDFS之間做ETL操作

文章目錄

  • @[toc] 目錄:
    • 一、利用Sqoop,從Oracle到HDFS
    • 二、利用Sqoop,從Oracle到Hive
    • 三、遇到的問題

目錄:

一、利用Sqoop,從Oracle到HDFS

第一步:把Oracle驅動拷貝到Sqoop安裝路徑中的lib文件夾下。

第二步:切換賬戶su hdfs

第三步:執行import操作

sqoop import --connect jdbc:oracle:thin:@IPAddress:databaseName --username userName --password password --table TABLENAME --target-dir /user/operate -m 1 --where "where子句 and 根據需要添加"

說明:

1、導入的目錄若已經存在則要先刪除已經存在的目錄,否則會報路徑以存在的錯誤提示:

FileAlreadyExistsException: Output directoryhdfs://master:8020/user/operate already exists

刪除路徑語句:hadoop fs –rmr /user/operate

如果多次導入同一個表中的數據,數據要以append的形式插入到HDFS目錄中。

2、-m 1表示使用幾個map任務處理,sqoop默認采用4個map任務,有幾個任務在HDFS中執行,結果中就有幾個part-m文件;若m值不等于1,則導入的表需要有主鍵,否則會報錯:

Error during import: No primary key could befound for table KW_CARENLIST. Please specify one with --split-by or perform asequential import with '-m 1'.

sqoop是根據–splite-by <字段名>進行分區,–m設置map的數量,sqoop根據不同的splite參數進行切分,然后將切分出來的區域分配到不同的map中。Splite-by的參數類型不同則其切分方法不同,如int型,sqoop會取最大和最小splite-by字段。Sqoop會向關系數據庫發送一個命令;select max(id),min(id) from table,然后會把max、min之間的區間平均分成m份,最后m個并行的map會執行任務。–splite-by認是主鍵,如果操作的表沒有主鍵導入時會報錯。splite-by對非數字類型的字段支持不好,一般用于主鍵及數字類型的字段(對于非數字類型有可能會導致數據量丟失。如:a,b,c,d,e,a,a,v,f,g)。在實例測試中,要導入的Oracle一張表(200多萬條數據)中沒有關鍵字,若以數據表的最后一列(NUMBER類型,值存在null,存在重復值)為splite-by對象,則最終檢驗導入的數據只有100多萬條。

3、Sqoop默認從數據庫導入到HDFS的分隔符是逗號,**可用—field –terminated-by 來指定輸出文件中的行字段分隔符。**如果導入數據的字段內容中存在分隔符,可以另外指定父、字段包圍符和轉轉義字符。

4、空列的值使用null。Sqoop默認導入的數據格式為文本文件。另可導入其他幾種文件格式,如SequenceFile、Avro格式。文本文件不能保存二進制字段(如數據庫中類型為VARBINARY的列),且在區分null值和null字符串時可能出現問題。Avro和SequenceFile格式的文件能夠為導入的數據提供最精確的表示方式,同時還允許對數據進行壓縮,并支持MapReduce并行處理同一文件的不同部分。(不過目前版本還不能將Avro或Sequence文件加載到Hive中,盡管可以手動地將Avro數據文件加載到Hive中)。SequenceFile文件格式的最后一個缺點是它只支持Java語言,而Avro數據文件卻可以被很多語言支持。

5、Sqoop中的map數設置原則:一個表的數據抽取不超過3分鐘,否則就增加map數。

輔助操作:

查看路徑下文件:hadoop fs -ls /user/operate/

打開指定文件:hadoop fs –cat/user/operate/tabe_name

統計文件中行數:hadoop fs –cat /路徑/文件名 |wc –l

二、利用Sqoop,從Oracle到Hive

訪問 Hive數據庫:
第一步:進入到hive命令行。
第二步:直接導入Hive數據庫。

sqoop import --connect jdbc:oracle:thin:@IPAddress:1521:databaseName --username userName --password password --table TABLENAME  -m 1 --hive-import --hive-database test

相比導入到HDFS中,添加了—hive-import 、–hive-database參數。

–hive-import指定導入方式是導入到hive數據庫中

–hive-database指定導入的目標數據庫test,若無此參數則默認導入到Hive的默認數據庫default中

上面的導入結果是導入到了test.test_table中,Hive自動創建了一張與Oracle導入表一樣的表。也可以自己創建表,指定自己的表名:–hive-table tbName。

注意:因Oracle、Hive數據類型的不一致,導入的數據會存在精度減低的問題

也可以使用–option-file傳入一個文件,使用這種方式可以重用一些配置參數(該方法為測試,看起來不錯,做下記錄,有興趣的可以baidu一下):

sqoop –option-file /user/hive/import.txt –table test.table
其中,/user/hive/import.txt文件內容如下:

輔助操作:
刪除數據庫:DROP DATABASE IF EXISTS test;

刪除數據庫表:DROP TBALE test.test_table;

退出hive命令行:exit;

三、遇到的問題

在使用Sqoop從Oracle抽數據到Hive表時,有時候會遇到以下報錯

Error: java.lang.RuntimeException: java.lang.RuntimeException: java.sql.SQLRecoverableException: IO Error: Connection resetat org.apache.sqoop.mapreduce.db.DBInputFormat.setDbConf(DBInputFormat.java:170)at org.apache.sqoop.mapreduce.db.DBInputFormat.setConf(DBInputFormat.java:161)at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:73)at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:133)at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:749)at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)at java.security.AccessController.doPrivileged(Native Method)at javax.security.auth.Subject.doAs(Subject.java:422)at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1714)at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.lang.RuntimeException: java.sql.SQLRecoverableException: IO Error: Connection resetat org.apache.sqoop.mapreduce.db.DBInputFormat.getConnection(DBInputFormat.java:223)at org.apache.sqoop.mapreduce.db.DBInputFormat.setDbConf(DBInputFormat.java:168)... 10 more

解決
此問題一般是由于缺少一個生成快速隨機數的工具,一般可以通過在JRE中的java.security中修改securerandom.source的值為以下內容并重新登陸shell解決問題。

cd $JAVA_HOME/jre/lib/securityvi java.securitysecurerandom.source=file:/dev/../dev/urandom

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456486.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456486.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456486.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

跨地域的VPC私網互通【高速通道案例】

最近一家大型企業正在將業務遷移至阿里云平臺&#xff0c;用戶有深圳&#xff0c;北京&#xff0c;上海等分支&#xff0c;其中上海為總部&#xff0c;用戶要求在阿里云上的華南1&#xff0c;華北2&#xff0c;華東2分別建立VPC網絡&#xff0c;其中華南1&#xff0c;華北2要與…

HDU 1711 Number Sequence(KMP模板)

http://acm.hdu.edu.cn/showproblem.php?pid1711 這道題就是一個KMP模板。 1 #include<iostream> 2 #include<cstring>3 using namespace std;4 5 const int maxn 10000005;6 7 int n,m;8 9 int next[maxn]; 10 int a[maxn], b[maxn]; 11 12 void get_next() 13…

Redis數據庫學習筆記

一、NoSql&#xff08;非關系型數據庫&#xff09; NoSQL&#xff1a;NoSQL Not Only SQL 非關系型數據庫 ? NoSQL&#xff0c;泛指非關系型的數據庫。隨著互聯網web2.0網站的興起&#xff0c;傳統的關系數據庫在應付web2.0網站&#xff0c;特別是超大規模和高并發的SNS類型…

Sqoop的安裝配置及工作機制

文章目錄[toc] 目錄&#xff1a;1、簡介2、sqoop安裝2.1、下載并解壓2.2、修改配置文件2.3、加入mysql或oracle的jdbc驅動包2.4、驗證啟動3、Sqoop的原理3.1、代碼定制目錄&#xff1a; 1、簡介 sqoop是apache旗下一款“Hadoop和關系數據庫服務器之間傳送數據”的工具。 導入…

3D打印技術在醫療領域能做些什么?幫助精確完成手術

3D打印技術出現在20世紀90年代中期。它與普通打印工作原理基本相同&#xff0c;打印機內裝有液體或粉末等“打印材料”&#xff0c;與電腦連接后&#xff0c;通過電腦控制把“打印材料”一層層疊加起來&#xff0c;最終把計算機上的藍圖變成實物。這打印技術稱為3D立體打印技術…

【一些簡單的jQuery選擇器】

學習【js DOM 編程藝術】&#xff0c;最后面有許多jQuery的選擇器&#xff0c;每個都動手敲了一遍。 jQuery 提供了高級選擇器的方法。 js獲取元素的三個基本方法分別是通過標簽名&#xff0c;類名和id&#xff0c;即(getElementsByTagName, getElementsByClassName和getElemen…

pymysql操作mysql數據庫

一、pymysql操作mysql數據庫 安裝pymysql pip install pymysql 1.1 pymysql操作數據庫的五行拳 連接數據庫 使用Connect方法連接數據庫 pymysql.Connections.Connection(hostNone, userNone, password, databaseNone, port0, charset) 參數說明&#xff1a;host – 數據庫服務…

SecureCRT常用的使用技巧

文章目錄前言&#xff1a;1、SecureCRT 超時自動斷開連接的解決辦法2、SecureCRT連接Linux時&#xff0c;終端顯示亂碼的問題。3、SecureCRT使用自動記錄日志功能4、使用SecureCRT從Windows上傳文件到Linux5、SecureCRT配色推薦和永久設置前言&#xff1a; 由于工作需要&#…

解決:(1062, Duplicate entry '2019-08-30' for key 'rdate')

解決(1062, "Duplicate entry 2019-08-30 for key rdate") 顯然這個問題是因為插入重復主鍵導致從庫不工作了&#xff0c;更改庫的唯一限制&#xff1a; unique 為normal 或者刪除unique ALTER TABLE 表明 DROP INDEX 字節名; 實例 CREATE TABLE good_booked (au…

人民幣數字金額轉大寫金額

public class t {public static String Trans2RMB(String money) {int index money.indexOf(".");if (index < 0) {// 沒有角分money money ".00";index money.indexOf(".");}if (money.substring(index, money.length()).length() < …

eventBus 與fragment

同一個eventbut是不可以注冊兩次的&#xff0c;所以我們會在ondestroy方法中進行unregister&#xff08;&#xff09; 但是在fragment中&#xff0c;最好把unregister&#xff08;&#xff09;方法寫到 onDestroyView&#xff08;&#xff09;方法中而不是onDestrory&#xff0…

機器學習之線性代數總結

目錄1、SVD是什么、表達式是什么及對應的數學含義&#xff1b;2、了解方陣、行列式的含義&#xff08;方陣即矩陣&#xff0c;行列式即矩陣的計算結果&#xff09;3、了解代數余子式的概念4、伴隨矩陣的概念5、知道方陣的逆的公式、范德蒙行列式6、知道矩陣的乘法&#xff0c;掌…

Python操作MongoDB

一 安裝 pymongo pip install pymongo3.4 ? 導入 MongoClient from pymongo import MongoClient 二 連接MongoDB數據庫 MongoDB端口號:27017 連接MongoDB我們需要使用PyMongo庫里面的MongoClient&#xff0c;一般來說傳入MongoDB的IP及端口即可&#xff0c;第一個參數為地…

各種插件

上下滾動抽獎效果, 移動端省級聯動, 時間聯動 , pc端省級聯動 vue 支持各種方式上傳 一個不太完善的拖拽排序 react 拖拽交換插件 各種小插件 壓縮圖片移動端 h5上傳 h5分片上傳 包括服務器 slideSuper 各種滑動效果 wow.js 轉載于:https://www.cnblogs.com/dhsz/p/6377956.h…

MailBee.NET Objects發送電子郵件(SMTP)教程六:創建并發送帶有附件的郵件

2019獨角獸企業重金招聘Python工程師標準>>> MailBee.NET Objects是一款為創建、發送、接收以及處理電子郵件而設計的健壯、功能豐富的.NET控件。幾行代碼便可為應用程序添加E-Mail支持&#xff0c;簡單高效。具備“必需”以及獨特的功能&#xff0c;這些控件幫助開…

機器學習之凸優化原理推導及相關知識總結

文章目錄目錄1、了解凸集和仿射集的基本概念。2、知道幾何體的向量表達。3、了解超平面和半空間的概念。4、了解分割超平面和支撐超平面的含義。5、知道jensen不等式。6、掌握知識&#xff1a;凸函數。7、掌握凸優化目錄 1、了解凸集和仿射集的基本概念。 凸集&#xff1a;在…

jQuery BreakingNews 間歇滾動

BreakingNews 是一款基于jQuery的間歇滾動插件。它可以設置標題、標題顏色、標題背景顏色、鏈接顏色、字體大小、邊框、寬度、自動滾動、間歇時間等等&#xff0c;同時它還好提供兩種過度方式——淡入淡出&#xff08;fade&#xff09;和向上滑動&#xff08;slide&#xff09;…

機器學習之回歸總結

目錄1、了解線性回歸2、了解似然函數3、了解交叉驗證的原理4、梯度下降算法4.1、批量梯度下降算法&#xff08;Batch Gradient Descent&#xff0c;簡稱BGD&#xff09;&#xff1a;4.2、隨機梯度下降算法&#xff08;SGD&#xff09;&#xff1a;4.3、折中&#xff1a; 5、了解…

html中的url、href、src的區別

url不是屬性&#xff0c;src和href是屬性&#xff0c;src用于替換當前元素&#xff0c;href用于在當前文檔和引用資源之間確立聯系&#xff0c;也就是說src引用的路徑是img自己的路徑&#xff0c;href引用的路徑是要跳轉到的地方。 URL&#xff1a;Uniform Resource Locators&…

SSIS 包部署錯誤 0xC0010014

SSIS 包部署錯誤 0xC0010014 Reinhard 在部署 SSIS 包時&#xff0c;提示如下錯誤。 由于錯誤 0xC0010014“發生了一個或多個錯誤。在此消息之前應有更為具體的錯誤消息&#xff0c;對這些錯誤進行詳細說明。此消息用作遇到錯誤的函數的返回值。”&#xff0c;無法加載包。當 C…