首页 > 其他分享 >Alink环境搭建

Alink环境搭建

时间:2023-11-14 15:23:20浏览次数:28  
标签:java Alink flink 环境 hive alink apache org 搭建

提前安装好anaconda并创建或切换到要安装的环境,运行pip install pyalink即可安装alink(所支持最新版本的flink,目前是1.13),也可以运行pip install pyalink-flink-***安装指定flink版本的alink,例如pip install pyalink-flink-1.12表示安装支持flink-1.12版本的alink

下载插件

alink任务中如果使用到hive、kafka等数据源,则需要提前下载对应的插件才能使用。可参考这篇文章进行下载:https://www.yuque.com/pinshu/alink_guide/plugin_downloader

插件会默认下载到/data1/tools/miniconda3/envs/alink/lib/python3.6/site-packages/pyalink/lib/plugins(每个人的anaconda安装位置不同,环境名也不同,所以位置也会有所不同)

# java环境加载变量
env.java.opts: -Djava.security.krb5.conf=/etc/krb5.conf -DALINK_PLUGINS_DIR=/data1/tools/miniconda3/envs/alink/lib/python3.6/site-packages/pyalink/lib/plugins -DALINK_HIVE_HDFS_CONFIG=/etc/hadoop/conf

# Alink插件及hadoop配置文件位置
ALINK_HIVE_HDFS_CONFIG: /etc/hadoop/conf
PATH_HADOOP_CONFIG: /etc/hadoop/conf
HADOOP_CONF_DIR: /etc/hadoop/conf

# 配置执行flink run时使用的python解释器:
python.client.executable: /data1/tools/miniconda3/envs/alink/bin/python

# 配置执行flink run时提交到yarn上及提交到的applicationId(重启flink之前需要先把这两个参数注释掉)
execution.target: yarn-session
yarn.application.id: application_1679465143385_16077

# 配置jobmanager和taskmanager之间发送的消息的最大大小
akka.framesize: "524288000b"

# 客户端和服务端最大能接收和处理的大小
rest.client.max-content-length: 1024288000
rest.server.max-content-length: 1024288000

脚本flink.sh、start-cluster.sh、stop-cluster.sh开头新增对flink位置的配置

由于我本地环境变量之前配置过flink-1.10.0的变量,为了提交任务时不干扰到低版本的flink,故此配置

export FLINK_HOME=/data1/tools/flink-1.13.3
export FLINK_LIB_DIR=/data1/tools/flink-1.13.3/lib
export FLINK_BIN_DIR=/data1/tools/flink-1.13.3/bin

踩坑过程:

1、Alink输出的hive表用presto查询会报以下错误:

Output format org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat with SerDe org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe is not supported

从报错信息来看该表是采用默认的存储格式TextFile的outputformat --> IgnoreKeyTextOutputFormat,presto查询的时候使用的LazySimpleSerDe不支持该格式,因为alink的代码中不能单独设置hive的outpformat等参数,所以在hive-site.xml中设置默认的存储格式为Orc。

# 打开hive-site.xml
vim /etc/hive/conf/hive-site.xml

# 添加下面这个属性,将Hive的默认存储属性改为orc后保存退出
<property>
    <name>hive.default.fileformat</name>
    <value>Orc</value>
</property>

2、当低版本的Hive(我是2.3.4)去读取由高版本Hive(我是3.1.2)写入的数据时,会报以下数组越界异常:

java.lang.RuntimeException:ORC split generation failed with exception: java.lang.ArrayIndexOutOfBoundsException: 6

参考网上的文章:https://blog.csdn.net/lixiaoksi/article/details/106855509

发现是hive源码中对版本进行了限制,可以参考上面这篇文章对hive-exec和hive-orc这两个模块进行修改后重编译替换掉hive原来的这两个包即可解决该问题

3、当Alink任务提交到yarn上运行去读取hive里的大量数据并调用collectToDataFrame方法将operator转换为dataframe时会抛出以下异常

Execution is unpectedly no longer running on task executor

因为从这个报错信息不能看出具体原因,所以我便将该任务提交到本地集群的Flink上,运行后依旧报错了,此时查看报错信息,出现以下关键语句

the rpc invocation size 108982514 exceeds the maximum akka framesize

通过以上报错信息可得知,应该是JobManager和TaskManagers之间发送的消息超过了默认的最大大小10485760b导致报错,在flink-conf.yaml文件中增加以下配置调大该值即可解决该问题

akka.framesize: "204800000b"

4、当Alink任务在调用useLocalEnv(1)初始化本地环境时,会报以下错误

py4j.protocol.Py4JError: org.apache.flink.python.PythonOptions.PYTHON_EXECUTABLE does not exist in the JVM

检查一番后发现是环境变量配置的问题,我的环境变量中之前配置过flink-1.10.0的flink路径,但是我的alink对应的版本是flink-1.13.3的,将环境变量中flink路径改为1.13.3版本的flink即可

5、当Alink任务提交到yarn上运行且有从hive中读取数据或写入数据到hive的代码时,会报以下错误:

javax.security.auth.LoginException: Unable to obtain password from user

这个问题在网上的回答都是说没有权限读取keytab或者是找不到keytab导致的,我在nodemanager每台机都检查了一下,发现我在代码中指定的keytab都是存在的,权限也都是777,这让我百思不得其解,之后我尝试把keytab从/opt文件夹复制一份到根目录/下,重新运行,竟然没有报错,可能是权限问题导致无法读取到/opt文件夹里的内容

6、如果没有配置以下参数,则运行过程中可能会抛出异常

# java环境加载变量
env.java.opts: -Djava.security.krb5.conf=/etc/krb5.conf -DALINK_PLUGINS_DIR=/data1/tools/miniconda3/envs/alink/lib/python3.6/site-packages/pyalink/lib/plugins -DALINK_HIVE_HDFS_CONFIG=/etc/hadoop/conf

# Alink插件及hadoop配置文件位置
ALINK_HIVE_HDFS_CONFIG: /etc/hadoop/conf
PATH_HADOOP_CONFIG: /etc/hadoop/conf
HADOOP_CONF_DIR: /etc/hadoop/conf
Caused by: java.lang.Exception: Configuring the output format (com.alibaba.alink.common.io.plugin.wrapper.RichOutputFormatWithClassLoader@1ef83a78) failed: There should config the PATH_HADOOP_CONFIG in flink configure.
	at org.apache.flink.runtime.jobgraph.InputOutputFormatVertex.initializeOnMaster(InputOutputFormatVertex.java:105)
	at org.apache.flink.runtime.executiongraph.DefaultExecutionGraphBuilder.buildGraph(DefaultExecutionGraphBuilder.java:174)
	... 19 more
Caused by: java.lang.IllegalStateException: There should config the PATH_HADOOP_CONFIG in flink configure.
	at com.alibaba.alink.common.io.catalog.plugin.HiveClassLoaderFactory.loginClassLoader(HiveClassLoaderFactory.java:216)
	at java.util.HashMap.computeIfAbsent(HashMap.java:1127)
	at com.alibaba.alink.common.io.catalog.plugin.HiveClassLoaderFactory.installSecurity(HiveClassLoaderFactory.java:143)
	at com.alibaba.alink.common.io.catalog.plugin.HiveClassLoaderFactory.create(HiveClassLoaderFactory.java:130)
	at com.alibaba.alink.common.io.plugin.wrapper.RichOutputFormatWithClassLoader.getOutputFormat(RichOutputFormatWithClassLoader.java:41)
	at com.alibaba.alink.common.io.plugin.wrapper.RichOutputFormatWithClassLoader.configure(RichOutputFormatWithClassLoader.java:70)
	at org.apache.flink.runtime.jobgraph.InputOutputFormatVertex.initializeOnMaster(InputOutputFormatVertex.java:99)
	... 20 more

org.apache.flink.client.program.ProgramAbortException: java.lang.RuntimeException: Python process exits with code: 1
	at org.apache.flink.client.python.PythonDriver.main(PythonDriver.java:140)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.flink.client.program.PackagedProgram.callMainMethod(PackagedProgram.java:355)
	at org.apache.flink.client.program.PackagedProgram.invokeInteractiveModeForExecution(PackagedProgram.java:222)
	at org.apache.flink.client.ClientUtils.executeProgram(ClientUtils.java:114)
	at org.apache.flink.client.cli.CliFrontend.executeProgram(CliFrontend.java:812)
	at org.apache.flink.client.cli.CliFrontend.run(CliFrontend.java:246)
	at org.apache.flink.client.cli.CliFrontend.parseAndRun(CliFrontend.java:1054)
	at org.apache.flink.client.cli.CliFrontend.lambda$main$10(CliFrontend.java:1132)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:422)
	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1836)
	at org.apache.flink.runtime.security.contexts.HadoopSecurityContext.runSecured(HadoopSecurityContext.java:41)
	at org.apache.flink.client.cli.CliFrontend.main(CliFrontend.java:1132)
Caused by: java.lang.RuntimeException: Python process exits with code: 1
	at org.apache.flink.client.python.PythonDriver.main(PythonDriver.java:130)
	... 16 more

7、更换Hive插件版本

由于我本地的hive版本是Hive 2.1.1-cdh6.3.2,alink提供的hive版本只有2.3.4,为了能兼容,需要对下载好的hive插件目录下的部分jar包进行替换。用hive-exec-2.1.1-cdh6.3.2.jar 和 hive-metastore-2.1.1-cdh6.3.2.jar替换掉原来的hive-exec-2.3.4、hive-metastore-2.3.4,并加入新的jar包libfb303-0.9.3.jar就能成功使用了

8、alink代码中hive版本指定错误抛出异常

当执行下面的语句创建hive的catalog时,需要指定hive插件的版本

hive = HiveCatalog("hive_catalog", None, "2.1.1", "/etc/hive/conf", principal, keytab)

当你指定的版本跟hive插件的版本不一致时就会抛出下面的异常

java.lang.NosuchMethodException:org.apache.hadoop.hive.metastore.RetryingMetastoreClient.getProxy(org.apche.hadoop.hive.conf.HiveConf,[Ljava.lang.Class;,[Ljava.lang.Object;,java.lang.string)

9、alink在用Hive catalog读取hive数据且源表存在timestamp字段时存在bug

在com.alibaba.alink.common.io.catalog.HiveCatalog类的RowDataToRow私有类的map方法里(634行),手动进行timestamp的类型判断,添加以下代码

else if (o instanceof TimestampData){
	o = ((TimestampData) o).toLocalDateTime();
}

添加好后重新编译,替换掉原来的alink-core包

标签:java,Alink,flink,环境,hive,alink,apache,org,搭建
From: https://www.cnblogs.com/zoufh/p/17831693.html

相关文章

  • centOS配置java、maven环境
    1.下载jdk与maven安装包2.在自定义的位置解压安装包3.修改profile的环境变量:vim/etc/profile在最下面增加exportJAVA_HOME=/usr/local/java/jdk1.8.0_191exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexportM2_HOME=/usr/local/maven3/apache-mav......
  • visualstudio+cmake+环境配置,及使用过程中的一些小坑点
    一、概述想要找一个免费好用的c++开发工具。期间尝试了eclipse+CDT、VSCode+Mingw64+CMake都觉得不是很好用。最后选择了社区版的VisualStudio+CMake。之所以选择这个,是因为相对于eclipse和VSCode这个更好用。就是使用过程中会遇到一些小问题。二、配置1.下载Vis......
  • TDengine 与煤科院五大系统实现兼容性互认,助力煤矿智能化安全体系搭建
    近日,涛思数据与煤炭科学技术研究院(以下简称煤科院)已完成数个产品兼容互认证工作,经双方共同严格测试,涛思数据旗下物联网、工业大数据平台TDengineV3.X与煤炭科学技术研究院旗下煤矿复合灾害监测监控预警系统、煤矿灾害智能预警与综合防治系统、KJ236J煤矿井下人员精确定位系统、......
  • win11安装WSL2并配置Ubuntu环境
    win11安装WSL2并配置Ubuntu环境WSL是适用于 Linux 的 Windows 子系统,可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销。1    开启windows的WSL与虚拟平台支持1.1    开启虚拟化......
  • Mac Maven环境变量配置 zsh: command not found: mvn
    之前配过环境变量,但是后来打开还是报zsh:commandnotfound:mvn需要在运行前先刷下环境变量source~/.bash_profile每次使用前都刷一下比较麻烦,这是因为当Mac上安装了zsh后,.bash_profile文件的配置无法生效最终解决方案:#修改~/.zshrc[jimmy@MacBook-Pro~%vi......
  • Spring5学习随笔-Spring5的第一个程序(环境搭建、日志框架整合)
    学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】第二章、第一个Spring程序1.软件版本1.JDK1.8+2.Maven3.5+3.IDEA2018+4.SpringFramework5.1.4官网:www.spring.io2.环境搭建Spring的jar包......
  • 通过NGINX搭建TiDB负载均衡
    作者:像风一样的男子前言目前TIDB的负载均衡官网推荐使用HAProxy,社区主流也是HAProxy,本文尝试使用nginx四层代理tidb提供TCP协议下的负载均衡能力,因为nginx安装编译需要自己添加模块,很多小伙伴觉得麻烦,本文使用基于Nginx的openresty来安装,可以实现一键安装并打包各个模块,快速......
  • 记一次 TiDB v7.1 版本生产环境的完整搭建流程
    作者:随缘天空本文包含以下内容:1、安装的硬件要求2、安装前环境检查及系统优化3、集群搭建4、服务访问1、硬件要求tidb集群搭建对服务器的cpu和内存有要求,过低的配置可能会导致搭建失败或影响集群性能2、安装前环境检查及系统优化为了保证安装顺利和集群的性能,安装前我们需......
  • 【DB宝48】JumpServer:多云环境下更好用的堡垒机
    [toc]一、JumpServer简介JumpServer是全球首款开源的堡垒机,使用GNUGPLv2.0开源协议,是符合4A规范的运维安全审计系统。JumpServer使用Python/Django为主进行开发,遵循Web2.0规范,配备了业界领先的WebTerminal方案,交互界面美观、用户体验好。JumpServer采纳分布式架......
  • 国产首款IDE环境:数字广东公司联合麒麟软件打造的国内首款适配国产操作系统、蜘蛛创新
    参考:https://www.youtube.com/watch?v=fOpBEWZVKU0   在中国it历史上继“木兰编程语言(实际上套壳Python),红旗操作系统(实际上套壳Chrome),汉芯(虚假芯片),鸿蒙操作系统(安卓套壳)”后又推出了一款由数字广东公司联合麒麟软件打造的国内首款适配国产操作系统、蜘蛛创新的集成开发环......