数据清洗分析导出遇到的一些问题

2023-10-30

本文简单记录一个学习过程,无技术含量,勿喷。

环境:

ambari:2.6.1

spark 2.1

python 3.6

oracle 11.2

sqoop 1.4

最近一直在测试数据采集、清洗、分析、导出、展示的一系列的工作,主要数据流程如下:

oracle 数据库-》hdfs-》hive-》oracle

总的设计:通过任务调度的方式执行各个阶段的任务,其中各个任务通过脚本的方式实现,扩展的时候只需要增加对应的脚本和调度任务就可以。

各个阶段的描述:

数据采集:主要是通过sqoop将oracle数据导入hdfs中。采集前,先列好采集清单和规则,以及采集后数据存放规则。

数据清洗:主要是通过pyspark将hdfs文件清洗拆分然后存放到HIVE数据库,通过将清洗后的数据移动到备份文件夹。

数据分析:通过pyspark读取数据清洗后的数据进行分析,将分析结果放到HIVE中。

数据导出:通过PYSPARK读取hive数据,然后通过python连接ORACLE数据进行插入。

数据展示:将分析后的数据通过web的方式提供展示。

数据导出按原设计是通过sqoop导出到oarcle,后面碰到一下问题就否决了。

1.数据只能全表导出,不支持增量和条件导出。

后想到的解决方案是:

1.数据分析的时候保存2份数据,一份是作为历史数据存储,一份是作为数据导出临时数据存储。导出的时候只导临时数据,导完删除。当然还有一些细节处理,比如如何解决多任务同时使用的问题。不做详细描写。

2.通过数据分析表记录分析数据的日期的日志,根据日志日期导出数据到oracle,导完后记录每个表导出的日期,下次导出时,只导出该表导出日志中最大日期之后的数据。

后来选择了第2种方案。原因个人喜好。

在第2中方案中,又出现一个选择,一个是通过spark sql直接保存数据到orcale,后发现一个问题,只能保存到oracle中不存在的表,比较怕麻烦,没有继续。

(本点后面发现,spark sql直接写oracle数据库的时候有个写入mode的设置,可以覆盖和追加:

durl = "jdbc:oracle:thin:@//127.0.0.1:1521/clearing"
tmptable.write.jdbc(durl, Tablename,mode="append", properties={"user": "username", "password": "password"})

原来尝试过

tmptable.write.mode("append").jdbc(durl, Tablename, properties={"user": "username", "password": "password"})
这样写数据库(oralce和mysql)mode不生效,但是写hdfs文件是生效的。

最终采用了通过spark sql读取hive数据,然后通过python将数据插入到oracle的方式,比较笨的方法,但是简单。


在这个过程中碰到的问题:

1.数据清洗出现空文件的时候,报RDD is empty的错误,导致任务失败。
  原因:导入的文件夹下面存在一个空的文件,然后通过RDD.isEmpty的方法判断不生效,后改为rdd.count==0的判断。
2.清洗过程出现连接lntnn2/10.250.11.53:41574失败的警告,而且任务执行变慢

  解决方案:查看namenode空间,发现只是2g空间,删除日志等文件,任务执行正常。

3.同时跑2个或以上任务的时候,容易出现以下警告:
javax.servlet.ServletException: Could not determine the proxy server for redirection
at org.apache.hadoop.yarn.server.webproxy.amfilter.AmIpFilter.findRedirectUrl(AmIpFilter.java:205)
at org.apache.hadoop.yarn.server.webproxy.amfilter.AmIpFilter.doFilter(AmIpFilter.java:145)
at org.spark_project.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1676)
at org.spark_project.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:581)
at org.spark_project.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180)
at org.spark_project.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511)
at org.spark_project.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112)
at org.spark_project.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.spark_project.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:461)
at org.spark_project.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:213)
at org.spark_project.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)

解决方法:

    暂时未有明确的解决方法,怀疑是机器性能不够,将每个mapradue的最大内存设为2g,效果不明。

4。通过python插入oracle数据库数据,
UnicodeEncodeError: 'ascii' codec can't encode characters in position 100-101: ordinal not in range(


解决方法:


根据数据库不同的编码设定,编写的python脚本中需要相对应的加入如下几句:

os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'  #或者os.environ['NLS_LANG'] = 'AMERICAN_AMERICA.AL32UTF8'  


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据清洗分析导出遇到的一些问题 的相关文章

随机推荐

  • 查看mysql版本的六种方法

    1 root localhost mysql V 2 root localhost mysql help grep Distrib 在mysql下有四种 3 登陆时会显示 4 mysql gt status 5 mysql gt selec
  • 中阳:ChatGPT横空出世,或迎来“安卓时刻”

    ChatGPT横空出世 写代码 写情书 写文章 做题 它啥都会 会被人工智能替代的行业 由人工智能实验室OpenAI发布的对话式大型语言模型ChatGPT在各大中外媒体平台掀起了一阵狂热之风 继 AI 绘画之后 由 OpenAI 上线的 C
  • Reference vs Pointer

    参考自Dan Saks的文章 An Introduction to References References and const The key insights I believe the key insight into why C
  • 用git和idea推送本地项目到远程仓库

    方式一 git命令方式 1 鼠标右键 Git Bash Here 2 初始化仓库 git init 3 配置签名 git config user name Zhang3 git config user email zhang3 163 co
  • WebFlux出现接口已返回成功,但查询时数据未改变的问题

    问题描述 在使用WebFlux时遇到一个很奇怪的问题 先调用禁用账号接口 接着在进行查询该数据 结果页面显示数据未改变 在点一次时页面数据才刷新 即连续点两次查询接口 才能看到修改后的数据 相关代码 前端 const disableAcco
  • 商城登录后端

    二 登录 1 用户名和密码 用户名和密码的格式验证可以不需要在后端进行 在前端服务器判断就可以 2 图片验证码与验证 import string redis from captcha image import ImageCaptcha cl
  • Email Error - You have exceeded the storage limit on your mailbox

    Description You may receive an error You have exceeded the storage limit on your mailbox Delete some items from your mai
  • 前端--三种插件用来解析mardowm,转化成为html语法

    前端 三种插件用来解析mardowm 转化成为html语法 使用方式十分简单 快捷 参考地址 1 markdown js 下载地址 https github com evilstreak markdown js div div
  • IBCS虚拟专线公网IP在公司内部搭建ERP系统按教程

    企业资源计划 ERP 系统是现代企业不可或缺的组成部分 可以将各个业务领域的信息整合到一个系统中 以实现信息共享 协调和协作 然而 随着企业规模的扩大 企业的ERP系统也需要相应地进行升级和扩展 因此 使用IBCS虚拟专线公网IP在公司内部
  • 五. Zuul 限流

    目录 一 spring cloud zuul ratelimit 基础解释 二 实现案例 1 pom 添加依赖 2 yml 配置 3 redis 配置类 4 自定义Zuul过滤器 5 自定义限流策略key 6 在当前Zuul服务中编写Con
  • string查找和替换

    string查找和替换 查找 查找指定字符串是否存在 替换 在指定的位置替换字符串 函数原型 int find const string str int pos 0 const 查找str第一次出现位置 从pos开始查找 int find
  • python读取串口数据 绘图_3.使用串口读取IMU数据并通过话题发布

    0x00 简介 我们的IMU扩展板是支持通过串口方式来读取IMU数据 现在代码已经开发完成 前面文章介绍的都是将IMU板插在树莓派上 然后使用树莓派的IIC接口来数据通信 因此不需要额外接线就可以发布imu话题的 若使用串口进行通信的话 若
  • 在Linux下安装jdk的步骤

    1 下载安装包 http www oracle com technetwork java javase downloads jdk8 downloads 2133151 html 版本 jdk 8u191 linux x64 tar gz
  • 确实卷,公司新来的00后卷王,我们这帮老油条真干不过.....

    都说00后躺平了 但是有一说一 该卷的还是卷 这不 前段时间我们公司来了个00后 工作没两年 跳槽到我们公司起薪18K 都快接近我了 后来才知道人家是个卷王 从早干到晚就差搬张床到工位睡觉了 最近和他聊了一次天 原来这位小老弟家里条件不太好
  • C#反编译工具:ILSpy

    参考 反编译软件ILSpy的使用教程 TONY5388的博客 CSDN博客 ilspy exe 总结 以前以为dnspy是反编译的 结果发现iLSpy是真的好用 可以选择生成不同C 版本的源码
  • SQLite数据库总结

    参考网址 https www cnblogs com stephen liu74 archive 2012 02 29 2328348 html 3种工作模式 1 SQLite完全内存数据库 在SQLite中 数据库通常是存储在磁盘文件中的
  • 【python】KNN模型训练及应用01

    目的应用 让电脑代替人工对图片分类 1 数据加载 from sklearn datasets import load iris from sklearn model selection import train test split fro
  • 今天终于知道了如果用layero获取layer弹窗中的子元素了

    通过layer弹出的ifram 想要获取里面的元素并且绑定相应的事件 以前一直不知道layero是什么意思 可以通过下面的代码自己体会一下 layer open type 2 title 文件管理 shadeClose true shade
  • 基于XStream的JavaBean与XML相互转换

    相对于JAXB XStream更简洁一些 常用注解 XStreamAlias 定义xml节点名 1 引入XStream依赖
  • 数据清洗分析导出遇到的一些问题

    本文简单记录一个学习过程 无技术含量 勿喷 环境 ambari 2 6 1 spark 2 1 python 3 6 oracle 11 2 sqoop 1 4 最近一直在测试数据采集 清洗 分析 导出 展示的一系列的工作 主要数据流程如下