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

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 参考文献

相关推荐
大数据编程之光20 分钟前
Python版Spark Structured Streaming编程指南
开发语言·python·spark
B站计算机毕业设计超人3 小时前
计算机毕业设计Hadoop+大模型空气质量预测 空气质量可视化 空气质量分析 空气质量爬虫 Spark 机器学习 深度学习 Django 大模型
人工智能·hadoop·爬虫·python·深度学习·spark·数据可视化
PersistJiao6 小时前
Spark RDD各种join算子从源码层分析实现方式
spark·rdd·算子·join
PersistJiao6 小时前
Spark RDD 的 compute 方法
大数据·spark·rdd·compute
B站计算机毕业设计超人7 小时前
计算机毕业设计Hive+Spark空气质量预测 空气质量可视化 空气质量分析 空气质量爬虫 Hadoop 机器学习 深度学习 Django 大模型
hive·hadoop·爬虫·深度学习·机器学习·spark·数据可视化
Hacker_Oldv9 小时前
spark性能优化调优指导性文件
大数据·性能优化·spark
武子康11 小时前
大数据-226 离线数仓 - Flume 优化配置 自定义拦截器 拦截原理 了 拦截器实现 Java
java·大数据·数据仓库·hive·hadoop·数据挖掘·flume
Francek Chen19 小时前
【大数据技术基础 | 实验十】Hive实验:部署Hive
大数据·数据仓库·hive·hadoop·分布式
すあ20 小时前
Spark:大数据处理的强大引擎
大数据·分布式·spark