gitweixin
  • 首页
  • 小程序代码
    • 资讯读书
    • 工具类
    • O2O
    • 地图定位
    • 社交
    • 行业软件
    • 电商类
    • 互联网类
    • 企业类
    • UI控件
  • 大数据开发
    • Hadoop
    • Spark
    • Hbase
    • Elasticsearch
    • Kafka
    • Flink
    • 数据仓库
    • 数据挖掘
    • flume
    • Kafka
    • Hive
    • shardingsphere
    • solr
  • 开发博客
    • Android
    • php
    • python
    • 运维
    • 技术架构
    • 数据库
  • 程序员网赚
  • bug清单
  • 量化投资
  • 在线查询工具
    • 去行号
    • 在线时间戳转换工具
    • 免费图片批量修改尺寸在线工具
    • SVG转JPG在线工具
    • SVG转PDF/Word
    • SVG转Draw.io可二次编辑格式
    • js代码混淆
    • json格式化及任意折叠展开
    • PDF常用工具

分类归档大数据开发

精品微信小程序开发门户,代码全部亲测可用

  • 首页   /  
  • 分类归档: "大数据开发"
  • ( 页面22 )
运维 3月 28,2023

减少云费用的 12 个编程技巧

没有什么比观看应用程序病毒式传播更能让开发团队精神振奋的了。这是一种美妙的感觉——至少,在每月的云账单到来之前是这样。一些开发人员认为,管理计算成本是 devops 团队的责任。编码人员编写软件,将其扔到墙上,然后让其他人担心为此付费。没有东西会离事实很远。
聪明的开发人员知道他们的编码决策对公司的底线有很大的影响。庞大的代码速度较慢,需要更多的云资源才能运行。选择更好的算法和编写更紧凑的代码不仅仅关乎速度。编写良好的代码运行成本更低。
开发人员并不总能看到这种联系。在您自己的机器上编写代码很容易,RAM 和额外的磁盘空间是在购买机器时支付的。如果您有 2 TB 的磁盘空间,您可能不会注意到您的代码占用了多少空间。如果一个新的算法需要两倍的时间来运行,你的桌面可能甚至不会闪烁——而且,谁会注意到多了几毫秒?但几乎可以肯定的是,将计算量增加一倍将导致更大的云计算费用。
现代云计算擅长将资源利用率转化为订单项费用。优秀的云开发人员明白,他们有能力在编写代码时做出更明智的决策。它可以像运行分析器来识别慢点一样简单,或者避免不必要的数据存储以减少内存占用。
这里有 12 种方法可以简化您的代码,使其运行起来更精简、更快、成本更低。
大多数开发人员不会花太多时间优化他们的代码。如果它在他们的笔记本电脑上瞬间运行,他们不会注意到随着时间的推移它的运行速度是否慢了 20%、30% 甚至 300%。该程序仍在瞬间响应。但是当它们在服务器上出现数百万次时,这些差异就会加起来。仔细的分析可以标记缓慢的部分。重写它们可以减少应用程序需要的实例数。
使用的 RAM 量是为云实例定价的一个重要参数。在许多情况下,将 RAM 增加一倍也会使成本增加一倍。程序员可以通过避免将数据保存在内存中来减少他们的 RAM 占用空间。一些流算法,如 Java 的 Stream 类,设计用于处理大型数据文件,而无需将它们全部加载到内存中。 Apache DataSketches 项目在不占用所有内存的情况下,为复杂的大数据统计生成近似答案。
作为一个附带的好处,谨慎的 RAM 消耗也可以加速你的算法。有时,操作系统会开始使用虚拟内存将数据卸载到磁盘上。这可以防止崩溃,但会显着降低程序速度。
使用较低分辨率的图像和视频可以通过多种方式获得回报。首先,存储它们会更便宜。其次,任何数据泄露费用都会降低。第三,该应用程序对用户来说似乎更快捷。
所有的静态图像应该从一开始就最小化。唉,最小化的数量并不简单,因为在某些时候视觉质量下降到足以让用户察觉。找到正确的权衡是一些程序员不准备做出的设计决定。
某些使用上传图像的应用程序还可以在接收到图像后创建更小的缩略图和分辨率降低的版本。为此开发了像 ImageMagik 这样的工具包和像 WebP 这样的格式。
许多开发人员都是数字包装老鼠,他们存储信息以备不时之需。他们用无穷无尽的列填写表格,然后从不删除行。如果您拥有硬件并且磁盘驱动器有足够的空间,那么额外的数据不会花费任何费用。但是云对一切都收费。您将来真的需要所有这些价值吗?用户还想要那么多细节吗?转储一些旧数据将为您节省数据存储和泄露方面的资金。
在云实例上使用本地磁盘不仅危险,而且成本高昂。本地磁盘空间通常设计得足够快以保持操作系统高效运行。许多开发人员在具有 1 TB 或更多 TB 存储空间的个人计算机上创建他们的代码。云机器存储很少如此便宜或容易获得。云通常根据大小直接为存储计费,因此最好的方法是尽可能少地使用存储。不仅要考虑最小化应用程序创建的临时文件的方法,还要考虑最小化所需的系统库和软件包的方法。
日志文件非常适合在开发过程中识别问题和调试软件。但是一旦代码投入生产,您就不需要保留所有这些代码。所有额外的信息都会阻塞本地磁盘或对象存储。在设计日志系统时,将其配置为经常删除日志。许多日志包如 Log4j 可以设置为保留最少数量的日志并滚动删除它们。
无服务器架构计划仅在您的代码运行时计费,这可以在负载间歇性时为您节省大量资金。即使是拥有源源不断的用户流的应用程序,其停滞时间也比您预期的要长。
许多无服务器定价计划奖励仔细的编码和非常快的性能以及最小的 RAM 消耗。计费公式以毫秒为单位计算响应时间,并且只对处理器被占用的时间收费。作为开发人员,您会立即获得反馈,因为您可以直接跟踪响应时间并查看您的代码更改如何影响它。
无服务器方法非常适合较小或更多实验项目,而且费用通常低至每月几美分。如果您的应用程序只是偶尔运行某些功能,那么使用无服务器可能是有意义的。
随着数据变老,访问频率降低。您可以通过将应用程序设置为将旧数据迁移到更便宜的位置来预见这一点。一些云对所谓的“冷存储”收费要低得多,这可能需要几分钟甚至几小时才能交付数据。其他云,如 Wasabi 或 Backblaze,专门为 Amazon S3 对象提供归档存储,收费远低于主要云。在某些情况下,他们甚至不对数据泄露收费。一旦不再需要大量数据就卸载数据可能非常具有成本效益。
如果你看过一些框架生成的 HTML 标签,你就会知道布局会变得多么可笑。它只是一直向下嵌套到 DIV 标签中的 DIV 标签——这需要花钱来生成和交付。我认识的一位网页设计师吹嘘说,通过更明智地使用 CSS 创建更简单的布局,他们的带宽费用就减少了 30%。
像 React 这样的一些框架需要相当多的计算能力,尤其是当它们使用服务器端渲染等功能时。所有这些代码推高了每月的云账单。相反的理念是创建一个静态站点,该站点由缓存逐字提供的不变的 HTML、CSS 和 JavaScript 块构建。通过将缓存移至更靠近用户的位置,使用内容分发网络可以进一步加快分发速度。
各种框架都接受这种静态哲学。 Jekyll、Hugo、Gridsome 和 Pelican 只是将您的所有内容打包到一组紧凑、不变的文件中的几个工具。您仍然可以使用 AJAX 调用在页面中构建个性化设置,但网站的大部分内容在服务器上产生的负载很小。
随着浏览器变得越来越强大,一些框架使得将更多计算直接转移到客户端变得更加简单。好的 JavaScript 或 WebAssembly 代码可以将更多的负载推到用户的机器上,并从您的云服务器上卸下。一些开发人员正在将他们的云层减少到只不过是一个带有一些用于身份验证的业务逻辑的数据库。一位朋友使用静态 HTML 和服务器端版本的 PostgreSQL 运行一切,其中嵌入了输出 JSON 的过程。
浏览器还有更精细的选项用于在本地存储信息,例如 HTML Web 存储标准和 W3C 索引数据库 API。不再只是短字符串和 cookie。由于这些数据不通过互联网传输,因此可以更快地获得这些数据,并且让用户放心,因为他们知道自己的数据没有存储在一个集中的、可破解的数据库中。当数据可以免费存在于用户的机器上时,为什么还要为数据存储和泄露付费?
一些开发人员专门处理数据库。有些人喜欢用精心设计的前端创造美好的第一印象。现在云成本如此灵活,一些团队正式任命“成本工程师”来管理代码成本和效率。成本工程师的首要关注点是让应用程序代码运行得更干净、更快、更轻便,从而更便宜。将此任务作为某人工作的一部分传达了一个信息,即管理代码成本作为开发团队角色和责任的一部分的重要性。

作者 east
python, 运维 3月 25,2023

Centos安装Anaconda的理由和教程

选择理由

选择Anaconda3安装Python环境的主要理由如下:

  1. 方便安装第三方库 Anaconda3中已经预先安装了许多常用的第三方库,如NumPy、Pandas、Matplotlib等。这些库是数据科学和机器学习等领域中必不可少的工具,使用Anaconda3可以避免手动安装这些库所带来的麻烦。
  2. 管理Python虚拟环境 Anaconda3提供了一个名为conda的包管理工具,可以方便地创建、管理和切换Python虚拟环境。这对于同时开发多个项目或在同一项目中使用不同版本的Python非常有用。
  3. 跨平台支持 Anaconda3可以在Linux、Windows和MacOS等多个平台上运行,这使得开发者可以在不同的平台上使用相同的Python环境进行开发和测试。
  4. 简化Python安装过程 Anaconda3提供了一个一键安装的方式,用户无需手动配置Python环境,也无需担心依赖库的问题。这使得Python的安装变得非常简单和快速。 综上所述,选择Anaconda3作为Python环境的主要原因是其提供了方便的第三方库安装、Python虚拟环境管理、跨平台支持和简化的安装过程。

安装教程

1、下载Anaconda3 在Anaconda官网中下载适合CentOS版本的Anaconda3,下载完成后将文件上传到CentOS服务器上。国内的可以选择清华大学的镜像,https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/。例如在centos终端输入下载地址

 wget  --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2022.10-Linux-x86_64.sh

2、安装Anaconda3 打开终端,进入Anaconda3所在目录,运行以下命令进行安装:

chmod +x Anaconda3-xxx-Linux-x86_64.sh
./Anaconda3-xxx-Linux-x86_64.sh

其中,xxx为版本号,需要根据实际情况进行替换。安装过程中需要按照提示进行操作,如选择安装路径等。

3. 配置环境变量 在终端输入以下命令,打开~/.bashrc文件:

vi ~/.bashrc

在文件末尾添加以下内容:

export PATH="/root/anaconda3/bin:$PATH"

其中,/root/anaconda3为Anaconda3的安装路径,需要根据实际情况进行替换。 保存并退出~/.bashrc文件,然后运行以下命令使环境变量生效:

source ~/.bashrc
  1. 验证安装 在终端输入以下命令,查看Anaconda3的版本信息:
conda -V

如果显示Anaconda3的版本号,则表示安装成功。

使用教程

在CentOS上使用Anaconda3运行代码的步骤如下:

  1. 打开终端,输入以下命令激活Anaconda3环境:
source /root/anaconda3/bin/activate

其中,/root/anaconda3为Anaconda3的安装路径,需要根据实际情况进行替换。 2. 进入到您的代码所在的目录。 3. 运行您的Python代码,例如:

python example.py

其中,example.py为您的Python代码文件名。 4. 运行完成后,可以输入以下命令退出Anaconda3环境:

conda deactivate

另外,如果您使用Jupyter Notebook来运行Python代码的话,可以在终端中输入以下命令启动Jupyter Notebook:

jupyter notebook

然后在浏览器中打开http://localhost:8888/,就可以使用Jupyter Notebook来编辑和运行Python代码了。

作者 east
Hive 1月 24,2023

数仓开发常用hive命令

在做数仓开发或指标开发时,是一个系统工程,要处理的问题非常多,经常使用到下面这些hive命令:

内部表转外部表

alter table ${tablename} set tblproperties (‘EXTERNAL’=True’);

外部表转内部表

alter table ${tablename} set tblproperties (‘EXTERNAL’=False’);

显示分区

show partitions ${tablename};

创建分区

alter table ${tablename} add if not exists partition(dt=’2022-11-08′)

删除分区

alter table ${tablename} drop partition(dt=’2022-11-21′)

修改分区

alter table ${tablename} partition(dt=’2022-11-08′) rename to partition(dt=’2022-11-21′)

获取table详细描述信息、存储格式等

desc formatted ${tablename}

修改hive表路径

alter table ${tablename} set location ‘${warehouse.dir}’

hive加载本地数据到分区表

load data local inpath ‘/tmp/test.txt’ into table ${tablename} partition (dt=’2022-11-08′);

加载本地目录的数据到分区表

load data inpath ‘/tmp’  into table ${tablename}  partition (dt=’2022-11-08′);

排他锁解锁

set hive.support.concurrency=true;  

set hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager;

设置session具有Admin权限

set role admin;

授予所有权限给某个用户

grant all on ${dbName} to user {userName};

查看指定用户在所有库下面的权限

show grant user {userName};

查看指定用户在某个库的权限

show grant user {userName} on database {dbName};

 授予某个库的权限给某个用户

grant select on database {dbName} to user {userName};

grant insert on database {dbName} to user {userName};

grant update on database {dbName} to user {userName};

grant delete on database {dbName} to user {userName};

Hive赋予用户某表权限

grant create on database {dbName} to user {userName};

grant select on table 库名.表名 to user 用户名 ;

grant insert on table {dbName}.tableName to user {userName};

grant update on table {dbName}.tableName to user {userName};

grant delete on table {dbName}.tableName to user {userName};

作者 east
Spark 1月 23,2023

数仓的生命周期管理策略和ETL命令

 在做数仓开发过程中,遇到一个问题就是随着数据量增大,存储空间增加惊人:hdfs的文件要存3份(可以修改副本份数),ods、dwd、dws、ads等各层都需要存储空间,指标计算过程如果内存不够又会缓冲在硬盘。而更严重的问题是:如果CDH依赖某个目录的存储空间严重不够,就会导致Yarn的任务执行失败。

   所以对数仓的生命周期管理尤为重要。数仓的生命周期管理的核心目的就是用最少的存储成本来满足最大的业务需求,使数据价值最大化。

对数仓的历史数据可以分为P0、P1、P2、P3这4个不同优先级,其具体定义如下。

• P0:非常重要的主题域数据和非常重要的应用数据,具有不可恢复性,如交易、基础信息表、集团KPI数据、IPO关联表。

• P1 :重要的业务数据和重要的应用数据,具有不可恢复性,如重要的业务产品数据。

• P2:重要的业务数据和重要的应用数据,具有可恢复性,如交易线ETL产生的中间过程数据。

• P3:不重要的业务数据和不重要的应用数据,具有可恢复性,如某些商品的报表。

对数据P0、P1、P2、P3这4个级别的数据,生命周期要根据具体情况。例如在有的公司,关系型数据库保存有数仓原始全部数据,又对服务器的成本敏感性,对恢复数据

层级类型P0P1P3P4
ODS层各类型数据永久永久永久永久
DWD事实表(增量表)永久3年365天180天
维表(全量表)保留近30天及每月月底数据保留近30天及每月月底数据保留近30天及每月月底数据保留近30天及每月月底数据
Merge全量表保留近30天及每月月底数据保留近30天及每月月底数据保留近30天及每月月底数据保留近30天及每月月底数据
DWS层各类型数据永久3年3年3年
DWM层各类型数据保留近30天及每月月底数据保留近30天及每月月底数据保留近30天及每月月底数据保留近30天及每月月底数据
APP层各类型数据永久–––

由于数仓通常是带有时间的分区表。要进行数仓表数据进行生命周期管理,首先是清楚目前数仓各张表占的存储空间的情况。

查看存储空间的命令:

hadoop fs -du -s -h ${warehouse.dir}/*

如果hive外部表

使用drop table来删除表或用drop partition等命令删除表的分区,其实数据还是存在。要彻底删除数据,有2种方法:

(1)通过删除文件方式

删除文件命令:

hdfs dfs -rmdir -f ${warehouse.dir}

删除目录命令:

hdfs dfs -rm -r -f ${warehouse.dir}/*

  • 变为内部表再删除

alter table  ${table_name) set tblproperties (‘EXTERNAL’=’False’);

如果是hive内部表

删除分区

alter table ${tablename} drop partition(dt<=’2023-01-21′)

在CDH的默认配置中,删除的文件是放在垃圾站,通常是需要24小时后删除的文件才释放空间。如果需要立即释放空间,可以用下面清空hdfs垃圾站的命令:

hdfs dfs -expunge

作者 east
Hive, Spark 1月 19,2023

Spark SQL或Hive开发调试小技巧

  • 在本地开发机装本地模拟环境,或者能远程调试,可以参考Spark如何在生产环境调试
  • 输出dataframe日志,最好有一个开关来控制,正式上线时,把开关关了来提升速度
if (isDebug) {
dataframeDF.show(10)
}
  • dataframe的输出,有时看得不是很清楚,可以生成临时表来记录中间过程,方便对中间过程进行查看 insertHive(resultDF, “dataframe_temp”)
  • 如果是运行的数据比较大,调试起来要等,可以对dataframe进行限定条数或筛选 dataframe.limit(1000) dataframe.filter(” id = ‘ewgwgs’ “)
  • 对复杂的sql,一步到位写起来爽,出问题了不知是哪一步出问题,可以分解出几个简单sql,每一步都有输出,对照结果方便找出问题。
  • 对复杂计算的,写的代码觉得似是而非,可以先整理一个样例,手动写计算过程,然后用代码对照这些过程来一步步实现。

作者 east
大数据开发 1月 18,2023

解决yarn无法查看历史日志Logs not available for container_xxx. Aggregation may not be complete

由于 NodeManager 有异常,一时找不到原因,就重新删除再添加。没想到新的问题产生了。在yarn看不到历史日志,页面提示“Aggregation may not be complete, Check back later or try the nodemanager at xxxx”。

这对开发或运维spark、hive程序来说,是非常抓狂的。看不到日志,就不知道问题出在哪里。

网上绝大多数的解决方案是看
yarn.log-aggregation-enable 是否开启

yarn.log-aggregation-enable属性意思是: 是否启用日志聚合
我直接通过Yarn的WebUi查看,发现
默认就是勾选的,为true

在CDH,找到yarn的配置,搜索
yarn.log-aggregation-enable ,如下图所示就是开启的:

在这里插入图片描述

我查了集群,这个是开启了,重启了yarn后,又重新运行一个spark程序,跑完程序后再查看历史日志,问题依旧。

后来又查到另一个关键的相关配置:
yarn.nodemanager.remote-app-log-dir

yarn.nodemanager.remote-app-log-dir参数的意思是:应用程序结束时存储应用程序日志的 HDFS 目录。 

在CDH查看了
yarn.nodemanager.remote-app-log-dir 的路径如下

查看了一下,没看到/opt/logs,又查到相关日志报错如下:

ERROR org.apache.hadoop.yarn.logaggregation.AggregatedLogDeletionService: Error reading root log dir this deletion attempt is being aborted
java.io.FileNotFoundException: File /opt/logs does not exist.
	at org.apache.hadoop.hdfs.DistributedFileSystem.listStatusInternal(DistributedFileSystem.java:986)
	at org.apache.hadoop.hdfs.DistributedFileSystem.access$1000(DistributedFileSystem.java:122)
	at org.apache.hadoop.hdfs.DistributedFileSystem$24.doCall(DistributedFileSystem.java:1046)
	at org.apache.hadoop.hdfs.DistributedFileSystem$24.doCall(DistributedFileSystem.java:1043)
	at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
	at org.apache.hadoop.hdfs.DistributedFileSystem.listStatus(DistributedFileSystem.java:1053)
	at org.apache.hadoop.yarn.logaggregation.AggregatedLogDeletionService$LogDeletionTask.run(AggregatedLogDeletionService.java:82)
	at java.util.TimerThread.mainLoop(Timer.java:555)
	at java.util.TimerThread.run(Timer.java:505)

原因就很清楚,没有那个目录,应该创建那个目录,并赋予相应的权限。

通过CDH进入YARN服务界面,然后选择【创建NodeManager远程应用程序日志目录】。

进行上面的操作后终于问题解决了。

作者 east
Spark 1月 14,2023

spark sql如何提升性能

在使用 Spark SQL 时,有几种常见的方法可以提升性能:

  • 使用适当的数据结构:Spark SQL 支持多种数据结构,例如 Parquet、Avro、ORC 等。使用适当的数据结构可以提高查询速度和减少存储空间。
  • 分区:将数据按照一定规则分区,可以提升性能。
  • 缓存数据:使用 Spark SQL 的缓存功能可以将数据集的副本存储在内存中,从而提升性能。
  • 使用常量:对于经常使用的常量值,使用常量代替查询中的变量可以提升性能。
  • 使用索引:对大型数据集使用索引可以提升性能。
  • 优化查询计划:使用 EXPLAIN 命令可以查看查询计划,并使用优化器选项对查询进行优化。
  • 并行计算:调整 Spark 的并行度,可以提升性能。
  • 适当使用 UDF:使用 UDF 可以扩展 Spark SQL 的功能,但是过多使用 UDF 会导致性能下降。
作者 east
运维 1月 9,2023

sqlserver 自定义函数或存储过程转 postgresql

nvarchar要修改为varchar

postgresql的body需要$$ …. $$包含起来

postgresql 只需要一对BEGIN END,条件和while循环不需要BEGIN和END

变量需要去掉@, @b -> b;

没有isnull 用 coalesce

字符串拼接用 ||

字符串类型和int类型不会自动转换(用作条件时)

没有charindex,用strpos (原字符串,需要查找的)

没有getdate() 用 LOCALTIMESTAMP(0) 代替 参数指秒以下取几位

SET @len=@len+1要修改为 len = len + 1

break修改为exit

CHAR(10) 类型要改为CHR(10)

postgresql的条件和循环 不需要BEGIN和END 嵌套, 条件和循环的语法也和sqlserver有所不同:

 
1、条件
IF ... THEN ... END IF
IF ... THEN ... ELSE ... END IF
IF ... THEN ... ELSIF ... THEN ... ELSE ... END IF

CASE ... WHEN ... THEN ... ELSE ... END CASE
CASE WHEN ... THEN ... ELSE ... END CASE
 
2、循环
LOOP
[<>]
LOOP
...
IF ... THEN
CONTINUE [label] [WHEN boolean-expression];
END IF;
EXIT [label] [WHEN boolean-expression];
END LOOP [label];


WHILE
[<>]
WHILE boolean-expression LOOP
...
END LOOP [label];


FOR
[<>]
FOR name IN [REVERSE] expression .. expression [BY expression] LOOP
...
END LOOP [label];
作者 east
运维 1月 7,2023

windows安装使用PostgreSQL

最近一个项目要用到pgsql的自定义函数,在windows上安装一个。

下载的是12的版本,
https://get.enterprisedb.com/postgresql/postgresql-12.13-1-windows-x64.exe

刚开始安装后出现问题,看到是杀毒软件影响到了。关闭杀毒软件,重新卸载安装。

为了使用方便,把pg库的bin目录添加到环境变量。

由于是开发,为了使用方便,

修改pg库data目录的pg_hba.conf,把md5修改为trust

host all all 127.0.0.1/32 trust

host all all ::1/128 trust

host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust

启动服务器:

在命令行启动

pg_ctl.exe reload -N “postgres_12” -D “D:\Program Files\PostgreSQL\12\data”

psql -h 127.0.0.1 -U postgres

作者 east
shardingsphere, 大数据开发 11月 6,2022

DataX、Sqoop抽取Sharding-Proxy数据遇到问题和解决方案

公司有几十T的数据库数据,采用sharding-proxy来分库分表存取。采用sharding-proxy,可以让客户端像普通单库一样调用,但用datax、sqoop抽取数据却发现那么简单。

原先是用 sharding-proxy 4.1.0 版本,springboot采用druid来读取数据或用navicat高版本来读没问题,所以一直没有升级。

不幸的是,用sqoop 1.4.7来抽取数据时,发生报错“Failed to switch schema, please terminate current transaction”。网上相关的资料很少,后来查到是 sharding-proxy 报的错,在github讨论区有说这个问题,
https://github.com/apache/shardingsphere/issues/5531

刚开始以为是sqoop读取表结构时遇到的问题,改用dataX来抽取数据,还是同样的问题。后来升级 sharding-proxy 到最新版本,终于没报这个问题,但用sqoop抽取时,由于sqoop 1.4.7要先读取mysql的表结构,但是获取
sharding-proxy 的表结构发生错误,这个可以通过修改sqoop代码或别的方式来避开这个问题。

但DataX抽取数据时没这个问题,能很顺利抽取到
sharding-proxy 上面的数据。

作者 east
Hive 11月 3,2022

解决CDH 6.3.2 Hue访问Hive自定义用户密码验证

在前面文章介绍了
CDH 6.3.2 Hive自定义用户名密码验证 ,如果hue配置不做更改的话,在hue中看不到hive的数据库和执行不了命令,hue会报“thrift TSocket read 0 bytes” 、“
 Bad status: 3 (Error validating the login) (code THRIFTTRANSPORT) ”等错误。

解决方法:

(1)修改hue的python代码

cd /opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/hue/apps/beeswax/src/beeswax/server
vi hive_server2_lib.py
增加红框中的’CUSTOM’

(2)修改hue的配置
在hue的配置页面,搜索”hue_safety_valve” ,找到hue_safety_valve.ini
添加下面代码:(
auth_username 是在hive的hive-site.xml中配置的,不同的是hive-site的
auth_password 是工具处理后,hue这里的配置需要处理前的原始密码)

[desktop]

auth_username=hdfs
auth_password=未加密前的密码



然后重启hue

作者 east
Hive 11月 3,2022

CDH 6.3.2 Hive自定义用户名密码验证

为了增强hive的安全性,可以自定义用户名密码验证。

首先写成相应的工具类

import javax.security.sasl.AuthenticationException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hive.conf.HiveConf;
import org.slf4j.Logger;
public class CustomPasswdAuthenticator implements org.apache.hive.service.auth.PasswdAuthenticationProvider{
    private Logger LOG = org.slf4j.LoggerFactory.getLogger(CustomPasswdAuthenticator.class);
    private static final String HIVE_JDBC_PASSWD_AUTH_PREFIX="hive.jdbc_passwd.auth.%s";
    private Configuration conf=null;
    @Override
    public void Authenticate(String userName, String passwd)  
              throws AuthenticationException {  
            LOG.info("user: "+userName+" try login.");  
            String passwdConf = getConf().get(String.format(HIVE_JDBC_PASSWD_AUTH_PREFIX, userName));  
            if(passwdConf==null){  
              String message = "user's ACL configration is not found. user:"+userName;  
              LOG.info(message);  
              throw new AuthenticationException(message);  
            }   
            if(!passwd.equals(passwdConf)){  
              String message = "user name and password is mismatch. user:"+userName;  
              throw new AuthenticationException(message);  
            }  
          }  
          public Configuration getConf() {  
            if(conf==null){  
              this.conf=new Configuration(new HiveConf());  
            }  
            return conf;  
          }  
          public void setConf(Configuration conf) {  
            this.conf=conf;  
          }
}

把这个工具类打包成jar包放在hive根目录的lib目录下,
/opt/cloudera/parcels/CDH/lib/hive/lib/hiveAuth.jar


HDFS修改core-site.xml配置

搜索 core-site.xml

core-site.xml 的群集范围高级配置代码段(安全阀)

<property>   
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value> </property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>





Hive修改hive-site.xml配置

<property>
<name>hive.security.authorization.enabled</name>
<value>true</value>
</property>
<property>
<name>hive.security.authorization.createtable.owner.grants</name>
<value>ALL</value>
</property>
<property>
<name>hive.security.authorization.task.factory</name>
<value>org.apache.hadoop.hive.ql.parse.authorization.HiveAuthorizationTaskFactoryImpl</value>
</property>
<property>
<name>hive.users.in.admin.role</name>
<value>hdfs</value>
</property>
<property>
<name>hive.server2.authentication</name>
<value>CUSTOM</value>
</property>
<property>
<name>hive.server2.custom.authentication.class</name>
<value>org.apache.hadoop.hive.contrib.auth.CustomPasswdAuthenticator </value>
</property>

<property>
<name>hive.jdbc_passwd.auth.hdfs</name>
<value>2ad4fed18d94500baa7dcf70fd7b1ecf</value>
</property>

重启hadoop和hive

作者 east

上一 1 … 21 22 23 … 42 下一个

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。回复”chatgpt”获取免注册可用chatgpt。回复“大数据”获取多本大数据电子书

标签

AIGC AI创作 bert chatgpt github GPT-3 gpt3 GTP-3 hive mysql O2O tensorflow UI控件 不含后台 交流 共享经济 出行 图像 地图定位 外卖 多媒体 娱乐 小程序 布局 带后台完整项目 开源项目 搜索 支付 效率 教育 日历 机器学习 深度学习 物流 用户系统 电商 画图 画布(canvas) 社交 签到 联网 读书 资讯 阅读 预订

官方QQ群

小程序开发群:74052405

大数据开发群: 952493060

近期文章

  • 解决gitlab配置Webhooks,提示 Invalid url given的问题
  • 如何在Chrome中设置启动时自动打开多个默认网页
  • spark内存溢出怎样区分是软件还是代码原因
  • MQTT完全解析和实践
  • 解决运行Selenium报错:self.driver = webdriver.Chrome(service=service) TypeError: __init__() got an unexpected keyword argument ‘service’
  • python 3.6使用mysql-connector-python报错:SyntaxError: future feature annotations is not defined
  • 详解Python当中的pip常用命令
  • AUTOSAR如何在多个供应商交付的配置中避免ARXML不兼容?
  • C++thread pool(线程池)设计应关注哪些扩展性问题?
  • 各类MCAL(Microcontroller Abstraction Layer)如何与AUTOSAR工具链解耦?

文章归档

  • 2025年12月
  • 2025年10月
  • 2025年8月
  • 2025年7月
  • 2025年6月
  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年1月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年7月
  • 2018年6月

分类目录

  • Android (73)
  • bug清单 (79)
  • C++ (34)
  • Fuchsia (15)
  • php (4)
  • python (45)
  • sklearn (1)
  • 云计算 (20)
  • 人工智能 (61)
    • chatgpt (21)
      • 提示词 (6)
    • Keras (1)
    • Tensorflow (3)
    • 大模型 (1)
    • 智能体 (4)
    • 深度学习 (14)
  • 储能 (44)
  • 前端 (5)
  • 大数据开发 (497)
    • CDH (6)
    • datax (4)
    • doris (31)
    • Elasticsearch (15)
    • Flink (79)
    • flume (7)
    • Hadoop (19)
    • Hbase (23)
    • Hive (41)
    • Impala (2)
    • Java (71)
    • Kafka (10)
    • neo4j (5)
    • shardingsphere (6)
    • solr (5)
    • Spark (100)
    • spring (11)
    • 数据仓库 (9)
    • 数据挖掘 (7)
    • 海豚调度器 (10)
    • 运维 (39)
      • Docker (3)
  • 小游戏代码 (1)
  • 小程序代码 (139)
    • O2O (16)
    • UI控件 (5)
    • 互联网类 (23)
    • 企业类 (6)
    • 地图定位 (9)
    • 多媒体 (6)
    • 工具类 (25)
    • 电商类 (22)
    • 社交 (7)
    • 行业软件 (7)
    • 资讯读书 (11)
  • 嵌入式 (71)
    • autosar (63)
    • RTOS (1)
    • 总线 (1)
  • 开发博客 (16)
    • Harmony (9)
  • 技术架构 (6)
  • 数据库 (32)
    • mongodb (1)
    • mysql (13)
    • pgsql (2)
    • redis (1)
    • tdengine (4)
  • 未分类 (8)
  • 程序员网赚 (20)
    • 广告联盟 (3)
    • 私域流量 (5)
    • 自媒体 (5)
  • 量化投资 (4)
  • 面试 (14)

功能

  • 登录
  • 文章RSS
  • 评论RSS
  • WordPress.org

All Rights Reserved by Gitweixin.本站收集网友上传代码, 如有侵犯版权,请发邮件联系yiyuyos@gmail.com删除.