首页 > 其他分享 >【大数据】beeline 导出文件有特殊字符的问题解决

【大数据】beeline 导出文件有特殊字符的问题解决

时间:2025-01-12 23:10:58浏览次数:1  
标签:导出 HADOOP terminal CLIENT beeline proc 特殊字符

问题

近期在做大数据查询引擎导出文件的功能,使用了 hive 的 beeline 客户端。发现 beeline 导出的文件以及终端输出有许多特殊字符。

按照官方文档使用 beeline 导出命令:[1]

/usr/bin/beeline --silent=true --showHeader=true --outputformat=csv2 -f query.hql </dev/null > /tmp/output.csv 2> /tmp/error.log

现象

在 vim 中显示为 ^M,在熟悉换行符的背景下,立即认出这就是 CR符号,也就是 \n

或者在excel文件头部,有很多 null,空格等符号。

分析

在做系统集成的时候,明显是不需要用 nohup的,因此没有采用文档中的写法,因为 nohup 一般直接在终端中使用;另外程序调用需要前台运行,等待结束后,获得exitCode,以及导出的文件和错误输出。

相关资料

另一位网友也遇到了这个问题[2],文章中分析了源码层面,可惜未给出合适的解决办法,但有启发。

过程

由前面的文档启发,观察 /bin/hive 脚本, 发现

if [[ "$SERVICE" =~ ^(hiveserver2|beeline|cli)$ ]] ; then
  # If process is backgrounded, don't change terminal settings
  if [[ ( ! $(ps -o stat= -p $$) =~ "+" ) && ! ( -p /dev/stdin ) && ( ! $(ps -o tty= -p $$) =~ "?" ) ]]; then
    export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Djline.terminal=jline.UnsupportedTerminal"
  fi
fi

在有使用过 Alibaba Cloud Toolkit 的背景下,立即发现这是一个 stty size 的问题。

解决

在程序调用的场景下,通过/bin/bash 进行调用,所以其实是以一个终端环境,终端就涉及到美化输出的问题

所以一定要设置终端类型为不支持终端,因此显式设置变量:

HADOOP_CLIENT_OPTS="-Djline.terminal=jline.UnsupportedTerminal"

ProcessBuilder _proc = new ProcessBuilder().inheritIO().command(arguments);
_proc.environment().put("HADOOP_CLIENT_OPTS","-Djline.terminal=jline.UnsupportedTerminal");
Process proc = _proc.start();

建议

一般导出的文件是UTF-8,对于Windows的用户来说,直接打开到Excel中文会乱码,最好添加上 BOM[3]

一般添加的是EF BB BF


  1. https://hive.apache.org/docs/latest/hiveserver2-clients_30758725/#background-query-in-terminal-script ↩︎

  2. https://stefanxiepj.github.io/archives/241842c7.html ↩︎

  3. https://stackoverflow.com/questions/2223882/whats-the-difference-between-utf-8-and-utf-8-with-bom ↩︎

标签:导出,HADOOP,terminal,CLIENT,beeline,proc,特殊字符
From: https://www.cnblogs.com/slankka/p/18649653

相关文章

  • springboot整合EasyExcel导出excel表格
    文章目录什么是EasyExcel?EasyExcel的特点使用EasyExcel导出excel1.添加EasyExcel依赖2.定义converter3.定义导出实体类型4.查询数据库数据并导出5.导出样式什么是EasyExcel?  EasyExcel是阿里巴巴开源的一款高性能、简洁易用的Excel读写工具库,基于Java开......
  • 导出和导入word样式模板
    对于自己配置过之后常用的word样式可以导出作为样式模板,可以重复使用.举例说一下哪些是常用的word样式,例如:(常见的):中文的内容的样式,中英文分别设置不同的样式(比较高级的)多级标题自动编号,题注跟随标题的编号word功能word自带导出导入模板样式的功能.word样式......
  • 使用vue导出excel
    在前端开发中,Vue.js并没有直接导出Excel的功能,但你可以通过一些第三方库来实现这个功能。以下是使用xlsx和file-saver这两个库来实现Vue.js中导出Excel的步骤:安装必要的库你需要安装xlsx和file-saver。你可以使用npm或yarn来安装它们:npminstallxlsxfile......
  • Java怎样实现将数据导出为Word文档
    文章首发于我的博客:Java怎样实现将数据导出为Word文档-LiuZijian'sBlog我们在开发一些系统的时候,例如OA系统,经常能遇到将审批单数据导出为word和excel文档的需求,导出为excel是比较简单的,因为excel有单元格来供我们定位数据位置,但是word文档的格式不像表格那样可以轻松的定位,......
  • as-v1000视频监控平台导入导出功能,在平台迁移时快速导入设备信息
    目录一、背景说明二、导出操作三、导入操作四、视频播放五、在平台迁移中的应用    1、快速部署    2、减少错误    3、保持连续性六、总结一、背景说明        在视频监控领域,随着技术的不断进步和应用场景的不断拓展,系统升级与......
  • java poi 模板导出 套用表格格式
    模板文件格式如下 生成数据后样式如下 poi3.17 excel2007已上xlsx 直接上代码。拿走不谢!1publicstaticXSSFWorkbookreadTemplate(StringfilePath)throwsIOException{2try(FileInputStreamfis=newFileInputStream(filePath)){3......
  • NocoBase 本周更新汇总:支持大规模数据量的导入和导出
    汇总一周产品更新日志,最新发布可以前往我们的博客查看。NocoBase目前更新包括的版本更新包括三个分支:main,next和develop。main:截止目前最稳定的版本,推荐安装此版本。next:包含即将发布的新功能,经过初步测试的版本,可能存在部分已知或未知问题。主要面向测试用户,用于收集反......
  • 前端多文件导出压缩包
    需要插件jszipfile-saver引入<scriptsrc="~/lib/jszip/jszip.js?t=@jsAndCssVersion"></script><scriptsrc="~/lib/jszip/FileSaver.min.js?t=@jsAndCssVersion"></script>使用varzip=newJSZip();//获取iframe节点varif......
  • HTML 特殊字符符号大全
    HTML 特殊字符符号大全 一、常见特殊符号   HTML原代码显示结果描述<<小于号或显示标记>>大于号或显示标记&amp;&可用于显示其它特殊字符"“引号&reg;®已注册&copy;©版权&trade;™商标&ensp; 半个空白位&emsp; ......
  • 导出表格加样式
     importFileSaverfrom"file-saver";importXLSXStylefrom"xlsx-style";importXLSXfrom"xlsx";exportfunctionexportExcel(data,name,merges,zishu,save=true){ returnnewPromise((resolve)=>{  letindex......