Mac M1安装配置Hadoop+Flink SQL环境

Flink 1.18.1+ Hadoop 3.4.0

一、准备工作

系统:Mac M1 (MacOS Sonoma 14.3.1)

JDK:jdk1.8.0_381  (注意:尽量一定要用JDK8,少用高版本)

Scala:2.12

JDK安装在本机的/opt/jdk1.8.0_381.jdk/Contents/Home下,Scala安装在/opt/scala-2.12.10下,并在.bash_profile中已配置好环境变量

export JAVA_HOME=/opt/jdk1.8.0_381.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATHexport SCALA_HOME=/opt/scala-2.12.10
export PATH=$SCALA_HOME/bin:$PATH

二、安装Hadoop

单纯运行Flink的话没必要安装Hadoop环境,但为了在Flink SQL中使用Hive数仓的话,还是得安装Hadoop基础环境。

2.1 下载解压

下载Hadoop 3.4.0(截止当前的最新版本)

国内镜像地址:Index of /apache/hadoop/common

将下载后的hadoop-3.4.0.tar.gz放到/opt下直接双击进行解压,如下:

2.2 配置Hadoop环境变量

打开.bash_profile(Mac下可用文本编辑器打开编辑),添加如下变量

export HADOOP_HOME=/opt/hadoop-3.4.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"

保存使之生效:

source ~/.bash_profile

2.3 配置Hadoop配置文件

1. 编辑hadoop-env.sh

打开/opt/hadoop-3.4.0/etc/hadoop/hadoop-env.sh,添加一行:

export JAVA_HOME=/opt/jdk1.8.0_381.jdk/Contents/Home

2. 编辑core-site.xml

打开/opt/hadoop-3.4.0/etc/hadoop/core-site.xml,在<configuration>中添加如下配置:

<configuration><property><name>hadoop.tmp.dir</name><value>/opt/hdfs/tmp/</value></property><property><name>fs.default.name</name><value>hdfs://127.0.0.1:9000</value></property>
</configuration>

其中/opt/hdfs/tmp为自定义的HDFS路径。

3. 编辑hdfs-site.xml

打开/opt/hadoop-3.4.0/etc/hadoop/hdfs-site.xml,在<configuration>中添加如下配置:

<configuration><property><name>dfs.replication</name><value>1</value></property>
</configuration>

4. 编辑mapred-site.xml

打开/opt/hadoop-3.4.0/etc/hadoop/mapred-site.xml,在<configuration>中添加如下配置:

<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property>
</configuration>

5. 编辑yarn-site.xml

打开/opt/hadoop-3.4.0/etc/hadoop/yarn-site.xml,在<configuration>中添加如下配置:

<configuration><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name><value>org.apache.hadoop.mapred.ShuffleHandler</value></property><property><name>yarn.resourcemanager.hostname</name><value>127.0.0.1</value></property><property><name>yarn.acl.enable</name><value>0</value></property><property><name>yarn.nodemanager.env-whitelist</name><value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PERPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value></property>
</configuration>

2.4 配置其他工具类jar包(使用Flink SQL时才需要配置)

下载高版本jline,替换原来的旧版本,例如下载:jline-3.26.2.jar

下载地址:https://mvnrepository.com/artifact/org.jline/jline/3.26.2

将其分别放到:

/opt/hadoop-3.4.0/share/hadoop/hdfs/lib

/opt/hadoop-3.4.0/share/hadoop/yarn/lib

这两个目录下,并将原有的jline-3.9.0.jar删掉。

注意:该配置只为了解决Flink SQL使用过程中的jar包报错问题,即Hadoop自带的jline版本太低,无法适配高版本flink,如果单纯只使用Hadoop或是Spark的能力,无需进行该配置。

2.5 设置SSH免密登录

在个人目录下输入以下命令:

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/id_rsa.pub

中间问是否覆盖此前的ssh,选择Y:

三、启动Hadoop

首次启动Hadoop之前必须进行Namenode格式化(以后不需要):

cd /opt/hadoop-3.4.0/sbin
hdfs namenode -format

输出如下日志信息:

运行start-all.sh直接启动,包含了启动start-dfs.sh和start-yarn.sh。出现如下信息表示启动成功:

在浏览器中输入:http://localhost:9870/

显示如下:

至此,Hadoop已正常启动。

注:关闭命令为:stop-all.sh

四、配置Flink

当前Flink最新版本为1.19.1,但目前的1.19版本仍未支持Iceberg runtime,考虑到后续可能会使用Iceberg数据湖,因此选择Flink 1.18.1。

Multi-Engine Support - Apache Iceberg

4.1 配置Flink环境变量

下载Flink 1.18.1

下载地址:Downloads | Apache Flink

将下载好的flink-1.18.1-bin-scala_2.12.tgz放到/opt下,双击进行解压。

配置环境变量,打开.bash_profile,添加如下行:

export PATH=/opt/flink-1.18.1/bin:$PATH

使之生效:

source ~/.bash_profile

注意:Mac里也可以在~/.zshrc中配置。

4.2 配置Flink 其他jar包(和hive/iceberg适配连接)

注意选择适配flink 1.18.1版本的jar包。

下载commons-cli-1.8.0.jar

地址:https://mvnrepository.com/artifact/commons-cli/commons-cli/1.8.0

下载flink-connector-hive_2.12-1.18.1.jar

地址:https://repo1.maven.org/maven2/org/apache/flink/flink-connector-hive_2.12/1.18.1/

下载flink-sql-connector-hive-3.1.3_2.12-1.18.1.jar

地址:https://repo1.maven.org/maven2/org/apache/flink/flink-sql-connector-hive-3.1.3_2.12/1.18.1/

下载hive-exec-3.1.3.jar

地址:https://mvnrepository.com/artifact/org.apache.hive/hive-exec/3.1.3

下载iceberg-flink-runtime-1.18-1.5.2.jar

地址:https://repo1.maven.org/maven2/org/apache/iceberg/iceberg-flink-runtime-1.18/1.5.2/

下载iceberg-hive-runtime-1.5.2.jar

地址:https://repo1.maven.org/maven2/org/apache/iceberg/iceberg-hive-runtime/1.5.2/

以上jar包下载完后放到/opt/flink-1.18.1/lib下。

五、运行Flink SQL

5.1 启动Flink

运行以下命令:

cd /opt/flink-1.18.1
./bin/start-cluster.sh

输出如下信息:

在浏览器中打开:http://localhost:8081/

可以看到如下信息:

注:关闭flink的命令为:

./bin/stop-cluster.sh

5.2 启动Flink SQL

输入:

./bin/sql-client.sh embedded shell

看到如下信息表示启动成功:

可能会有如下警告信息,可忽略,原因为log4j jar包存在冲突。

SLF4J: Class path contains multiple SLF4J bindings.

SLF4J: Found binding in [jar:file:/opt/flink-1.18.1/lib/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Found binding in [jar:file:/opt/hadoop-3.4.0/share/hadoop/common/lib/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]

查看当前的catalogs:

show catalogs;

注:Catalog 是一个元数据存储,它提供了一种集中的方式来管理元数据信息,Catalog 存储了 Flink 中使用的所有元数据,包括表结构、分区信息、用户定义函数等。对于一个数据表的定位是 catalog名.数据库名.表名。因此首先需要创建一个 Catalog,然后在 Catalog 中创建数据库,最后在数据库中创建表。

输出:

默认只有1个default_catalog。

创建新的catalog:

CREATE CATALOG hive_catalog WITH ('type'='iceberg','catalog-type'='hive','uri'='thrift://localhost:9083','clients'='5','property-version'='1','warehouse'='file:///opt/warehouse/iceberg-hive-catalog'
);

注意设置“warehouse”为自己的路径,别的不用改。

查看catalogs:

show catalogs;

输出:

显示新的catalog创建成功了。

若要退出Flink SQL直接输入:

exit;

六、相关问题

1. Hadoop启动yarn时报错。控制台错误信息:

Starting resourcemanager ERROR: Cannot set priority of resourcemanager process 20248

在/opt/hadoop-3.4.0/logs查看相关日志,具体报错信息为:

2024-07-11 10:01:08,633 ERROR org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: Error starting ResourceManager

java.lang.ExceptionInInitializerError

at com.google.inject.internal.cglib.reflect.$FastClassEmitter.<init>(FastClassEmitter.java:67)

at com.google.inject.internal.cglib.reflect.$FastClass$Generator.generateClass(FastClass.java:72)

at com.google.inject.internal.cglib.core.$DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)

at com.google.inject.internal.cglib.core.$AbstractClassGenerator.create(AbstractClassGenerator.java:216)

at com.google.inject.internal.cglib.reflect.$FastClass$Generator.create(FastClass.java:64)

at com.google.inject.internal.BytecodeGen.newFastClass(BytecodeGen.java:204)

at com.google.inject.internal.ProviderMethod$FastClassProviderMethod.<init>(ProviderMethod.java:256)

at com.google.inject.internal.ProviderMethod.create(ProviderMethod.java:71)

at com.google.inject.internal.ProviderMethodsModule.createProviderMethod(ProviderMethodsModule.java:275)

at com.google.inject.internal.ProviderMethodsModule.getProviderMethods(ProviderMethodsModule.java:144)

at com.google.inject.internal.ProviderMethodsModule.configure(ProviderMethodsModule.java:123)

at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:340)

at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:349)

at com.google.inject.AbstractModule.install(AbstractModule.java:122)

at com.google.inject.servlet.ServletModule.configure(ServletModule.java:49)

at com.google.inject.AbstractModule.configure(AbstractModule.java:62)

at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:340)

at com.google.inject.spi.Elements.getElements(Elements.java:110)

at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:138)

at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:104)

at com.google.inject.Guice.createInjector(Guice.java:96)

at com.google.inject.Guice.createInjector(Guice.java:73)

at com.google.inject.Guice.createInjector(Guice.java:62)

at org.apache.hadoop.yarn.webapp.WebApps$Builder.build(WebApps.java:420)

at org.apache.hadoop.yarn.webapp.WebApps$Builder.start(WebApps.java:468)

at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.startWepApp(ResourceManager.java:1486)

at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.serviceStart(ResourceManager.java:1599)

at org.apache.hadoop.service.AbstractService.start(AbstractService.java:195)

at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.main(ResourceManager.java:1801)

Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @6cc27570

at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)

at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)

at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)

at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)

at com.google.inject.internal.cglib.core.$ReflectUtils$2.run(ReflectUtils.java:56)

at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)

at com.google.inject.internal.cglib.core.$ReflectUtils.<clinit>(ReflectUtils.java:46)

... 29 more

原因:JDK版本太高,笔者之前装的是JDK 17。

解决方案:换成JDK 8,一切正常。试了网上别的一些解决方案,都不奏效。

2. Flink SQL执行时报错:

[ERROR] Could not execute SQL statement. Reason:

java.lang.ClassNotFoundException: org.apache.hadoop.conf.Configuration

原因:Hadoop环境变量配置有误。

解决方案:参考2.2配置Hadoop环境变量。

注:无需配置一个名称为HADOOP_CLASSPATH的变量。

注:网上另有一种方案是将flink-shaded-hadoop-3-uber-3.1.1.7.2.9.0-173-9.0.jar放到flink lib目录下,由于我们是自己单独配置了Hadoop环境,因此无需下载该jar包。

地址:https://mvnrepository.com/artifact/org.apache.flink/flink-shaded-hadoop-3-uber/3.1.1.7.2.9.0-173-9.0

3. Flink SQL启动报错:

Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.NoSuchMethodError: org.jline.utils.AttributedStyle.foreground(III)Lorg/jline/utils/AttributedStyle; [in thread "main"]

at org.apache.flink.table.client.cli.parser.SyntaxHighlightStyle$BuiltInStyle.<clinit>(SyntaxHighlightStyle.java:57)

at org.apache.flink.table.client.config.SqlClientOptions.<clinit>(SqlClientOptions.java:76)

at org.apache.flink.table.client.cli.parser.SqlClientSyntaxHighlighter.highlight(SqlClientSyntaxHighlighter.java:59)

at org.jline.reader.impl.LineReaderImpl.getHighlightedBuffer(LineReaderImpl.java:3633)

at org.jline.reader.impl.LineReaderImpl.getDisplayedBufferWithPrompts(LineReaderImpl.java:3615)

at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3554)

at org.jline.reader.impl.LineReaderImpl.redisplay(LineReaderImpl.java:3493)

at org.jline.reader.impl.LineReaderImpl.readLine(LineReaderImpl.java:549)

原因:jline版本太低。

解决方案:参考2.4配置相关jar包。

4. Flink SQL执行报错:

[ERROR] Could not execute SQL statement. Reason:

java.lang.ClassNotFoundException: org.apache.hadoop.hive.metastore.api.NoSuchObjectException

原因:缺hive相关jar包,尤其是hive-exec-3.1.3.jar。

解决方案:参考4.2配置相关jar包。

参考:

Hadoop 安装教程 (Mac m1/m2版)_m1 安装hadoop-CSDN博客

https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/connectors/table/hive/overview/

Flink集成Iceberg小小实战-腾讯云开发者社区-腾讯云

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/375781.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp微信小程序 TypeError: $refs[ref].push is not a function

我的写法 this.$refs.addPopup.open();报错 打印出来是这样的 解决 参考未整理 原因 在当前页面使用的v-for循环 并且循环体内也有组件使用了ref&#xff08;而我没有把每个ref做区别命名&#xff09; 这样就导致了我有很多同名的ref&#xff0c;然后就报错了 解决办法&a…

值得关注的数据资产入表

不错的讲解视频&#xff0c;来自&#xff1a;第122期-杜海博士-《数据资源入表及数据资产化》-大数据百家讲坛-厦门大学数据库实验室主办第122期-杜海博士-《数据资源入表及数据资产化》-大数据百家讲坛-厦门大学数据库实验室主办-20240708_哔哩哔哩_bilibili

C语言 | Leetcode C语言题解之第231题2的幂

题目&#xff1a; 题解&#xff1a; const int BIG 1 << 30;bool isPowerOfTwo(int n) {return n > 0 && BIG % n 0; }

MacOS 通过Docker安装宝塔面板搭建PHP开发环境

1、docker拉取ubuntu系统 docker pull ubuntu2、运行容器 docker run -i -t -d --name bt -p 20:20 -p 21:21 -p 80:80 -p 443:443 -p 888:888 -p 8888:8888 -p 3306:3306 -p 6379:6379 --privilegedtrue -v /Users/oi/Sites:/www/wwwroot ubuntu-v 后的 /Users/oi/Sites 代表…

OpenAI终止对中国提供API服务,对国内AI市场产生重大冲击?

6月25日&#xff0c;OpenAI突然宣布终止向包括中国在内的国家地区提供API服务&#xff0c;本月9日这一政策已经正式生效了&#xff01; 有人说&#xff0c;这个事件给中国AI行业带来很大冲击&#xff01;是这样吗&#xff1f;在展开讨论前&#xff0c;我们先来看看什么是API服务…

基础小波降噪方法(Python)

主要内容包括&#xff1a; Stationary wavelet Transform (translation invariant) Haar wavelet Hard thresholding of detail coefficients Universal threshold High-pass filtering by zero-ing approximation coefficients from a 5-level decomposition of a 16Khz …

《昇思25天学习打卡营第14天|SSD目标检测》

SSD&#xff08;Single Shot MultiBox Detector&#xff09;是一种用于目标检测的深度学习算法。它的设计旨在同时检测多个对象&#xff0c;并确定它们在图像中的位置和类别。与其他目标检测算法相比&#xff0c;SSD具有速度快和精度高的特点&#xff0c;在实时检测应用中非常受…

[Spring] Spring Web MVC基础理论

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

介绍一款数据准实时复制(CDC)中间件 `Debezium`

简介 文章开头先介绍一下什么是CDC。数据准实时复制(CDC)是目前行内实时数据需求大量使用的技术。常用的中间件有Canal、Debezium、Flink CDC等 下面我们做一下对比 各有优缺点吧,本主要介绍一下Debezium中间件。 Debezium是什么 Debezium是一个为变更数据捕获(CDC)提供…

Android Gantt View 安卓实现项目甘特图

需要做一个项目管理工具&#xff0c;其中使用到了甘特图。发现全网甘特图解决方案比较少&#xff0c;于是自动动手丰衣足食。 前面我用 Python和 Node.js 前端都做过&#xff0c;这次仅仅是移植到 Android上面。 其实甘特图非常简单&#xff0c;开发也不难&#xff0c;如果我…

Emacs有什么优点,用Emacs写程序真的比IDE更方便吗?

GPT-4o (OpenAI) Emacs 是一种强大的文本编辑器&#xff0c;自1970年代以来一直在计算机领域中使用。它的优势以及在编程方面的便捷性取决于特定用户的需求和使用习惯。以下是一些 Emacs 的主要优点及其与 IDE 的比较&#xff1a; 优点 1. 灵活性和可扩展性&#xff1a; -…

端到端拥塞控制的本质

昨天整理了一篇 bbr 的微分方程组建模(参见 bbr 建模)&#xff0c;算是 bbr 算法终极意义上的一个总结&#xff0c;最后也顺带了对 aimd 的描述&#xff0c;算是我最近比较满意的一篇分享了。那么接下来的问题&#xff0c;脱离出具体算法&#xff0c;上升到宏观层面&#xff0c…

【游戏客户端】大话slg玩法架构(三)建筑控件

【游戏客户端】大话slg玩法架构&#xff08;三&#xff09;建筑控件 大家好&#xff0c;我是Lampard家杰~~ 今天我们继续给大家分享SLG玩法的实现架构&#xff0c;关于SLG玩法的介绍可以参考这篇上一篇文章&#xff1a;【游戏客户端】制作率土之滨Like玩法 PS&#xff1a;和之前…

JVM学习(day1)

JVM 运行时数据区 线程共享&#xff1a;方法区、堆 线程独享&#xff08;与个体“同生共死”&#xff09;&#xff1a;虚拟机栈、本地方法栈、程序计数器 程序计数器 作用&#xff1a;记录下次要执行的代码行的行号 特点&#xff1a;为一个没有OOM&#xff08;内存溢出&a…

电压反馈型运算放大器的增益和带宽

简介 本教程旨在考察标定运算放大器的增益和带宽的常用方法。需要指出的是&#xff0c;本讨论适用于电压反馈(VFB)型运算放大器。 开环增益 与理想的运算放大器不同&#xff0c;实际的运算放大器增益是有限的。开环直流增益(通常表示为AVOL)指放大器在反馈环路未闭合时的增益…

Python爬虫技术从去哪儿网获取旅游数据,对攻略进行可视化分析,提供全面的旅游攻略和个性化的出行建议

背景 随着信息技术的快速发展和互联网的普及&#xff0c;旅游行业也迎来了数字化和智能化的变革。去哪儿网作为中国领先的在线旅游平台之一&#xff0c;提供了丰富的旅游产品和服务&#xff0c;涵盖了机票、酒店、旅游度假等各个方面。用户通过去哪儿网可以方便地查询、预订和…

Mac下flutter运行iOS模拟器

上篇flutter环境安装&#xff08;Macvscode&#xff09;已经将vscode和xcode等开发环境都搭建起来了&#xff0c;vscode新建工程还是比较方便的&#xff0c;那么&#xff0c;建立好了之后&#xff0c;我们怎么看效果呢&#xff1f; 1. vscode新建项目 通过 vscode的命令命板(…

经典电影的高清修复是怎么实现的?

老片修复&#xff0c;主要分两种。精修版和流水线版。精修版比如像《星球大战》那种。基本就是一个专业团队花几年时间&#xff0c;不干别的就盯着这一个项目死磕。细致程度差不多就是一帧一帧进行修复。那对于我们普通人来说&#xff0c;想要修复视频高清&#xff0c;这种精修…

七天.NET 8操作SQLite入门到实战 - 第二天 在 Windows 上配置 SQLite环境

前言 SQLite的一个重要的特性是零配置的、无需服务器&#xff0c;这意味着不需要复杂的安装或管理。它跟微软的Access差不多&#xff0c;只是一个.db格式的文件。但是与Access不同的是&#xff0c;它不需要安装任何软件&#xff0c;非常轻巧。 七天.NET 8操作SQLite入门到实战…

Java常用的API_02(正则表达式、爬虫)

Java正则表达式 七、正则表达式7.1 格式7.1.1 字符类注意字符类示例代码1例2 7.1.2 预定义字符预定义字符示例代码例2 7.1.3 区别总结 7.2 使用Pattern和Matcher类与直接使用String类的matches方法的区别。&#xff08;1&#xff09; 使用Pattern和Matcher类示例代码 &#xff…