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


声明:本文转载自https://my.oschina.net/zqq90/blog/1579704,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

工具

  • 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

本文发表于2017年11月25日 16:33
(c)注:本文转载自https://my.oschina.net/zqq90/blog/1579704,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 2207 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1