加密体系

1. 三个核心问题 整个体系其实在解决三件事: 你是谁?(身份认证) 数据能不能被偷看?(加密传输) 如何安全地交换密钥?(密钥分发) 2. 非对称加密(公钥 / 私钥) 核心定义 使用一对密钥:公钥 + 私钥 公钥:可以公开 私钥:必须保密 二者不可互相推导 两种用途(关键区分) ① 加密通信 graph LR A[发送方] -->|公钥加密| B[密文] B --> C[接收方] C -->|私钥解密| D[明文] ② 身份认证(SSH) sequenceDiagram participant A as 客户端(私钥) participant B as 服务器(公钥) B->>A: challenge A->>B: signature B->>B: 公钥验证 B->>A: 通过/拒绝 关键公式 signature = Sign(私钥, challenge) Verify(公钥, challenge, signature) = true 本质总结 私钥负责“生成证明”,公钥负责“验证证明” 3. SSH:基于签名的认证机制 文件结构 ~/.ssh/id_ed25519 # 私钥 ~/.ssh/id_ed25519.pub # 公钥 ~/.ssh/authorized_keys # 服务器保存公钥 免密登录本质 服务器信任“某个公钥”,允许对应私钥登录 ...

2026年4月8日 · 2 分钟

PostgreSQL同步HDFS

1.使用datax同步数据 2.模板json(已配置hdfs ha): { "job": { "content": [ { "reader": { "name": "postgresqlreader", "parameter": { "username": "hs_sync", "password": "Pass2025", "column": [ "order_date", "day", "iso_day_of_week", "weekday_cn", "weekday_en", "weekday_short", "is_weekend", "iso_week", "month", "month_cn", "month_en_full", "month_en_short", "quarter", "year" ], "connection": [ { "table": [ "dim_calendar" ], "jdbcUrl": [ "jdbc:postgresql://100.64.0.10:25432/hs_sync_data" ] } ], "fetchSize": 1000 } }, "writer": { "name": "hdfswriter", "parameter": { "defaultFS": "hdfs://nameservice1", "hadoopConfig": { "dfs.nameservices": "nameservice1", "dfs.ha.namenodes.nameservice1": "nn1,nn2", "dfs.namenode.rpc-address.nameservice1.nn1": "192.168.33.61:8020", "dfs.namenode.rpc-address.nameservice1.nn2": "192.168.33.62:8020", "dfs.client.failover.proxy.provider.nameservice1": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider" }, "fileType": "orc", "path": "/tmp/data/test/", "fileName": "dim_calendar", "writeMode": "truncate", "column": [ { "name": "order_date", "type": "date" }, { "name": "day", "type": "smallint" }, { "name": "iso_day_of_week", "type": "smallint" }, { "name": "weekday_cn", "type": "string" }, { "name": "weekday_en", "type": "string" }, { "name": "weekday_short", "type": "string" }, { "name": "is_weekend", "type": "boolean" }, { "name": "iso_week", "type": "smallint" }, { "name": "month", "type": "smallint" }, { "name": "month_cn", "type": "string" }, { "name": "month_en_full", "type": "string" }, { "name": "month_en_short", "type": "string" }, { "name": "quarter", "type": "string" }, { "name": "year", "type": "smallint" } ], "fieldDelimiter": "\t", "maxFileSize": 134217728, "encoding": "UTF-8" } } } ], "setting": { "speed": { "channel": 5 }, "errorLimit": { "record": 0, "percentage": 0.02 }, "retry": { "limit": 3, "interval": 5000 } } } }

2026年2月12日 · 1 分钟

CDH6.3.2集群部署

使用ansible做自动化部署 CDH 集群安装指南 环境准备 项目 值 NFS 服务器 xxx.xxx.xxx.xxx:/nfs/share Inventory inventory/cdh-init.ini 安装步骤 步骤 1:配置 /etc/hosts 和挂载 NFS ansible-playbook cdh-hosts-nfs.yml -i inventory/cdh-init.ini 步骤 2:系统初始化 ansible-playbook cdh-init-raw.yaml -i inventory/cdh-init.ini 验证 # 验证 NFS 挂载 ansible cdh_all -i inventory/cdh-init.ini -m shell -a "ls /mnt" -b # 验证 Java ansible cdh_all -i inventory/cdh-init.ini -m shell -a "java -version" # 验证 SELinux ansible cdh_all -i inventory/cdh-init.ini -m shell -a "sestatus" # 验证 haveged ansible cdh_all -i inventory/cdh-init.ini -m shell -a "systemctl status haveged" 安装介质目录 /mnt/ ├── cdh/ # CDH Parcel ├── ClouderaManager/ # CM 6.3.1 └── mysql/ # MySQL 5.7 RPM

2026年1月30日 · 1 分钟

Git配置SSH密钥

本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net 初次安装 gitgit 需要配置用户名和邮箱,否则 git 会提示:please tell me who you are. 你需要运行命令来配置你的用户名和邮箱: $ git config –global user.name “liuhanxia” $ git config –global user.email “liuhanxia@51faguanggao.com” 注意:(引号内请输入你自己设置的名字,和你自己的邮箱)此用户名和邮箱是 git 提交代码时用来显示你身份和联系方式的,并不是 github 用户名和邮箱 git 使用 ssh 密钥 git 支持 https 和 git 两种传输协议,github 分享链接时会有两种协议可选:git 协议链接图例、https 协议链接图例 git 使用 https 协议,每次 pull, push 都会提示要输入密码, 使用 git 协议,然后使用 ssh 密钥,这样免去每次都输密码的麻烦 初次使用 git 的用户要使用 git 协议大概需要三个步骤: 一、生成密钥对 二、设置远程仓库(本文以 github 为例)上的公钥 三、把 git 的 remote url 修改为 git 协议(以上两个步骤初次设置过以后,以后使用都不需要再次设置,此步骤视以后项目的 remote url 而定,如果以后其他项目的协议为 https 则需要此步骤) ...

2024年2月17日 · 2 分钟

Git服务器搭建

上一章节中我们远程仓库使用了 Github,Github 公开的项目是免费的,2019 年开始 Github 私有存储库也可以无限制使用。 这当然我们也可以自己搭建一台 Git 服务器作为私有仓库使用。 接下来我们将以 Centos 为例搭建 Git 服务器。 1、安装Git $ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel $ yum install git 接下来我们 创建一个git用户组和用户,用来运行git服务: $ groupadd git $ useradd git -g git 2、创建证书登录 收集所有需要登录的用户的公钥,公钥位于id_rsa.pub文件中,把我们的公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。 如果没有该文件创建它: $ cd /home/git/ $ mkdir .ssh $ chmod 755 .ssh $ touch .ssh/authorized_keys $ chmod 644 .ssh/authorized_keys 3、初始化Git仓库 首先我们选定一个目录作为Git仓库,假定是/home/gitrepo/runoob.git,在/home/gitrepo目录下输入命令: $ cd /home $ mkdir gitrepo $ chown git:git gitrepo/ $ cd gitrepo $ git init --bare runoob.git Initialized empty Git repository in /home/gitrepo/runoob.git/ 以上命令Git创建一个空仓库,服务器上的Git仓库通常都以.git结尾。然后,把仓库所属用户改为git: ...

2024年1月20日 · 1 分钟

定制Admin管理后台

在管理后台与model模型文章里,我们曾经有一个操作,就是在admin.py里注册blog应用,这样blog应用才会在后台显示出来,我们才能在后台对这个应用进行管理。这就是Django自带的后台管理的特色之一,它可以让我们快速便捷管理数据,后台管理可以在各个app的admin.py文件中进行控制。 想要对APP应用进行管理,最基本的前提是要先在settings里对其进行注册,就是在INSTALLED_APPS里把APP名添加进去,更多的可以查看文章:全局配置settings详解 下面我们以一个blog应用来举例,向大家介绍一些常用的自定制admin的方法。如下为blog的models的Article表的内容: class Article(models.Model): title = models.CharField('标题', max_length=70) keywords = models.CharField('文章关键词', max_length=120, blank=True, null=True) excerpt = models.TextField('摘要', max_length=200, blank=True) category = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name='分类', blank=True, null=True) body = models.TextField('内容') user = models.ForeignKey(Userinfo, on_delete=models.CASCADE, verbose_name='作者') views = models.PositiveIntegerField('阅读量', default=0) top = models.IntegerField(choices=[(0, '否'), (1, '是'), ], default=0, verbose_name='是否推荐') created_time = models.DateTimeField('发布时间', auto_now_add=True) modified_time = models.DateTimeField('修改时间', auto_now=True) class Meta: verbose_name = '文章'verbose_name_plural = '文章'def __str__(self): return self.title 一、管理后台注册需要管理的应用 只有注册了,我们才能在管理后台看到这个APP应用,才能对其进行管理,这个注册有两种方式: 1、装饰器注册 from django.contrib import admin from .models import Article @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): list_display=('id', 'category', 'title', 'user','views','created_time') 2、注册参数 ...

2023年9月3日 · 2 分钟

Spark Thrift Server

文章目录 一、Spark Thrift Server 介绍 二、部署 Spark Thrift Server 三、Spark Thrift Server 的架构 四、Spark Thrift Server 如何执行 SQL 五、和 HiveServer2 的区别 Spark Thrift Server 的优点 Spark Thrift Server 的缺点 六、结论 一、Spark Thrift Server 介绍 Spark Thrift Server 是 Spark 社区基于 HiveServer2 实现的一个 Thrift 服务。旨在无缝兼容 HiveServer2。 因为 Spark Thrift Server 的接口和协议都和 HiveServer2 完全一致,因此我们部署好 Spark Thrift Server 后,可以直接使用 hive 的 beeline 访问 Spark Thrift Server 执行相关语句。 Spark Thrift Server 的目的也只是取代 HiveServer2,因此它依旧可以和 Hive Metastore 进行交互,获取到 hive 的元数据。 ...

2023年4月16日 · 2 分钟

Kerberos入门

1. Kerberos是什么 Kerberos在古希腊神话中是指:一只有三个头的狗。这条狗守护在地狱之门外,防止活人闯入。 Kerberos是一个用于鉴定身份的协议,它采用对称密钥加密。 在我们的CDH平台中,常用来作为一种安全验证,只有经过kerberos认证后的用户才可以访问大数据集群的服务。 2.Kerberos中的一些概念 KDC(key distribution center): kerberos的认证中心,用来鉴别用户的身份的。想访问带kerberos的服务,得先过这个。 Principal: kerberos中账户的概念,用户会以这个账户来被KDC认证。 一个Principal由三个部分组成:primary, instance以及realm,其组成形式为primary/instance@realm。 primary : 可以是OS中的username,也可以是service name; instance : 用于区分属于同一个user或者service的多个principals,该项为optional; realm : 类似于DNS中的domain,定义了一组principals 举个栗子:hive/hive@ZHENDAO.COM kafka/kafka@ZHENDAO.COM KeyTab: 以文件的形式呈现,存储了一个或多个Principal的长期的key,用途和密码类似,用于kerberos认证登录; 其存在的意义在于让用户不需要明文的存储密码,和程序交互时不需要人为交互来输入密码。 TGT: 用户使用principal在KDC中进行认证后,KDC会返回给客户一个TGT,TGT会有过期时间。 Ticket:用户访问具体Server时,KDC会进行一次加密操作,返回给用户一张对应server的门票。 3.Kerberos基本使用 kerberos管理员创建一个principal, 并生成对应的keytab文件 → 注册一个kerberos的账号,并配置了免密登录 拿着keytab去KDC中进行账户的认证 → kinit -kt /var/lib/hive/hive.keytab hive/hive@ZHENDAO.COM KDC返回一个这个principal对应的TGT文件 → 默认存放在linux的 /tmp 目录下 客户拿着TGT去过带有kerberos的服务端APP 4.Kerberos认证原理 客户拿着principal去KDC中进行认证的时候,kerberos会检查其库中是否有对应的principal,如果有的话,返回一个TGT。 客户拿着TGT向带有kerberos的服务端app发起请求时,请求会先发到KDC。 KDC会拿着客户的master key(客户密码的hash)和服务端的master key(比如说hive server的master key)进行加密操作,并返回给客户一个对应hive server的ticket。 客户拿着加密后的ticket,去请求hive服务的时候,hive会对ticket进行一个验证。验证通过即可访问hive 5.举个栗子:KAFKA认证过程 kafka producer拿着principal向KDC认证身份,通过则拿到KDC返回的TGT <这是第一次认证,就好比在游乐园的门口,做一次验票操作> producer拿着TGT向KDC请求kafka的服务,KDC验证TGT,看该账号能不能使用kafka,如果可以使用,那么进行加密,并返回一个ticket给producer <这是第二次认证,就好比你想玩游乐园中的具体项目,得看看你买的门票有没有这个资格玩VIP项目> producer拿着ticket和kafka server尝试建立连接,kafka server会使用server的master key对ticket进行一次解密操作,来验证producer的身份,通过则建立连接 <玩上具体的项目了>

2023年2月5日 · 1 分钟

Hive注册udf

1.创建临时函数 hive> add jar /home/hadoop/bigdata_udf.jar; hive> create temporary function isContains100 as 'com.xx.hive.udf.hm2.IsContains100'; --验证 hive> select isContains100(t.col1) from t limit 10; hive> drop temporary function isContains100; 2.创建永久函数 hadoop fs -put /opt/bigdata_udf.jar /udf hive> create function default.url_decode as 'com.xx.udf.DecodeURL' using jar 'hdfs:///udf/bigdata_udf.jar'; --验证 hive> select default.url_decode(t.col1) from t limit 10; 注意:注册永久函数必须使用hdfs路径,不可使用本地路径

2022年11月13日 · 1 分钟

Hive映射HBase数据源

CREATE EXTERNAL TABLE `mongodb_dingtalk.hbasetohive_patent`( key String, abstracts String, address String) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:abstracts,info:address") TBLPROPERTIES("[hbase.table.name](http://hbase.table.name/)" = "dingtalk:patent"); 仅从HBase拉取数据使用,禁止利用此种方式往HBase写数据 数据拉出时拉出hbase中数据对应当前版本的时间戳 create external table ods.ods_zxk_hbase_wechat_public_account_mapping( id string comment '需要拆分的key', ts timestamp comment '数据标识符,用来跟新数据做去重') comment '高级搜索有无微信公众号' STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ('hbase.columns.mapping' = ':key,:timestamp') TBLPROPERTIES('[hbase.table.name](http://hbase.table.name/)' = 'dingtalk:wechat_public_account')

2022年10月30日 · 1 分钟