日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sqoop操作之Oracle导入到HDFS

發(fā)布時(shí)間:2023/12/10 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sqoop操作之Oracle导入到HDFS 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

導(dǎo)入表的所有字段

sqoop import --connect jdbc:oracle:thin:@192.168.1.100:1521:ORCL \ --username SCOTT --password tiger \ --table EMP -m 1;

?查看執(zhí)行結(jié)果:

hadoop fs -cat /user/hadoop/EMP/part-m-00000

7369,SMITH,CLERK,7902,1980-12-17 00:00:00.0,800,null,20 7499,ALLEN,SALESMAN,7698,1981-02-20 00:00:00.0,1600,300,30 7521,WARD,SALESMAN,7698,1981-02-22 00:00:00.0,1250,500,30 7566,JONES,MANAGER,7839,1981-04-02 00:00:00.0,2975,null,20 ……

說明:
1)默認(rèn)導(dǎo)入到HDFS的路徑是:/user/hadoop(用戶名)/EMP (表名),如果EMP目錄已經(jīng)存在,則報(bào)錯(cuò)
需要先刪除已經(jīng)存在的目錄:hadoop fs -rmr /user/hadoop/EMP;
如果相同的命令導(dǎo)入多次,也會報(bào)錯(cuò)的,需要先刪除已經(jīng)存在的目錄;
2)-m 1表示使用幾個(gè)map任務(wù)處理,sqoop默認(rèn)采用4個(gè)map任務(wù),有幾個(gè)任務(wù)在HDFS的執(zhí)行結(jié)果中就有幾個(gè)part-m;
3)sqoop默認(rèn)從數(shù)據(jù)庫導(dǎo)入到HDFS的分隔符是逗號
4)空列的值使用null
5)sqoop中的map數(shù)設(shè)置原則:一個(gè)表的數(shù)據(jù)抽取不超過3分鐘,否則就增加map數(shù);

  

導(dǎo)入表的指定字段并指定目標(biāo)地址

sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \ --username SCOTT --password tiger \ --table EMP \ --columns "EMPNO,ENAME,JOB,SAL,COMM" \ --target-dir EMP_COLUMN -m 1;

查看執(zhí)行結(jié)果:

hadoop fs -cat /user/hadoop/EMP_COLUMN/part-m-00000

7369,SMITH,CLERK,800,null 7499,ALLEN,SALESMAN,1600,300 7521,WARD,SALESMAN,1250,500 7566,JONES,MANAGER,2975,null 7654,MARTIN,SALESMAN,1250,1400 ......

?

說明:
1)通過--target-dir指定導(dǎo)入到HDFS的具體位置
2)通過--columns指定需要導(dǎo)入的列

?

導(dǎo)入表的指定字段并指定目標(biāo)地址使用指定的分隔符 

sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \ --username SCOTT --password tiger \ --table EMP \ --columns "EMPNO,ENAME,JOB,SAL,COMM" \ --target-dir EMP_COLUMN_SPLIT \ --fields-terminated-by '\t' --lines-terminated-by '\n' \ --null-string '' --null-non-string '0' -m 2;

查看執(zhí)行結(jié)果:

hadoop fs -ls /user/hadoop/EMP_COLUMN_SPLIT

/user/hadoop/EMP_COLUMN_SPLIT/_SUCCESS /user/hadoop/EMP_COLUMN_SPLIT/_logs /user/hadoop/EMP_COLUMN_SPLIT/part-m-00000 /user/hadoop/EMP_COLUMN_SPLIT/part-m-00001 hadoop fs -cat /user/hadoop/EMP_COLUMN_SPLIT/part-m-00001 7654 MARTIN SALESMAN 1250 1400 7698 BLAKE MANAGER 2850 0 7782 CLARK MANAGER 2450 0 7788 SCOTT ANALYST 3000 0 7839 KING PRESIDENT 5000 0 7844 TURNER SALESMAN 1500 0

?

由于這里使用了2個(gè)map任務(wù),所以在hdfs的文件中就有了2個(gè)part; 由于COMM是NUMBER類型,所以HDFS中就是0。
說明:
1)--null-string '': 當(dāng)string類型的字段為空時(shí),使用''代替
2)--null-non-string 0 : 當(dāng)非string類型的字段為空時(shí),使用0代替,項(xiàng)目中不常使用這個(gè)配置。
3)--fields-terminated-by '\t':字段之間采用tab分隔
4)--lines-terminated-by '\n':行之間采用回車分隔

  

根據(jù)條件導(dǎo)入數(shù)據(jù)

sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \ --username SCOTT --password tiger \ --table EMP \ --columns "EMPNO,ENAME,JOB,SAL,COMM" \ --target-dir EMP_COLUMN_WHERE \ --fields-terminated-by '\t' --lines-terminated-by '\n' \ --where 'SAL>2000' \ --null-string '' --null-non-string '0' -m 1 ;

查看執(zhí)行結(jié)果:

hadoop fs -cat /user/hadoop/EMP_COLUMN_WHERE/part-m-00000

7566 JONES MANAGER 2975 0 7698 BLAKE MANAGER 2850 0 7782 CLARK MANAGER 2450 0 7788 SCOTT ANALYST 3000 0 7839 KING PRESIDENT 5000 0 7902 FORD ANALYST 3000 0

?

  

保護(hù)數(shù)據(jù)庫密碼方式?

sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \ --username SCOTT \ --target-dir EMP_COLUMN_PASSWORD1 \ --table EMP -m 1 \ -P;

??Enter password:

?在執(zhí)行時(shí)通過命令行交互的方式輸入密碼;

sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \ --username SCOTT \ --table EMP \ --target-dir EMP_COLUMN_PASSWORD2 \ --password-file /home/hadoop/my-sqoop-password -m 1 ;

?可以將密碼放置到一個(gè)文件中,并且設(shè)置這個(gè)文件只針對某些人可讀、可寫權(quán)限,也能起到密碼安全的作用;

?

更改導(dǎo)入文件格式

sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \ --username SCOTT --password tiger \ --table EMP -m 1 \ --target-dir EMP_SEQUENCEFILE \ --as-sequencefile ; sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \ --username SCOTT --password tiger \ --table EMP -m 1 \ --target-dir EMP_AVRODATAFILE \ --as-avrodatafile ;

?

增量數(shù)據(jù)導(dǎo)入

sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \ --username SCOTT --password tiger \ --table EMP -m 1 \ --target-dir EMP_APPEND \ --incremental append \ --check-column EMPNO \ --last-value 7788 ;

只導(dǎo)入數(shù)據(jù) empno>7788(并不包括7788)的數(shù)據(jù),可實(shí)現(xiàn)增量導(dǎo)入

查看執(zhí)行結(jié)果:hadoop fs -cat /user/hadoop/EMP_APPEND/part-m-00000

7839,KING,PRESIDENT,null,1981-11-17,5000,null,10 7844,TURNER,SALESMAN,7698,1981-09-08,1500,0,30 7876,ADAMS,CLERK,7788,1987-05-23,1100,null,20 7900,JAMES,CLERK,7698,1981-12-03,950,null,30 7902,FORD,ANALYST,7566,1981-12-03,3000,null,20 7934,MILLER,CLERK,7782,1982-01-23,1300,null,10

?

導(dǎo)入沒有主鍵的表到HDFS中

以上的案例導(dǎo)出的表是有主鍵的,下面來演示一個(gè)沒有主鍵的表的導(dǎo)出操作。以表SALGRADE為例

sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \ --username SCOTT --password tiger \ --table SALGRADE \ --target-dir SALGRADE \ --fields-terminated-by '\t' --lines-terminated-by '\n' \ --null-string '' --null-non-string '0' -m 2;

?

報(bào)錯(cuò):
ERROR tool.ImportTool: Error during import: No primary key could be found for table SALGRADE. Please specify one with?
--split-by or perform a sequential import with '-m 1'.
原因是沒有找到主鍵,詳見《數(shù)據(jù)庫導(dǎo)入到HDFS原理》,解決辦法如下:
1)添加主鍵;
2)使用--split-by ' GRADE';
3)使用-m 1,m為幾那么在HDFS上就會生成幾個(gè)文件,就不存在按照字段拆分多個(gè)任務(wù)的問題;

sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \ --username SCOTT --password tiger \ --table SALGRADE \ --target-dir SALGRADE \ --fields-terminated-by '\t' --lines-terminated-by '\n' \ --split-by 'GRADE' --null-string '' --null-non-string '0' -m 2;

查看執(zhí)行結(jié)果:
hadoop fs -ls /user/hadoop/SALGRADE

/user/hadoop/SALGRADE/_SUCCESS /user/hadoop/SALGRADE/_logs /user/hadoop/SALGRADE/part-m-00000 /user/hadoop/SALGRADE/part-m-00001 hadoop fs -cat /user/hadoop/SALGRADE/part-m-00000 1 700 1200 2 1201 1400

?

 

文件腳本導(dǎo)入命令

命令太長,不便查看,將命令寫到文件中去:emp.opt
/home/hadoop/luogankun/workspace/shell/sqoop下創(chuàng)建emp.opt

import --connect jdbc:oracle:thin:@192.168.1.100:1521:ORCL --username SCOTT --password tiger --table EMP --target-dir EMP_OPTIONS_FILE -m 2

?

執(zhí)行腳本:

cd /home/hadoop/luogankun/workspace/shell/sqoop sqoop --options-file ./emp.opt

?

分類:?sqoop 標(biāo)簽:?sqoop

總結(jié)

以上是生活随笔為你收集整理的sqoop操作之Oracle导入到HDFS的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。