2021-04-30

sqoop简单使用

 

sql to hadoop

用来实现关系型数据库与hdfs之间的转换,hdfs <=>mysql

 

sqoop2跟1 不兼容 ,2不投入生产

 

sqoop原理

将导入或导出命令反应成mapreduce程序来实现

在翻译出的mapreduce中主要是对inputformat和outoutformat进行定制

sqoop官方的参数大全 http://sqoop.apache.org/docs/1.4.5/SqoopUserGuide.html

参数

介绍

--connect jdbc:mysql://ip:3306/databasename

#指定JDBC的URL 其中database指的是(Mysql或者Oracle)中的数据库名

--table  tablename

#要读取数据库database中的表名   

--username root   

#用户名

--password 

#密码    

--target-dir   /path

 #指的是HDFS中导入表的存放目录(注意:是目录)

--m 1

#并发的map数量1,如果不设置默认启动4个map task执行数据导入,则需要指定一个列来作为划分map task任务的依据

--hcatalog-table

--hcatalog-database

#指定hive表

#指定hive库

-- where ’查询条件‘   

#导入查询出来的内容,表的子集

--incremental  append

#增量导入

--check-column:column_id

#指定增量导入时的参考列

--last-value:num

#上一次导入column_id的最后一个值

--null-string ‘’   

#导入的字段为空时,用指定的字符进行替换

--create-hive-table

#创建hive表

--list-tables

#列出某个表

--list-database

#列出所有数据库

--fields-terminated-by

#设定导入数据后每行的分隔符

 

 

1.测试sqoop是否能够成功连接数据库

sqoop list-databases --connect jdbc:mysql://10.120.21.151/ --username hive --password p0o9i8u7y6

image.png

导入数据

在sqoop中,‘导入’概念指从非大数据集群向大数据集群中传数据,叫做:导入,即使用import关键字

1.确定Mysql服务开启正常

2.在Mysql中新建一张表并插入一些数据

mysql -uroot -pp0o9I*U&
mysql> create database testbase;
mysql> create table test(id int , name CHAR);
mysql> insert into test values(1,'w');
mysql> insert into test values(2,'s');

image.png

3.导入数据

(1)全部导入

sqoop import --connect jdbc:mysql://10.120.21.151/metastore \
--username hive \
--password p0o9i8u7y6 \
--table t1 \
--target-dir /user/hive/t1 \
--num-mappers 1 \
--fields-terminated-by "\t"

image.png

 

 


以下是重新在mysql和hive中创建的测试数据

从hdfs到mysql

把需要输出的文件上传至hdfs中,设置好hdfs中目录和文件的权限,不然可能会报权限不够的错误

Sqoop export

sqoop export \
--connect jdbc:mysql://10.193.130.192/my_wiki \ 
--username bigvoid  \
-P  (此处用--password的话会报错)  \
--table export_test \
--num-mappers 1 \
--export-dir /user/super/export \
--input-fields-terminated-by “\t”

--password的报错

检查导入的数据

 

集成了kerberos的需注意登录相应的用户进行操作

Sqoop expot  将hive表导入mysql中

  1. 全部导入
全部导入
sqoop export \
--connect jdbc:mysql://10.193.130.192:3306/my_wiki \
--username bigvoid \
-P \
--table export_test(mysql表) \
--hcatalog-database fsimage(hive数据库) \
--hcatalog-table h_m(hive表)

检查导入数据

 

2. 部分导入

指定导入(指定列导入):
sqoop export \
--connect jdbc:mysql://10.193.130.192:3306/my_wiki \
--username bigvoid -P --table export_test(mysql表) \
--columns "id" \
--hcatalog-database fsimage(hive数据库)  \
--hcatalog-table h_m(hive表)

检查导入的数据

 

Mysql到hive

(1)导入数据到HDFS中

 

(1)导入数据到HDFS中sqoop export \
sqoop import \
--connect jdbc:mysql://10.193.130.192:3306/my_wiki(mysql库) \
--username bigvoid -P --table export_test(mysql表) \
--target-dir /user/super/import --num-mappers 1 \
--hive-table h_m(hive表)\
 -m 1 \
--split-by date \
--direct \
--fields-terminated-by '\t

检查导入文件

 

hadoop fs -ls /user/super

 

(2)加载数据

Load data inpath ‘/user/super/import’ into table h_m;

(3)检查数据

 

直接从mysql导入hive 不需要load data加载

 sqoop import \
--connect jdbc:mysql://10.193.130.192:3306/my_wiki \                           
--username bigvoid \
-P \
--table export_test \
--fields-terminated-by '\t' \
--delete-target-dir \
--num-mappers 1 \
--hive-import \
--hive-database fsimage \
--hive-table m_h 

 

检查导入数据

 

 

增量导入

Append方式

(1)创建一个mysql appendtest表

插入三条数据

 

(2)用sqoop语句创建一个跟mysql一样的appendtest表

用sqoop语句创建一个跟mysql一样的appendtest表
sqoop create-hive-table \
--connect jdbc:mysql://10.193.130.192:3306/my_wiki \
--username bigvoid -P \
--table appendtest \
--hive-database fsimage \
--hive-table appendtest

进行导入,将id>0的三条数据进行导入

 

(3)进行导入,将id>0的三条数据进行导入
sqoop import \
--connect jdbc:mysql://10.193.130.192/my_wiki \
--username bigvoid -P --table appendtest \
--hive-import -m 1 \
--hive-database fsimage \
--hive-table appendtest \
--incremental append \
--check-column id \
--last-value 0

(4)检查导入数据

(5)向mysql表中再次插入数据

再次执行增量导入 上一次导入的时候将--last-value 设置0

此次导入时将值设置为3

(6)再次执行增量导入 上一次导入的时候将--last-value 设置0此次导入时将值设置为3
sqoop import \
--connect jdbc:mysql://10.193.130.192/my_wiki \
--username bigvoid \                           
-P \
--table appendtest \                                    
--hive-import -m 1 \
--hive-database fsimage \
--hive-table appendtest \
--incremental append \
--check-column id \
--last-value 3

查询导入数据

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用以下代码将该XML实例转换为application/x-www-form-urlencoded格式的模型: ``` using System.Net.Http; using System.Text; using System.Xml; // 将XML实例转换为application/x-www-form-urlencoded模型 var xmlString = @"<OTA_InventoryCheckRQ EchoToken='487ef6b0-3526-45e3-81e7-0eac31754c10' Password='abc888888' PrimaryLangID='en-us' TimeStamp='2021-04-20 10:30:59' UserName='guowang' Version='1.000'> <POS> <Source> <RequestorID ID='elongID' Type='2'/> </Source> </POS> <HotelReservations> <HotelReservation> <RoomStay> <RoomTypes> <RoomType RoomTypeCode='5412309'/> </RoomTypes> <RatePlans> <RatePlan RatePlanCode='4674478'/> </RatePlans> <GuestCounts> <GuestCount AgeQualifyingCode='10' Count='2'/> <GuestCount AgeQualifyingCode='8' Count='0'/> </GuestCounts> <BasicPropertyInfo HotelCode='2525137'/> </RoomStay> <ResGlobalInfo> <RoomCount>10</RoomCount> <MemberLevel>V1</MemberLevel> <TimeSpan End='2021-04-30' Start='2021-04-29'/> </ResGlobalInfo> </HotelReservation> </HotelReservations> </OTA_InventoryCheckRQ>"; var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xmlString); var formContent = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("Message", xmlDoc.OuterXml) }); var encodedString = formContent.ReadAsStringAsync().Result; Console.WriteLine(encodedString); ``` 输出结果为: ``` Message=%3COTA_InventoryCheckRQ%20EchoToken%3D%22487ef6b0-3526-45e3-81e7-0eac31754c10%22%20Password%3D%22abc888888%22%20PrimaryLangID%3D%22en-us%22%20TimeStamp%3D%222021-04-20%2010%3A30%3A59%22%20UserName%3D%22guowang%22%20Version%3D%221.000%22%3E%3CPOS%3E%3CSource%3E%3CRequestorID%20ID%3D%22elongID%22%20Type%3D%222%22%2F%3E%3C%2FSource%3E%3C%2FPOS%3E%3CHotelReservations%3E%3CHotelReservation%3E%3CRoomStay%3E%3CRoomTypes%3E%3CRoomType%20RoomTypeCode%3D%225412309%22%2F%3E%3C%2FRoomTypes%3E%3CRatePlans%3E%3CRatePlan%20RatePlanCode%3D%224674478%22%2F%3E%3C%2FRatePlans%3E%3CGuestCounts%3E%3CGuestCount%20AgeQualifyingCode%3D%2210%22%20Count%3D%222%22%2F%3E%3CGuestCount%20AgeQualifyingCode%3D%228%22%20Count%3D%220%22%2F%3E%3C%2FGuestCounts%3E%3CBasicPropertyInfo%20HotelCode%3D%222525137%22%2F%3E%3C%2FRoomStay%3E%3CResGlobalInfo%3E%3CRoomCount%3E10%3C%2FRoomCount%3E%3CMemberLevel%3EV1%3C%2FMemberLevel%3E%3CTimeSpan%20End%3D%222021-04-30%22%20Start%3D%222021-04-29%22%2F%3E%3C%2FResGlobalInfo%3E%3C%2FHotelReservation%3E%3C%2FHotelReservations%3E%3C%2FOTA_InventoryCheckRQ%3E ``` 其中,key为"Message",value为对该XML实例进行URL编码后的字符串。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值