• sqoop 脚本密码管理


    1:背景

    生产上很多sqoop脚本的密码都是铭文,很不安全,找了一些帖子,自己尝试了下,记录下细节,使用的方式是将密码存在hdfs上然后在脚本里用别名来替代。

    2:正文

    第一步:创建密码对应的别名。

    1. hadoop credential create mytest(你的密码别名,随便起就好,或者根据公司的规范来) -provider jceks://hdfs/tmp/test1011
    2. 注意:运行上述命令的时候会提示让你输入密码:直接输入就好了,这个密码是你的数据库的真实密码
    3. 解析下:
    4. jceks://hdfs/tmp/test1011 这里都是自由发挥,或者根据公司的规范来
    5. 1:jceks://hdfs 是固定的 因为我们放到hdfs 如果说放到本地就换为file,推荐放到hdfs
    6. 2:/tmp/test1011 这部分是hdfs上的文件,不用事先创建,没有的话会自动创建


    第二步:直接使用就好了

    1. sqoop import -Dhadoop.security.credential.provider.path=jceks://hdfs/tmp/test1011  --connect 'jdbc:mysql://xxx.xxx.20.9:3306/xxx' --username mdreadonly --password-alias 就是你上述步骤create后面那个别名 --table xxx_opportunity --target-dir /tmp/textfiles
    2. 解析下:
    3. 1: -Dhadoop.security.credential.provider.path= 这些都是固定的
    4. 2: jceks://hdfs/tmp/test1011 这个是第一步里的内容,就是你的真实密码存放的位置
    5. 3: --password-alias 这里就是你的密码的别名

    我刚开始想走个捷径:我没有把import加上,运行的 list-database这个指令,来测试这个方式是否类型,一直报错:

    1. sqoop -Dhadoop.security.credential.provider.path=jceks://hdfs/tmp/test1011 list-databases --connect 'jdbc:mysql://xxxxx:3306/bss' --username mdreadonly --password-alias mytest
    2. 这样不行的

    报错如下:

    归根结底是姿势不对,就得吧import这些都给加上才可以。

  • 相关阅读:
    什么是 Vue 实例,及其与组件的关系
    Netty源码学习3——Channel ,ChannelHandler,ChannelPipeline
    centos8安装jenkins,gitee+webHook配置
    Alibaba内部传出的面试秘技,秋招offer尽收囊中
    java8 新特性
    SQL中GROUP BY语句介绍
    并发编程day05
    希腊字符的发音
    【WinForm】用ChromiumWeb内核开发一个自用的浏览器
    15 -- 最接近原点的 K 个点
  • 原文地址:https://blog.csdn.net/weixin_36630761/article/details/133776842