mac2019环境 Airflow+hive+spark+hadoop本地环境安装

news2024/11/17 8:39:11

1 环境介绍

本地安装可分为两个部分,mac软件环境, python开发环境
ps: 安装过程参考chatgpt、csdn文章
在这里插入图片描述

1.1 mac软件环境

目标安装的的软件是hive、apache-spark、hadoop,但是这三个软件又依赖java(spark依赖)、ssh(从warn日志看到,具体作用不明,可能是提交计算任务的时候依赖做权限验证)、数据库(hive依赖,postgres 实测问题较少)。zsh命令行解释器,用于执行指令, homebrew软件包管理器,安装卸载软件非常方便。接下来介绍各种软件情况。

1.1.1 环境变量

.zprofile 用来配置mac 用户登录时的环境变量,安装完软件后需要进行配置。 文档末尾提供一个参考示例。环境变量配置后才能方便的通过软件指令来进行操作。 同时python运行pyspark的时候也会使用到java的环境变量,配置错误会导致pyspark运行失败。
我都是把变量放.zprofile的,会比较省事

1.1.2 home-brew

安装过程涉及安装和删除,使用homebrew能解决很多不必要的问题。比如启动postgres

1.1.3 java

macos-sonoma 14.6.1自带hotspot 23版本,但是不满足spark运行环境要求,实测安装java openjdk 1.8 的版本可以使用。

1.1.4 ssh

目测是提交任务时候依赖,需要在~/.ssh 下面创建公钥、密钥同时把公钥备份重新命名才能让hadoop或spark使用到。

1.1.5 hive、spark、hadoop

需要解决的是账号密码、端口等配置,配置正确才能建立通讯。

1.2 Python 环境

1.2.1 miniforge3

python虚拟环境管理,因为公司不允许使用conda,所以用这个代替。 这个软件可以解决版本依赖冲突问题,同时管理python环境也很方便。 python开发环境和airflow 需要使用相同的python环境。

1.2.2 airflow

相当于python的一个组件,调用命令以后就能运行服务。python 代码里也会引用到这个组件。
写好的代码放到 airflow 组件的根目录下的 dags目录下就能被airflow识别。 代码文件复制过去后就会自动刷新调度任务。 可以在airflow上触发调度任务,验证执行结果。

1.2.3 python 开发环境

调试过程就能直接读到airflow的变量数据, 也可以调用pythonspark功能做调试。但是调试airflow不会把任务提交到airflow上。
所以验证要分两个阶段。

  1. 单独测试调度任务的逻辑 ,如果使用到了python 函数做任务的,参数需要自己设置一下传入。对使用xcom_push的还没实践过。
  2. 测试airflow dag代码逻辑。 验证就是运行有没有报错,变量取值是否正确。 任务依赖关系还得在airflow页面上查看。

2 安装步骤

经过反复调试成功,可能有些细节忘了。
如有遇到问题可以评论回复。或自行chat-gpt
有些服务启动会导致终端不能再输入指令了,command + T 创建新终端执行新指令,然后 source ~/.zprofile 更新环境变量即可

2.1 mac环境

2.1.1 homebrew

没有安装就用下面指令安装,打开终端
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
安装成功以后终端运行brew 有下面提示即可
在这里插入图片描述

2.1.2 ssh

  • cd ~/.ssh
  • ssh-keygen -t rsa -b 4096 -C “your_email@example.com” 创建公钥
  • cat id_rsa.pub >> authorized_keys 复制公钥
  • sudo systemsetup -setremotelogin on 启动ssh服务

2.1.3 安装java 1.8

  • 执行指令 brew install openjdk@8
  • export JAVA_HOME=$(/usr/libexec/java_home -v 1.8) >> ~/.zprofile #这种方式不用自己去找java的目录
  • source ~/.zprofile
  • java -version #如果有打印java信息就安装成功了

2.1.4 安装postgres

  • brew install postgresql@14 #指定版本吧,其他版本没试过
  • 目录可能是/usr/local/var/postgresql@14、/opt/homebrew/opt/postgresql@14、/usr/local/opt/postgresql@14 验证一下即可,也可能没有@14,确认以后修改环境变量
  • export PATH=“/opt/homebrew/opt/postgresql@14/bin:$PATH” >> ~/.zprofile
  • source ~/.zprofile
  • initdb /opt/homebrew/var/postgresql@14 初始化数据库, 可能没有@14,我装的都没有@14结尾
  • brew services start postgresql@14 启动服务
  • brew services list 验证服务是否启动
  • psql postgres 登录数据库
  • 创建hive用户信息
  • CREATE DATABASE hive;
  • CREATE USER hiveuser WITH PASSWORD ‘hivepassword’;
  • GRANT ALL PRIVILEGES ON DATABASE hive TO hiveuser;
  • \q 或者control + c 退出
  • psql -U hiveuser -d hive -h localhost -p 5432 登录hiveuser账号,查看

2.1.5 安装hadoop

  • brew install hadoop
  • export HADOOP_HOME=/opt/homebrew/opt/hadoop/libexec >> ~/.zprofile
  • export PATH= H A D O O P H O M E / b i n : HADOOP_HOME/bin: HADOOPHOME/bin:PATH >> ~/.zprofile
  • 把下面环境变量写到 ~/.zprofile 文件里
export HADOOP_COMMON_HOME=/usr/local/opt/hadoop/libexec 或者 /opt/homebrew/opt/hadoop/libexec 看实际安装路径
export HADOOP_HOME=$HADOOP_COMMON_HOME
export HADOOP_HDFS_HOME=$HADOOP_COMMON_HOME
export HADOOP_MAPRED_HOME=$HADOOP_COMMON_HOME
export HADOOP_YARN_HOME=$HADOOP_COMMON_HOME
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
# 指定用当前用户启动hdfs 就不用单独创建hdfs了
export HADOOP_NAMENODE_USER={mac登录用户的名字}
export HADOOP_DATANODE_USER={mac登录用户的名字}
  • source ~/.zprofile
  • hadoop version 查看安装情况
  • start-dfs.sh 启动hadoop组件
  • start-yarn.sh
  • jps 查看是否启动成功,应该有ResourceManager
  • HDFS Web 界面:http://localhost:9870
  • YARN Web 界面:http://localhost:8088
  • cd $HADOOP_HOME/etc/hadoop 进入到配置页面
  • vim core-site.xml 我是这样配置的
 <configuration>
<property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>
  • vim hdfs-site.xml
<configuration>
   <property>
    <name>dfs.namenode.name.dir</name>
    <value>/Users/?自己的用户名?/hdfs/hadoop/tmp/dfs/name</value>
</property>
<property>
    <name>dfs.datanode.data.dir</name>
    <value>/Users/?自己的用户名?/hdfs/hadoop/tmp/dfs/data</value>
</property>
<property>
        <name>dfs.namenode.http-address</name>
        <value>localhost:9101</value>
</property>
<property>
        <name>dfs.datanode.http.address</name>
        <value>localhost:9102</value>
</property>

</configuration>
  • hdfs namenode 终端启动
  • hdfs datanode

2.1.6 安装hive

  • brew install apache-hive
  • export HIVE_HOME=/opt/homebrew/opt/apache-hive/libexec >> ~/.zprofile
  • export PATH= H I V E H O M E / b i n : HIVE_HOME/bin: HIVEHOME/bin:PATH >> ~/.zprofile
  • source ~/.zprofile
  • 下载postgres驱动 https://jdbc.postgresql.org/download/ 。我使用的是42.7.4-java8 版本。 拷贝到$HIVE_HOME/lib目录
  • 修改 $HIVE_HOME/conf/hive-site.xml 配置 使用postgres。 拷贝出来到文本编辑器里改方便。根据name来改
<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:postgresql://localhost:5432/hive</value>
    <description>
      JDBC connect string for a JDBC metastore.
      To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
      For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
    </description>
  </property>

<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>org.postgresql.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
  </property>
<property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hiveuser</value>
    <description>Username to use against metastore database</description>
  </property>
<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>hivepassword</value>
    <description>The password for the database user.</description>
</property>
<property>
    <name>hive.metastore.uris</name>
    <value>thrift://localhost:9083</value>
    <description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
  </property>
  • schematool -dbType postgres -initSchema 初始化数据库
  • hive --service metastore 启动metastore服务
  • hive --version 查看安装成功
  • hive 启动, 如果hadoop的 namenode、datanode没启动会报错。
  • show databases; --如果正常就可以一顿操作了
  • PS: hive的xml配置可能有问题,需要手动删掉特殊字符,3215行

2.1.7 安装spark

  • brew install apache-spark
  • export SPARK_HOME=/opt/homebrew/opt/apache-spark/libexec >> ~/.zprofile
  • export PATH= S P A R K H O M E / b i n : SPARK_HOME/bin: SPARKHOME/bin:PATH >> ~/.zprofile
  • source ~/.zprofile
  • cp $HIVE_HOME/conf/hive-site.xml $SPARK_HOME/conf/ 把hive配置复制到spark
  • /usr/local/opt/apache-spark/libexec/sbin/stop-all.sh 停止spark
  • /usr/local/opt/apache-spark/libexec/sbin/start-all.sh 启动spark
  • spark-shell --version 验证安装
  • spark.sql(“SHOW TABLES”).show() 执行看看是否能查到hive表

2.1.8 启动服务查看

  • 终端输入jps 查看启动的服务有哪些
  • 也可通过网页查看spark、 hadoop的情况
  • 在这里插入图片描述

2.2 python环境安装

这个相对简单也独立

2.2.1 miniforge3

  • https://github.com/conda-forge/miniforge 可以自己下载安装,指定目录 我使用的是 ~/miniforge 好找
  • brew install miniforge 这个命令直接安装,之后复制/usr/local/miniforge3 到自己想要的目录。
  • echo ‘export PATH=“/usr/local/miniforge3/bin:$PATH”’ >> ~/.zprofile 这个命令把miniforge,如果修改了目录自己改下路径
  • source ~/.zprofile 更新环境变量
  • conda --version 查看是否安装成功
  • conda init zsh 初始化conda环境, 这个命令会把初始化代码放到~/.bashrc 或者 ~/.zshrc 里,复制出来到 ~/.zprofile
  • conda create -n data_dev python=3.8 创建一个3.8的环境 环境名字data_dev可以自己改
  • conda activate data_dev 激活环境,在这个环境里安装python组件

2.2.2 airflow 安装

  • conda install apache-airflow==1.10.12 安装指定版本airflow
  • airflow initdb db初始化,1.10x版本
  • airflow scheduler 启动调度
  • airflow webserver --port 8081 启动页面
  • http://localhost:8081 访问页面
  • 安装目录在: xxx /miniforge3/envs/data_dev/lib/python3.8/site-packages/airflow, data_dev跟conda创建的环境名一样
  • 写完的脚本放到${AIRFLOW_HOME}/dags/下。这里我配置的AIRFLOW_HOME=上一步的安装路径
  • ps 使用3.8 可以用conda 安装1.10.12的airflow,可能遇到itsdangerous版本问题,降级 conda install itsdangerous=1.1.0即可
  • ps airflow默认使用sqlite3的数据存储方式,似乎不需要安装这个数据库。

2.2.3 python环境

  • 指定xxx /miniforge3/envs/data_dev/ 目录下的python环境作为pycharm的python解释器
  • 再安装一个pyspark 就行
  • 可以直接运行python代码了

3 附录

3.1 启动服务指令

# 可以开启多个终端执行任务
#启动ssh hadoop依赖
# sudo launchctl stop com.openssh.sshd
# sudo launchctl start com.openssh.sshd
# 关闭ssh服务
sudo systemsetup -setremotelogin off 
# 开启ssh服务
sudo systemsetup -setremotelogin on

#停止postgres
brew services stop postgresql 
#启用
brew services start postgresql 

# hadoop 集群服务
/usr/local/opt/hadoop/libexec/sbin/stop-dfs.sh 
/usr/local/opt/hadoop/libexec/sbin/stop-yarn.sh
/usr/local/opt/hadoop/libexec/sbin/start-dfs.sh 
/usr/local/opt/hadoop/libexec/sbin/start-yarn.sh

#启动hdfs
hdfs namenode 
hdfs datanode  
#启动hive元数据管理
hive --service metastore 
# 启动spark
/usr/local/opt/apache-spark/libexec/sbin/stop-all.sh
/usr/local/opt/apache-spark/libexec/sbin/start-all.sh


#启动airflow在 conda环境执行 data_dev
conda activate data_dev
pkill -f airflow
airflow scheduler 
airflow web --port 8081 

#jps查看服务 运行的hadoop、hive
jps
#查看postgres服务
brew services list

3.2 环境变量配置

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
export HIVE_HOME=/Users/{mac登录用户的名字}/apache-hive-3.1.2-bin
export PATH=$HIVE_HOME/bin:$PATH
export JAVA_OPTS="-Djava.io.tmpdir=/Users/{mac登录用户的名字}/logs -Duser.name={mac登录用户的名字}"
export SPARK_HOME=/usr/local/opt/apache-spark/libexec
export PATH=$PATH:$SPARK_HOME/bin
export HADOOP_COMMON_HOME=/usr/local/opt/hadoop/libexec
export HADOOP_HOME=$HADOOP_COMMON_HOME
export HADOOP_HDFS_HOME=$HADOOP_COMMON_HOME
export HADOOP_MAPRED_HOME=$HADOOP_COMMON_HOME
export HADOOP_YARN_HOME=$HADOOP_COMMON_HOME
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
# 指定用当前用户启动hdfs 就不用单独创建hdfs了
export HADOOP_NAMENODE_USER={mac登录用户的名字}
export HADOOP_DATANODE_USER={mac登录用户的名字}
#export SPARK_SUBMIT_OPTS="-Djava.security.manager=allow" 

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/Users/{mac登录用户的名字}/miniforge3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/Users/{mac登录用户的名字}/miniforge3/etc/profile.d/conda.sh" ]; then
        . "/Users/yuwang.lin/miniforge3/etc/profile.d/conda.sh"
    else
        export PATH="/Users/{mac登录用户的名字}/miniforge3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<
#这个home因为会放cfg文件,所以不能配置为airflow所在目录
export AIRFLOW_DIR="/Users/{mac登录用户的名字}/miniforge3/envs/data_dev/lib/python3.8/site-packages/airflow"
export AIRFLOW_HOME="/Users/{mac登录用户的名字}/airflow"
export POSTGRESQL_HOME="/usr/local/var/postgresql@14"
export PATH=$POSTGRESQL_HOME/bin:$PATH
export PGDATA='/usr/local/pgsql/data'
~                                                                                                                                         
~                                             

4 参考文献

  • hdfs
  • ssh 启动

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1.7 JS性能优化

从输入url到页面加载完成都做了些什么 输入 URL - 资源定位符 http://www.zhaowa.com - http 协议 域名解析 https://www.zhaowa.com > ip 1. 切HOST&#xff1f; > 浏览器缓存映射、系统、路由、运营商、根服务器 2. 实际的静态文件存放&#xff1f; 大流量 > 多个…

【Ansible常用命令+模块+Playbook+Roles】

Ansible 一、命令1.1 常用命令 二、模块2.1 shell模块2.2 复制模块2.3 用户模块2.4 软件包管理2.5 服务模块2.6 文件模块2.7 收集模块2.8 fetch2.9 cron2.10 group2.11 script2.12 unarchive 三、YAML Roles3.1 目录结构3.2 文件内容tasks/main.yamlnginx.conf.j2vars/main.yam…

Oracle19C AWR报告分析之Wait Classes by Total Wait Time

Oracle19C AWR报告分析之Wait Classes by Total Wait Time 一、分析数据二、详细分析2.1 指标参数介绍2.2 数据库性能分析2.3 综合性能评估 在 Oracle 数据库的 AWR 报告中&#xff0c;Wait Classes by Total Wait Time 是评估数据库性能的重要部分。本篇文章主要是介绍指标参数…

嵌入式硬件电子电路设计(五)MOS管详解(NMOS、PMOS、三极管跟mos管的区别)

引言&#xff1a;在我们的日常使用中&#xff0c;MOS就是个纯粹的电子开关&#xff0c;虽然MOS管也有放大作用&#xff0c;但是几乎用不到&#xff0c;只用它的开关作用&#xff0c;一般的电机驱动&#xff0c;开关电源&#xff0c;逆变器等大功率设备&#xff0c;全部使用MOS管…

问题大集-01-kafka问题

1、问题&#xff1a;Windows下启动单机kafka出现&#xff1a;系统找不到指定路径 解决&#xff1a; 是kafka不能识别本机的java环境&#xff08;JVM&#xff09;&#xff0c;故需要指定java路径&#xff0c; 进入kafka路径下的\bin\windows&#xff0c;找到&#xff1a;kafk…

C++ 的发展

目录 C 的发展总结&#xff1a;​编辑 1. C 的早期发展&#xff08;1979-1985&#xff09; 2. C 标准化过程&#xff08;1985-1998&#xff09; 3. C 标准演化&#xff08;2003-2011&#xff09; 4. C11&#xff08;2011年&#xff09; 5. C14&#xff08;2014年&#xf…

Ubuntu问题 -- 允许ssh使用root用户登陆

目的 新重装的系统, 普通用户可以使用ssh登陆服务器, 但是root不能使用ssh登陆 方法 vim 编辑ssh配置文件 sudo vim /etc/ssh/sshd_config找到 PermitRootLogin 这一行, 把后面值改成 yes 重启ssh sudo service sshd restart然后使用root账号登陆即可

HarmonyOS4+NEXT星河版入门与项目实战--------开发工具与环境准备

文章目录 1、熟悉鸿蒙官网1、打开官网2、下载 DevEco Studio3、HarmonyOS 资源库4、开发指南与API 2、安装 DevEco Studio1、软件安装2、配置开发工具 1、熟悉鸿蒙官网 1、打开官网 百度搜索 鸿蒙开发者官网 点击进入开发者官网&#xff0c;点击开发&#xff0c;可以看到各种…

使用 start-local 脚本在本地运行 Elasticsearch

警告&#xff1a;请勿将这些说明用于生产部署 本页上的说明仅适用于本地开发。请勿将此配置用于生产部署&#xff0c;因为它不安全。请参阅部署选项以获取生产部署选项列表。 使用 start-local 脚本在 Docker 中快速设置 Elasticsearch 和 Kibana 以进行本地开发或测试。 此设…

【大数据学习 | HBASE高级】hbase-phoenix 与二次索引应用

1. hbase-phoenix的应用 1.1 概述&#xff1a; 上面我们学会了hbase的操作和原理&#xff0c;以及外部集成的mr的计算方式&#xff0c;但是我们在使用hbase的时候&#xff0c;有的时候我们要直接操作hbase做部分数据的查询和插入&#xff0c;这种原生的方式操作在工作过程中还…

Nginx server_name配置错误导致路由upstream超时问题

一、问题描述 某次本平台和外部平台接口调用&#xff0c;同样Nginx location配置&#xff0c;测试环境调用正常&#xff0c;生产环境调用返回失败&#xff1b; 相关链接&#xff1a;Nginx官方文档、server_name、How nginx processes a request 二、排查处理 1&#xff09…

Android Studio 控制台输出的中文显示乱码

1. Android Studio 控制台输出的中文显示乱码 1.1. 问题 安卓在调试阶段&#xff0c;需要查看app运行时的输出信息、出错提示信息。乱码&#xff0c;会极大的阻碍开发者前进的信心&#xff0c;不能及时的根据提示信息定位问题&#xff0c;因此我们需要查看没有乱码的打印信息。…

linux001.在Oracle VM VirtualBox中ubuntu虚拟系统扩容

1.打开终端切换到virtualBox安装目录 2.输入命令扩容 如上终端中的代码解释&#xff1a; D:\Program Files\Oracle\VirtualBox>.\VBoxManage modifyhd D:\ubuntu18.04\Ubuntu18.04\Ubuntu18.04.vdi --resize 40960如上代码说明&#xff1a;D:\Program Files\Oracle\Virtual…

【桌面应用程序】Vue-Electron 环境构建、打包与测试(Windows)

前言 Vue 与 Electron 环境构建、打包与测试。 目录 前言 一、基本环境准备 二、配置npm源 三、创建Vue项目 四、添加Electron支持 五、应用启动 ​六、添加UI框架 ElementUI ​七、打包 一、基本环境准备 npm版本&#xff1a;8.6.0node版本&#xff1a;v18.0.0Vue/…

C#获取视频第一帧_腾讯云媒体处理获取视频第一帧

一、 使用步骤&#xff1a; 第一步、腾讯云开启万象 第二步、安装Tencent.QCloud.Cos.Sdk 包 第三步、修改 腾讯云配置 图片存储目录配置 第四步、执行获取图片并保存 二、封装代码 using System.Text; using System.Threading.Tasks;using COSXML.Model.CI; using COSXML.A…

Jav项目实战II基于微信小程序的助农扶贫的设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在当前社会…

ffmpeg+D3D实现的MFC音视频播放器,支持录像、截图、音视频播放、码流信息显示等功能

一、简介 本播放器是在vs2019 x86下开发&#xff0c;通过ffmpeg实现拉流解码功能&#xff0c;通过D3D实现视频的渲染功能。截图功能采用libjpeg实现&#xff0c;可以截取jpg图片&#xff0c;图片的默认保存路径是在C:\MYRecPath中。录像功能采用封装好的类Mp4Record实现&#x…

springboot 之 整合springdoc2.6 (swagger 3)

版本 springboot 3.3.5 jdk 17 springdoc 2.6.0 依赖pom <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.6.0</version> </dependency>注解对比…

ADS学习笔记 5. 微带天线设计

基于ADS2023 update2 参考书籍&#xff1a;卢益锋老师《ADS射频电路设计与仿真学习笔记》 更多笔记&#xff1a;ADS学习笔记 1. 功率放大器设计ADS学习笔记 2. 低噪声放大器设计ADS学习笔记 3. 功分器设计ADS学习笔记 4. 微带分支定向耦合器设计 目录 0、设计指标 1、微带…

TypeORM在Node.js中的高级应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 TypeORM在Node.js中的高级应用 TypeORM在Node.js中的高级应用 TypeORM在Node.js中的高级应用 引言 TypeORM 基本概念 1. 实体&am…