文档章节

如何使用 HData + Wit 导出 Redis 中的数据

zqq90
 zqq90
发布于 2017/11/25 13:50
字数 572
阅读 468
收藏 7

工具

  • redis-cli 3.x
  • HData 0.2.8 (最新)
  • jedis-*.jar

不啰嗦, 直接开整

  • 导出特定规则的 key,  以 'PREFIX-' 前缀为例:
REDIS_HOST="localhost"
REDIS_PORT=6379
REDIS_DB=0

redis-cli -h localhost -p 6379 -n 0 --scan --pattern "PREFIX-*"  > "./keys.list"
  • 使用 HData 的 wit 插件 + Jedis 读取值
## 存放 jedis 及其依赖的 jar 的文件夹
LIB_ADDON="./jars"

## 将附加的 jar 添加到 hdata 的 classpath
##    这样就可以在 wit 自由的使用了
##    也可以通过这种方式放入自定义的 wit 插件
##    当然也可以更简单粗暴: 直接扔到 hdata/plugins/wit/ 目录下
HDATA_CLASSPATH="./"
for f in $LIB_ADDON/*.jar; do
  HDATA_CLASSPATH="${HDATA_CLASSPATH}:$f"
done
export HDATA_CLASSPATH="$HDATA_CLASSPATH"


## 技巧: 这里使用 双引号, 方便引入变量
CODE_VARS="
  const host=\"${REDIS_HOST}\"
  const port=${REDIS_PORT}
  const db=${REDIS_DB}
"

## 接下来是逻辑部分, 技巧: 使用单引号 不需要转义脚本里的双引号
##     这段脚本会在每次消费一条记录的时候执行, 以固定的变量名 input 传入
##     这里我们 使用 const 将会得到一个常量的 jedis, 不会在处理每条记录的时候都去重新创建
##     返回值 将作为最终结果
CODE='
  const jedis = redis.clients.jedis.Jedis::new(host, port)
  const __temp = noop(
    jedis.~select(db)
  )
 
  var key = input[0];  // 这是 keys.list 的第一列的值
 
  var result = newRecord() // 新建一个 record
  result[0] = key;
  result[1] = key.~substring("PREFIX-".length)  //可以对 key 做简单处理 (复杂的当然也可以, 只要你愿意)
  result[2] = jedis.~smembers(key)  // 这里演示的是得到 set 的所有值
  return result
'

## 执行 hdata: 用 wit 来包裹我们的目标 Writer, 例如 我们打算导出到 hive
##     这里 wit 只会占用三个额外的配置, 其他使用原 writer 配置 (参考命令第二行)
##     这里投机使用 csv 来读取 key, 如果 key 包含逗号就需要另当别论了
./bin/hdata --reader csv -Rpath="./keys.list" -Rstart.row=1 \
  --writer wit -Wwit="$CODE_VARS $CODE" -WwitInnerWriter=hive \
  -Wdatabase=test -Wtable=dist_table
  • 高级用法示例: 展开集合
  // 略...

  var key = input[0];
  var fixedKey = key.~substring("PREFIX-".length)
  var set = jedis.~smembers(key)

  var list = java.util.ArrayList::new()
  for(item : set) {
    var result = newRecord() // 新建一个 record
    result[0] = key
    result[1] = fixedKey
    result[2] = item
    list.~add(result)
  }
  // 返回一个数组或集合, 将会写入向最终输出中写入多个值
  return list
  • 至此, 导出完成

关于 Wit: https://www.oschina.net/p/webit-script

关于 HData: https://www.oschina.net/p/hdata

© 著作权归作者所有

共有 人打赏支持
zqq90

zqq90

粉丝 69
博文 11
码字总数 5645
作品 1
海淀
程序员
idea的licence server无效了

今天一直用的好好的licence server无效了,无奈只能再次上午去查找可以用的licence server。记得当时查找这个licence server是费了一些心力的。今天百度了一下发现好多。http://intellij.man...

miaojiangmin
2017/11/27
5
0
ETL数据导入/导出工具--HData

HData是一个异构的ETL数据导入/导出工具,致力于使用一个工具解决不同数据源(JDBC、Hive、HDFS、HBase、MongoDB、FTP、Http、CSV、Excel、Kafka等)之间数据交换的问题。HData在设计上同时参...

Jayer
2016/07/08
10.8K
16
HData——ETL 数据导入/导出工具

HData是一个异构的ETL数据导入/导出工具,致力于使用一个工具解决不同数据源(JDBC、Hive、HDFS、HBase、MongoDB、FTP、Http、CSV、Excel、Kafka等)之间数据交换的问题。HData在设计上同时参...

oschina
2016/07/10
943
0
[转]用C写有面向对象特点的程序

转一个比较老的帖子: 原文地址:http://blog.csdn.net/haoel/article/details/2864 作者:陈皓 比如在一个项目中,有大量的数据结构,他们都是双向链表,但又想共用一套对链表的操作算法,这...

晓寒
2011/11/15
673
5
使用redis-dump-load工具导入导出redis数据

需求环境 Redis-dump-load是基于python2.7,利用redis模块编写的一个导出/导入redis数据的一个python程序,因此,需求环境如下: python 2.7 pip2.7 python.redis模块 安装程序 # pip-2.7 in...

icenycmh
06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Mac OS X下Maven的安装与配置

Mac OS X 安装Maven: 下载 Maven, 并解压到某个目录。例如/Users/robbie/apache-maven-3.3.3 打开Terminal,输入以下命令,设置Maven classpath $ vi ~/.bash_profile 添加下列两行代码,之后...

TonyStarkSir
今天
3
0
关于编程,你的练习是不是有效的?

最近由于工作及Solution项目的影响,我在重新学习DDD和领域建模的一些知识。然后,我突然就想到了这个问题,以及我是怎么做的? 对于我来说,提升技能的项目会有四种: 纯兴趣驱动的项目。即...

问题终结者
今天
4
0
打开eclipse出现an error has occurred see the log file

解决方法: 1,打开eclipse安装目录下的eclipse.ini文件; 2,打开的文本文件最后添加一行 --add-modules=ALL-SYSTEM 3,保存重新打开Eclipse。...

任梁荣
昨天
4
0
搞定Northwind示例数据库,无论哪个版本的SQLServer都受用

Northwind数据库 从这里可以找到突破口: http://social.msdn.microsoft.com/Forums/zh-CN/Vsexpressvb/thread/8490a1c6-9018-40c9-aafb-df9f79d29cde 下面是MSDN: http://msdn2.microsoft......

QQZZFT
昨天
1
0
mysql主从同步,安装配置操作

准备 两台mysql服务,我这里准备了如下: 主库:192.168.176.128 从库:192.168.176.131 如何在Linux上安装mysql服务,请看https://blog.csdn.net/qq_18860653/article/details/80250499 操作...

小致dad
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部