离线数仓搭建流程以及遇到的问题Hadoop3.3.1-hive3.1.2-spark 3.3.1

       

目录

简言

数仓选型

前期准备

更改三个节点主机名:

新增用户组以及用户:

配置互信

JDK安装

mysql安装

Zookeeper3.8安装

Hadoop3.3.1搭建

Hive3.1.3搭建

Spark3.3.1安装

想在idea上开发spark的话

Kettle在Windows版本节点安装以及连接hive、mysql、hadoop

安装 dolphinscheduler3.1.3

dolphinscheduler的使用

结语


简言

        搭建背景:公司想要转型数字化, 想要发展BI系统, 就需要从0开始搭建数仓进行数据整合, 数据治理, 也就是ETL的过程, 我之前并没有做过这些, 但是经过慢慢摸索, 从网上搜索文章, 进行组件安装测试, 以及许多bug的解决, 最后搭建了一个基础数仓架构, 感谢网上的那些大佬, 特写此文来记载我数仓的搭建流程以及遇到的问题.

以下是整体流程的简述

        选型:先选择组件  根据业务需求  组件之间版本的兼容    

        搭建: 考虑搭建顺序, 主要根据组件之间的依赖,比如说hive依赖hadoop, 而且我使用的是spark on hive 所以spark又依赖hive

        启动测试: 每个组件搭建之后启动,测试其功能

        调优: 配置调优

数仓选型

        结合业务背景:需要从不同的数据源里面有mysql、oracle、sas还有excel的形式,进行数据拉取,拉取到hadoop集群,然后使用hive进行数据清洗, 但是后面我觉得hive数据处理的时间太长了,决定使用spark on hive模式进行处理,最后还需要将结果表数据导出至mysql,然后使用帆软进行数据报表输出。

        所以我最后选择的架构是,如下图所示:

         然后就是版本选择了, 因为我喜欢高版本的(毕竟功能多),所以我选择的数仓架构组件版本以及搭建顺序如下:

zookeeper3.4.6  -> mysql 5.7 -> kettle 8 -> Hadoop3.3.1 高可用-> hive3.1.2 -> spark 3.3.1  -> dolphinschedule3.1.3

        我准备了三台机子,每个节点搭建的角色如下:

前期准备

        由于我这三个节点的防火墙已经关闭了,建议把各个节点的防火墙也关了, 还要设置成开机停止自启

更改三个节点主机名:

  1. hostnamectl set-hostname <修改后主机名字>
  2. 重启reboot

新增用户组以及用户:

每个节点总共新增两个用户 mysql以及hadoop,以hadoop为例

  1. groupadd hadoop
  2. useradd -d /home/hadoop -m hadoop -s /bin/bash -g Hadoop
  3. passwd Hadoop

配置互信

以使用root用户进行互信开始,使用root进行以下操作

  1. 执行命令ssh-keygen -P ''执行后会提示输入文件保存路径,直接回车即可,文件默认在当前用户的.ssh文件夹下。
  2. 切换到路径cd ~/.ssh
  3. 执行命令ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.104.246,执行后按照提示输入服务器root用户密码
  4. 不同节点都要执行一遍

还需要把hadoop用户的互信也完成

JDK安装

查看JDK软件包列表

yum search java | grep -i
yum install -y java-1.8.0-openjdk-devel.x86_64

查看JDK是否安装成功

java -version

JDK默认安装路径/usr/lib/jvm

在/etc/profile文件添加如下命令

JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64

PATH=$PATH:$JAVA_HOME/bin  

export JAVA_HOME PATH

保存关闭profile文件,执行如下命令生效

source /etc/profile

mysql安装

这个可以参考其他博主比如的安装,(50条消息) mysql-5.7 Linux安装教程_linux安装mysql5.7_路灯下的程序员的博客-CSDN博客

讲的很详细,按照这个安装我没出现问题

Zookeeper3.8安装

这个可以参考:

zookeeper3.8安装

记一下启停以及查看状态的命令:

/home/software/zookeeper-3.8.0/bin/zkServer.sh start|stop|status

扩展:编写shell脚本 一键脚本启动。

本质:在node1机器上执行shell脚本,由==shell程序通过ssh免密登录==到各个机器上帮助执行命令。脚本具体路径你们自己决定

一键关闭脚本

[root@node1 ~]# vim stopZk.sh
 
#!/bin/bash
hosts=(node1 node2 node3)
for host in ${hosts[*]}
do
ssh $host "/export/server/zookeeper/bin/zkServer.sh stop"
done

一键启动脚本

[root@node1 ~]# vim startZk.sh
 
#!/bin/bash
hosts=(node1 node2 node3)
for host in ${hosts[*]}
do
ssh $host "source /etc/profile;/export/server/zookeeper/bin/zkServer.sh start"
done

注意:

1. 关闭java进程时候 根据进程号 直接杀死即可就可以关闭。启动java进程的时候 需要JDK

2. shell程序ssh登录的时候不会自动加载/etc/profile 需要shell程序中自己加载。

Hadoop3.3.1搭建

        这个我是参考(52条消息) Hadoop3_Java朱老师的博客-CSDN博客这位老师的, 推荐哈, 很详细

        其中四个配置文件推荐看我下面的, 我进行了补充了的

core-site.xml

<configuration>
<!--配置namenode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/hadoop_data/tmp</value>
</property>
<!--配置root(超级用户)允许通过代理访问的主机节点-->
<property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
</property>
<!--配置root(超级用户)允许通过代理用户所属组-->
<property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
</property>
</configuration>

hdfs-site.xml配置

<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node3:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file: /home/hadoop/hadoop_data/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file: /home/hadoop/hadoop_data/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>

 yarn-site.xml

<configuration>
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node2</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://node1:19888/jobhistory/logs</value>
</property>
<property>
<!--日志聚合hdfs存储路径-->
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/tmp/logs</value>
</property>
<!-- 设置日志保留时间为 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>

 mapred-site.xml

<configuration>
	<property><name>mapreduce.framework.name</name>
	<value>yarn</value>
</property>
<property>
	<name>mapreduce.jobhistory.address</name>
	<value>node1:10020</value>
</property>
<property>
	<name>mapreduce.jobhistory.webapp.address</name>
	<value>node1:19888</value>
</property>
</configuration>

最后hadoop启动顺序是:

        先在node1主节点启动 start-dfs.sh之后再在规划的resourcemanager节点node2上启动yarn集群 start-yarn.sh。

关闭时, 先在node2 执行stop-yarn.sh 再去node1执行stop-dfs.sh

当然也可以写个启动脚本.

Hive3.1.3搭建

具体的搭建步骤也是参考(52条消息) Hive3详细教程(一)Hive3+Hadoop3环境安装_Java朱老师的博客-CSDN博客 这位老师的

其中hive的配置文件需要按照下面来修改一下:

hive-site.xml

<configuration>
  <!-- jdbc  URL -->
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
      <!--规划mysql中存储元数据的数据库名为metastore,当初始化数据时不存在时自动创建-->
    <value>jdbc:mysql://node1:3306/metastore?createDatabaseIfNotExist=true&amp;useSSL=false</value>
  </property>
  <!-- jdbc  Driver-->
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
  </property>
  <!--数据库用户名-->
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>mysql</value>
  </property>
  <!--数据库密码-->
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>*******</value>
  </property>
 <!-- H2S运行绑定host -->
<property>
    <name>hive.server2.thrift.bind.host</name>
    <value>node1</value>
</property>

<!-- 远程模式部署metastore metastore地址 -->
<property>
  <name>hive.metastore.uris</name>
    <value>thrift://node1:9083</value>
</property>
  <!-- Hive 元数据存储版本的验证 -->
  <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
  </property>
  <!--元数据存储授权-->
 <property>
   <name>hive.metastore.event.db.notification.api.auth</name>
   <value>false</value>
 </property>
<!-- Hive 默认在 HDFS 的工作目录 -->
  <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
 </property>
<property>
        <name>hive.server2.thrift.port</name>
        <value>10000</value>
    </property>
<property>
     <name>hive.server2.enable.doAs</name>
      <value>false</value>
  </property>
</configuration>

搭建完成之后开启metastore以及hiveserver2
命令是:        

nohup hive --service metastore &
nohup hive --service hiveserver2 &

分别开启, 这样就可以使用外部软件链接hive了, 比如dbeaver等等, 但是可能需要稍等一下才能连接,  等hiveserver2完全启动

启动成功的标志是输入jps, 出现两个RunJar进程

Spark3.3.1安装

由于我不仅需要安装spark还需要配置成spark on hive, 所以参考了spark3.3.1安装 以及spark-on-hive

注意在安装spark的时候, 其中的两个配置我做了一下修改:

spark-defaults.conf:

spark.master spark://node1:7077
spark.yarn.historyServer.address node1:18080
spark.eventLog.enabled           true
spark.eventLog.dir               hdfs://node1:9000//user/spark/log
spark.serializer                 org.apache.spark.serializer.KryoSerializer
spark.driver.memory              5g
spark.executor.extraJavaOptions  -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"

spark-env.sh:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-1.el7_9.x86_64
export SPARK_CONF_DIR=/home/software/spark-3.3.1/conf
export HADOOP_HOME=/home/software/hadoop
export HADOOP_CONF_DIR=/home/software/hadoop/etc/hadoop
export YARN_CONF_DIR=/home/software/hadoop/etc/hadoop
export HIVE_HOME=/home/software/hive
export SCALA_HOME=/home/software/scala-2.13.10
# 指定spark的master
export SPARK_MASTER_HOST=node1
# 指定spark可从hdfs上读写数据
export SPARK_DIST_CLASSPATH=$(/home/software/hadoop/bin/hadoop classpath)
# 解除运行时无法加载本地hadoop库的提醒
export LD_LIBRARY_PATH=/home/software/hadoop/lib/native
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=3  -Dspark.history.fs.logDirectory=hdfs://node1:9000//user/spark/log"

注意!!!!!

        配置完之后还需要将hive下面的hive-site.xml复制到spark的conf目录下面,包括hadoop的etc下面的core-site.xml等等四个文件都放进去

启动

start-master.sh
start-workers.sh
start-history-server.sh

停止顺序相反

 注意:  spark的jobhistoryserver启动之后打开jobhistoryserver的UI界面会出现没有显示任务,这个是正常的, 需要提交一个任务之后就会正常(我一开始以为是真的报错, 找了好久,晕死。。。)

想在idea上开发spark的话

        可以参考idea开发spark

出现的问题 : 将代码打包到linux之后可能会出现问题, 但是日志也找不到报错点, 此时可以通过

##后面跟着的是任务的applicationID,可以在yarn日志找到
yarn logs -applicationId application_1681894239134_0016

 来查看具体出错的原因

我出现的路径问题 需要修改包的标记:

我发现是因为我的idea包的标记问题,可以参考我下面的来修改, java和scala标记上Sources Root,

 然后在你需要运行的任务类右键->Copy Path ->Copy Reference 复制相对路径 再去运行spark-submit

记一下我所用的spark-submit代码

/home/software/spark-3.3.1/bin/spark-submit \
                --master yarn \
                --deploy-mode client \
                --class com.xhgj.bigdata.firstProject.Test \
                --num-executors 4 \
                --executor-memory 6g \
                --executor-cores 2  \
                /home/project/ykb/command/data_analysis_xh_ceshi-1.0.jar

此外:

完整的Pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>org.example</groupId>
   <artifactId>data_analysis_xh</artifactId>
   <version>1.0-SNAPSHOT</version>

   <properties>
       <maven.compiler.source>8</maven.compiler.source>
       <maven.compiler.target>8</maven.compiler.target>
       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
       <scala.version>2.13.10</scala.version>
       <hadoop.version>3.3.1</hadoop.version>
       <spark.version>3.3.1</spark.version>
       <log4j.version>1.2.17</log4j.version>
   </properties>
   <dependencies>        <!--Scala-->

   <dependency>
       <groupId>org.scala-lang</groupId>
       <artifactId>scala-library</artifactId>
       <version>${scala.version}</version>
   </dependency>
   <!--Spark-->
   <dependency>
       <groupId>org.apache.spark</groupId>
       <artifactId>spark-core_2.13</artifactId>
       <version>${spark.version}</version>
   </dependency>
   <dependency>
       <groupId>org.apache.spark</groupId>
       <artifactId>spark-sql_2.13</artifactId>
       <version>${spark.version}</version>
   </dependency>
   <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>5.1.34</version>
   </dependency>
   <!--Hadoop-->
   <dependency>
       <groupId>org.apache.hadoop</groupId>
       <artifactId>hadoop-client</artifactId>
       <version>${hadoop.version}</version>
   </dependency>

<!--        <dependency>-->
<!--            <groupId>org.slf4j</groupId>-->
<!--            <artifactId>slf4j-api</artifactId>-->
<!--            <version>1.7.21</version>-->
<!--        </dependency>-->
       <dependency>
           <groupId>org.apache.spark</groupId>
           <artifactId>spark-hive_2.13</artifactId>
           <version>${spark.version}</version>
       </dependency>

       <dependency>
           <groupId>org.scala-lang.modules</groupId>
           <artifactId>scala-parallel-collections_2.13</artifactId>
           <version>1.0.4</version>
       </dependency>

       <dependency>
           <groupId>com.twitter</groupId>
           <artifactId>chill_2.13</artifactId>
           <version>0.10.0</version>
       </dependency>

       <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>fastjson</artifactId>
           <version>1.2.36</version>
       </dependency>

       <dependency>
           <groupId>log4j</groupId>
           <artifactId>log4j</artifactId>
           <version>${log4j.version}</version>
       </dependency>

   </dependencies>

   <build>
       <outputDirectory>target/classes</outputDirectory>
       <testOutputDirectory>target/test-classes</testOutputDirectory>
       <!-- Maven 打包的包名 -->
       <finalName>data_analysis_xh-1.0</finalName>
       <resources>
           <resource>
               <directory>${project.basedir}/src/main/resources</directory>
           </resource>
       </resources>
       <!-- Maven 编译的插件 -->
       <plugins>
           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-compiler-plugin</artifactId>
               <version>3.0</version>
               <configuration>
                   <source>1.8</source>
                   <target>1.8</target>
                   <encoding>UTF-8</encoding>
               </configuration>
           </plugin>
           <plugin>
               <groupId>net.alchim31.maven</groupId>
               <artifactId>scala-maven-plugin</artifactId>
               <version>3.2.0</version>
               <executions>
                   <execution>
                       <goals>
                           <goal>compile</goal>
                           <goal>testCompile</goal>
                       </goals>
                   </execution>
               </executions>
           </plugin>
       </plugins>
   </build>

</project>

Maven需要下载  然后settings.xml需要设置到阿里云mvn仓库, 文件内容入下:

<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
	<pluginGroups>
	</pluginGroups>
	<proxies>
	</proxies>
	<servers>
	</servers>
	<mirrors>
		<mirror>
			<id>ali</id>
			<name>ali Maven</name>
			<mirrorOf>*</mirrorOf>
			<url>https://maven.aliyun.com/repository/public/</url>
		</mirror>
	</mirrors>
	<profiles>
	</profiles>
	<activeProfiles>
	</activeProfiles>
</settings>

有可能还会出现Class path contains multiple SLF4J bindings:

        这是因为引入的依赖有多个slf4j的实现 

        解决方法: 安装报错日志提醒的地址去删除其中的log4j-slf4j-impl 的jar包, 保留一个即可

spark日志级别的设置:  因为使用idea会打印很多的日志, 导致很难看, 就从网上查看, 发现修改log4j.properties就可以限制日志级别, 但是发现完全没有用, 照样出现大量INFO级别的日志

后面检查发现现在使用的spark3.3.1需要用log4j2.properties, 改了个文件名就好了, 真的很离谱. 至于在linux上日志级别的设置, 直接去安装目录下面的conf目录修改log4j2.properties内容即可(如果只有log4j2.properties.template,那就改个名字就好)

Kettle在Windows版本节点安装以及连接hive、mysql、hadoop

  • 先安装jdk
  • 安装kettle
  • kettle需要连接mysql还需要将mysql驱动包移到kettle的lib目录下面
  • kettle需要链接hive 需要将hive下jdbc目录下面的hive-jdbc-3.1.2-standalone.jar包放在kettle的lib目录下面,还有hive-site.xml放在

D:\pdi-ce-8.3.0.0-371\data-integration\plugins\pentaho-big-data-plugin\hadoop-configurations\hdp30下面, 还要将服务器hive安装路径下的lib目录中的所有hive开头的jar包下下来安装在

D:\pdi-ce-8.3.0.0-371\data-integration\plugins\pentaho-big-data-plugin\hadoop-configurations\hdp30\lib目录下(原来的删除)

  • 使用kettle连接hadoop需要 修改data-integration\plugins\pentaho-big-data-plugin\plugin.properties路径下面的plugin.properties将active.hadoop.configuration=hdp30写上,然后去服务器将相关配置文件下下来,替换

D:\pdi-ce-8.3.0.0-371\data-integration\plugins\pentaho-big-data-plugin\hadoop-configurations\hdp30目录下面的core-site.xml等四个文件
之后,新建hadoop clusters,里面hdfs的port要和core-site.xml一样 hostname也要一样

  •  直接写在hdfs会没有权限可以通过在Spoon.bat中添加

        在set OPT=这一行后面提添加内容: “-DHADOOP_USER_NAME=root

  • 要部署到linux,就直接把windows的包打包上传就行 
  • 在linux执行kettle的任务(需要提前给/home/software/pdi-ce-8.3.0.0-371/data-integration/目录下面所有sh文件执行权限
    1. 执行转换:/home/software/pdi-ce-8.3.0.0-371/data-integration/pan.sh -file /data/kettle_job/mysql2hdfs.ktr
    2. 执行作业:/home/software/pdi-ce-8.3.0.0-371/data-integration/pan.sh -file /data/kettle_job/mysql2hdfs.kjb

  1. Kettle 抽取Oracle或者MYSQL数据到HDFS发生串行(即数据量对不上等)

        在从Oracle或者MYSQL数据库拉取想要的数据至ODS层的时候,有时候会发现数据量对不上,数据的条数变多,这种情况下很有可能是数据库内容中有特殊字符导致,常见的导致数据串行的特殊字符有制表符(chr(9)),换行符(chr(10))和回车符(chr(13))。我们可以用replace函数去除oracle字符串中的特殊字符,其他数据库也是类似

修改表输入的SQL语句, 以下图为例

 使用replace的函数方法将数据进行清洗, 防止出现串行的情况发生

        还有一点, 就是由于导入至hive时间过长, 所以考虑直接将文件导入至hdfs的hive路径下, 此时需要再添加一个replace,将逗号都替换成其他不会影响值的符号

  •  kettle抽取hive数据到mysql出现 cannot be null 空值问题

在hive中有空字符串的字段在使用kettle进行数据拉取导入至mysql库时,会出现自动把字符串转换成null值的情况, 这样会导致一些mysql不能为null的字段报错,

解决方法:

        windows下: 前往C:\Users\用户名\.kettle路径下面找到kettle.properties配置文件, 进行编辑加入

KETTLE_EMPTY_STRING_DIFFERS_FROM_NULL=Y

     在Linux下: 前往安装kettle的用户下面的~目录, 找到.kettle目录, 编辑加入上面的配置

安装 dolphinscheduler3.1.3

 按照以下链接进行安装dolphinschedule安装以及官方文档

 最好根据自己系统参考这两个安装流程, 在安装之前先看看我列的注意事项:

  1. dolphinscheduler用户的ssh免密,按照上面第一个链接的来
  2. 初始化数据库按照官网的来
  3. 修改dolphinscheduler_env.sh中 SPRING_DATASOURCE_URL这个配置按照官网的来但是其中ip地址改成mysql所在的ip
  4. mysql-connector-java 驱动 (8.0.16)除了要放在api-server/libs 和 alert-server/libs 和 master-server/libs 和 worker-server/libs下面还需要放在tools/libs下面
  5. 用root启动之后就不要用dolphinscheduler启动了,除非去/tmp/dolphinscheduler/下面把对应日志删除
  6. Dolphinscheduler3.1.3需要的zookeeper版本是3.8.0,不然会报错

dolphinscheduler的使用

A. Dolphinscheduler3.1.3邮件告警模块的使用(52条消息) DolphinScheduler 进阶(告警通知)_dolphinscheduler告警_Alienware^的博客-CSDN博客

B. 在工作流实例中,点击执行的意思是现在立马执行,只有点击定时调度,再点上线,就是定时处理

C. 在执行shell脚本时通过${date}来获取外界传入的日期.

  

然后点击保存

  

这里要设计全局变量, 就是将刚刚那个参数设置值,注意这里$[yyyy-MM-dd-1]用的是方括号,而且是当前日期减一

D.补数就是是否需要补前几天日期的数据

DolphinScheduler的端口复用

        DolphinScheduler的端口复用是指在Worker节点进程退出时,没有及时地释放其占用的端口,导致下一次启动Worker节点时无法绑定到原先使用的端口。避免DolphinScheduler的端口复用,您可以执行以下操作:

        在配置文件conf/worker.properties中,设置worker.mode=stop参数。该参数可以使在Worker节点退出时,能够及时地将原先绑定的端口释放掉。当然,这样设置会在每次Worker节点进程退出后需要重新启动一个新的进程,会有一定的性能开销,因此需要根据实际情况进行权衡。如果您不想停止Worker节点的重启模式,可以通过其他方式在Worker节点退出时释放相应端口,例如通过crontab定时任务进行端口资源释放,或者使用运维工具进行进程监控和管理。

        另外,可以通过调整Worker节点的心跳间隔时间、线程池大小等参数,减轻Worker节点的压力,从而缓解端口复用问题。例如,可以通过在配置文件conf/worker.properties中配置worker.heartbeat.interval=60来调整Worker节点的心跳间隔时间,以便更及时地检测和处理Worker节点的异常情况。当然,在修改配置文件后,需要重启DolphinScheduler的Worker节点以使配置生效。

结语

至此, 这个基本的数仓架构搭建完毕, 接下来小伙伴们就是需要根据自己的需求进行spark  yarn   hadoop  hive mysql 的性能优化了.

再次感谢我文章里面链接的作者, 给我了很大的方便, 让我在短时间内搭建起来了这个简单的集群.

之后我也会分享我在开发过程中出现的问题以及好的想法, 感谢各位的查阅, 如果能帮到你们, 我很荣幸

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是 Hive on Spark 搭建过程的详细步骤: 1. 下载 HadoopSparkHive 的压缩包,并解压到指定目录下。 2. 配置环境变量,将 HadoopSparkHive 的 bin 目录添加到 PATH 路径中。 3. 修改 HadoopSpark 的配置文件。 - Hadoop 的配置文件:$HADOOP_HOME/etc/hadoop/core-site.xml、$HADOOP_HOME/etc/hadoop/hdfs-site.xml、$HADOOP_HOME/etc/hadoop/mapred-site.xml、$HADOOP_HOME/etc/hadoop/yarn-site.xml。 - Spark 的配置文件:$SPARK_HOME/conf/spark-env.sh、$SPARK_HOME/conf/spark-defaults.conf。 4. 配置 Hive on Spark。 - 将 $HIVE_HOME/lib 下的 spark 相关 jar 包复制到 $SPARK_HOME/jars 目录下。 - 修改 $HIVE_HOME/conf/hive-site.xml 文件,添加以下配置: ``` <property> <name>hive.execution.engine</name> <value>spark</value> </property> <property> <name>spark.master</name> <value>local[*]</value> <description>Master URL for the cluster manager.</description> </property> <property> <name>spark.submit.deployMode</name> <value>client</value> <description>Whether to launch the driver program locally ("client") or on one of the worker machines inside the cluster ("cluster")</description> </property> ``` 5. 启动 Spark 集群。 - 启动 Hadoop 集群。 - 启动 Spark 集群,可以使用以下命令: ``` $SPARK_HOME/sbin/start-all.sh ``` 6. 启动 Hive on Spark。 - 启动 HiveServer2,可以使用以下命令: ``` $HIVE_HOME/bin/hiveserver2 --service metastore & ``` - 启动 beeline 或 hive 命令行客户端,连接 HiveServer2。 7. 测试 Hive on Spark 是否正常运行。 - 在 beeline 或 hive 命令行客户端中执行以下命令: ``` CREATE TABLE test_spark(id INT, name STRING) USING org.apache.spark.sql.parquet OPTIONS (PATH '/tmp/test_spark'); INSERT INTO test_spark VALUES(1, 'test'); SELECT * FROM test_spark; ``` 如果查询结果正确,说明 Hive on Spark 搭建成功。 希望这些步骤能够帮助到你。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值