sqoop从mysql导出数据到hive 怎么设置hive数据库队列

sqoop从mysql导出数据到hive 怎么设置hive数据库队列,第1张

直接在mysql里从本地文件系统导入数据

mysql》LOAD DATA LOCAL INFILE 'C:\\Users\\asys\\Documents\\Tencent Files\\13174605\\FileRecv\\2015082818' INTO TABLE track_log

FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' (注意这里文件是从linux导出的,以\n结尾)

sqoop从hive导出数据到mysql

先在mysql建立表

grant all privileges on *.* to 'root'@'%' identified by 'Nokia123' with grant option

CREATE TABLE `track_log` (

`id` varchar(1000) DEFAULT NULL,

`url` varchar(5000) DEFAULT NULL,

`referer` varchar(5000) DEFAULT NULL,

`keyword` varchar(5000) DEFAULT NULL,

`type` varchar(1000) DEFAULT NULL,

`guid` varchar(1000) DEFAULT NULL,

`pageId` varchar(1000) DEFAULT NULL,

`moduleId` varchar(1000) DEFAULT NULL,

`linkId` varchar(1000) DEFAULT NULL,

`attachedInfo` varchar(1000) DEFAULT NULL,

`sessionId` varchar(1000) DEFAULT NULL,

`trackerU` varchar(1000) DEFAULT NULL,

`trackerType` varchar(1000) DEFAULT NULL,

`ip` varchar(1000) DEFAULT NULL,

`trackerSrc` varchar(1000) DEFAULT NULL,

`cookie` varchar(5000) DEFAULT NULL,

`orderCode` varchar(1000) DEFAULT NULL,

`trackTime` varchar(1000) DEFAULT NULL,

`endUserId` varchar(1000) DEFAULT NULL,

`firstLink` varchar(1000) DEFAULT NULL,

`sessionViewNo` varchar(5000) DEFAULT NULL,

`productId` varchar(1000) DEFAULT NULL,

`curMerchantId` varchar(1000) DEFAULT NULL,

`provinceId` varchar(1000) DEFAULT NULL,

`cityId` varchar(1000) DEFAULT NULL,

`ds` varchar(20) DEFAULT NULL,

`hour` varchar(20) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=latin1

然后运行sqoop

jimmy》sqoop export --connect jdbc:mysql://localhost:3306/track_log --username root --password Nokia123 --table track_log --export-dir "/user/hive/warehouse/track_log/ds=20150828/hour=18" --fields-terminated-by '\t' --columns "id, url,referer,keyword,type,guid,pageId,moduleId,linkId,attachedInfo,sessionId,trackerU,trackerType,ip,trackerSrc,cookie,orderCode,endUserId,firstLink,sessionViewNo,productId,curMerchantId,provinceId,cityId,ds ,hour"

注意: 1)--table track_log 是目的mysql的表,库在链接指定(这里库名也叫track_log) --connect jdbc:mysql://localhost:3306/track_log

2) 不能直接从hive表里导出(不能--hive-table),只能从hdfs导出

3)必须指定字段--columns

4)字段分割符号要和hdfs文件里的一致 --fields-terminated-by '\t'

这完全是文不对题啊,队列是一种先进先出的数据结构,通常在各种编程语言中都提供相应的类库支持,但MySQL是一个关系型数据库管理系统,并不直接提供这种功能,也不应该提供这种功能。

如果真需要先进先出,就把查询的结果放入到对应高级语言的队列中即可。

Redis队列功能介绍

List

常用命令:

Blpop删除,并获得该列表中的第一元素,或阻塞,直到有一个可用

Brpop删除,并获得该列表中的最后一个元素,或阻塞,直到有一个可用

Brpoplpush

Lindex获取一个元素,通过其索引列表

Linsert在列表中的另一个元素之前或之后插入一个元素

Llen获得队列(List)的长度

Lpop从队列的左边出队一个元素

Lpush从队列的左边入队一个或多个元素

Lpushx当队列存在时,从队到左边入队一个元素

Lrange从列表中获取指定返回的元素

Lrem从列表中删除元素

Lset设置队列里面一个元素的值

Ltrim修剪到指定范围内的清单

Rpop从队列的右边出队一个元素

Rpoplpush删除列表中的最后一个元素,将其追加到另一个列表

Rpush从队列的右边入队一个元素

Rpushx从队列的右边入队一个元素,仅队列存在时有效

Redis支持php、python、c等接口

应用场景:

Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表,粉丝列表等都可以用Redis的list结构来实现。

Lists 就是链表,相信略有数据结构知识的人都应该能理解其结构。使用Lists结构,我们可以轻松地实现最新消息排行等功能。

Lists的另一个应用就是消息队列,

可以利用Lists的PUSH *** 作,将任务存在Lists中,然后工作线程再用POP *** 作将任务取出进行执行。Redis还提供了 *** 作Lists中某一段的api,你可以直接查询,删除Lists中某一段的元素。

如果需要还可以用redis的Sorted-Sets数据结构来做优先队列.可以给每条消息加上一个唯一的序号。这里就不详细介绍了。

实现方式:

Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便 *** 作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。

示意图:

1)入队

2)出队(非阻塞模式)

lpopd出列表首元素(即最后入队的元素)

Rpopd出列表尾元素 (即入队的最开始的一个元素)

注意:如果要当作队列功能,应该是用这个出队

这里的出队都是非阻塞模式,就是你用pop出队的时候,如果队列是空的话,你得到的是一个NULL的值

3)出队(阻塞模式)

假如现在queue队列为空  我们用brpop命令

BRPOP 是一个阻塞的列表d出原语。 它是 RPOP 的阻塞版本,因为这个命令会在给定list无法d出任何元素的时候阻塞连接。 该命令会按照给出的 key 顺序查看 list,并在找到的第一个非空 list 的尾部d出一个元素。

A)

我们执行brpop命令

可以看到队列queue没有元素的时候  是阻塞的  即不返回值

其中0是超时时间 为0表示一直等待

B)

这个时候我们用lpush往队列里 入队一个数据“bbb”

C)

阻塞的队列立马会d出出队元素   显示队列名字  和 出队元素  已经等待了多少时间

D)

Brpop还能同时阻塞多个队列比如这样

用redis的list当作队列可能存在的问题

1)redis崩溃的时候队列功能失效

2)如果入队端一直在塞数据,而出队端没有消费数据,或者是入队的频率大而多,出队端的消费频率慢会导致内存暴涨

3)Redis的队列也可以像rabbitmq那样  即可以做消息的持久化,也可以不做消息的持久化。

当做持久话的时候,需要启动redis的dump数据的功能.暂时不建议开启持久化。

Redis其实只适合作为缓存,而不是数据库或是存储。它的持久化方式适用于救救急啥的,不太适合当作一个普通功能来用。应为dump时候,会影响性能,数据量小的时候还看不出来,当数据量达到百万级别,内存10g左右的时候,非常影响性能。

4)假如有多个消费者同时监听一个队列,其中一个出队了一个元素,另一个则获取不到该元素

5)Redis的队列应用场景是一对多或者一对一的关系,即有多个入队端,但是只有一个消费端(出队)

PHP的redis 简单 *** 作示例


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/6758269.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存