Seatunnel 2.3.0集群搭建(结合Hadoop+Flink)

举报
ludihu 发表于 2023/02/20 10:57:22 2023/02/20
【摘要】 Seatunnel集群的搭建依赖于Hadoop提供的Yarn组件,本文将介绍通过Hadoop和Flink搭建SeaTunnel集群。

安装步骤

前提

  1. Hadoop、Flink和SeaTunnel组件都离不开 java 运行环境,而且必须要安装 Java 8 或以上版本,才能正常运行上述组件。

  2. 根据各个组件的版本匹配要求, Hadoop、Flink和SeaTunnel组件的版本如下:

    • Hadoop 3.2.4
    • Flink 1.13.6
    • SeaTunnel 2.3.0
  3. 为实现集群部署,将采用三台服务器,网络和 Hadoop 节点的分配如下:

    节点 192.168.0.252:node1 192.168.0.228:node2 192.168.0.40:node3
    Hadoop NameNode+SecondaryNameNode+DataNode SecondaryNameNode+DataNode DataNode
    Yarn ResourceManager+NodeManager NodeManager NodeManager

实现免密登录

  1. 执行’vi /etc/hosts’,修改/etc/hosts 文件。

    因系统是按照从前往后的顺序读取 hosts 文件进行匹配,建议在文件头部增加以下内容,IP 值根据实际情况修改:

    192.168.0.40 node3 
    192.168.0.228 node2
    192.168.0.252 node1
    
  2. 生成公钥和私钥:

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

    然后敲(三个回车),就会在~/.ssh/目录下生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)

  3. 将公钥拷贝到要免密登录的目标机器上,~/.ssh 目录文件类型如下表所示:

    ssh-copy-id -i ~/.ssh/id_rsa.pub node1
    ssh-copy-id -i ~/.ssh/id_rsa.pub node2
    ssh-copy-id -i ~/.ssh/id_rsa.pub node3
    
    文件名 文件内容
    known_hosts
    记录 ssh 访问过计算机的公钥(public key)
    id_rsa 生成的私钥
    id_rsa.pub 生成的公钥
    authorized_keys 存放授权过得无密登录服务器公钥
  4. 验证功能,输入’ssh node2’,如下图所示,说明免密登录其他设备的功能已经开通。image.png

    如下指令可以将本地文件夹复制到目标服务器的当前路径,’-r’表示支持备份整个文件夹,'srcDrc’为本地待备份的文件路径,'node2’为目标服务器地址。

    scp -r srcDrc node2:`pwd`
    

安装组件

  • 安装部署 flink 1.13.6

    1. 输入’cd /usr/local’,进入/usr/local 路径,输入如下指令,下载 flink 组件

      wget https://archive.apache.org/dist/flink/flink-1.13.6
      
    2. 输入如下命令,解压 flink 组件

      tar -zxvf flink-1.13.6-bin-scala_2.11.tgz
      
    3. 修改 flink 配置文件

      • flink 配置文件位于/usr/local/flink-1.13.6/conf/flink-conf.xml,修改如下几个参数
      jobmanager.rpc.address: node1 #jobmanager位于node1节点
      web.submit.enable: true #支持网页端提交任务
      rest.bind-address: 0.0.0.0 # 支持其他节点访问flink web UI
      
      • 设置 jobmanager 节点,修改 masters 配置文件,增加以下内容:
      node1:8081
      
      • 设置 taskmanager 节点,修改 workers 配置文件,增加以下内容:
      node2 # taskmanager
      node3 # taskmanager
      
  • 安装部署 hadoop 3.2.4

    参考链接:hadoop 3.0 集群部署,超详细-Ali0th - 掘金 (juejin.cn)

    1. 输入’cd /usr/local’,进入/usr/local 路径,输入如下指令,下载 hadoop 组件

      wget http://archive.apache.org/dist/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz
      
    2. 输入如下命令,解压 hadoop 组件

      tar -zxvf hadoop-3.2.4.tar.gz
      
    3. 修改 hadoop 配置文件。

      配置文件位于/usr/local/hadoop-3.2.4/etc/hadoop。具体修改内容如下:

      • core-site.xml (所有文件的默认配置)

        
        <configuration>
        <property>
                <name>fs.default.name</name>
                <value>hdfs://node1:8020</value>
                <description>指定默认的访问地址以及端口号</description>
            </property>
            <property>
                <name>hadoop.tmp.dir</name>
                <value>/usr/local/data/hadoop/tmp</value>
                <description>其它临时目录的父目录,会被其它临时目录用到</description>
            </property>
            <property>
                 <name>io.file.buffer.size</name>
                 <value>131072</value>
                <description>在序列中使用的缓冲区大小</description>
            </property>
        </configuration>
        
        
      • hdfs-site.xml(hdfs 的默认配置)

      
      <configuration>
       <property>
              <name>dfs.replication</name>
              <value>3</value>
              <description>副本数,HDFS存储时的备份数量</description>
          </property>
          <property>
              <name>dfs.namenode.name.dir</name>
              <value>/usr/local/data/hadoop/name</value>
              <description>namenode临时文件所存放的目录</description>
          </property>
          <property>
              <name>dfs.datanode.data.dir</name>
              <value>/usr/local/data/hadoop/data</value>
              <description>datanode临时文件所存放的目录</description>
          </property>
          <property>
              <name>dfs.namenode.http-address</name>
              <value>node1:50070</value>
              <description>hdfs web 地址</description>
          </property>
      </configuration>
      
      
      • mapred-site.xml(mapreduce 的默认配置)
      
      <configuration>
          <property>
              <name>mapreduce.framework.name</name>
              <value>yarn</value>
              <description>告诉hadoop以后MR(Map/Reduce)运行在YARN上</description>
          </property>
      
         <property>
              <name>mapreduce.admin.user.env</name>
              <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
              <description>可以设置AM【AppMaster】端的环境变量,如果上面缺少配置,
              可能会造成mapreduce失败</description>
         </property>
      
         <property>
              <name>yarn.app.mapreduce.am.env</name>
              <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
              <description>可以设置AM【AppMaster】端的环境变量,如果上面缺少配置,
              可能会造成mapreduce失败</description>
         </property>
      </configuration>
      
      • workers(从节点)

        node1
        node2
        node3
        
      • yarn-site.xml:(yarn 的默认配置)

      <configuration>
      
      <!-- Site specific YARN configuration properties -->
      <!-- 关闭yarn内存检查 -->
      <property>
      <name>yarn.nodemanager.pmem-check-enabled</name>
          <value>false</value>
      </property>
      <property>
           <name>yarn.nodemanager.vmem-check-enabled</name>
           <value>false</value>
      </property>
      <property>
              <name>yarn.nodemanager.aux-services</name>
              <value>mapreduce_shuffle</value>
              <description>nomenodeManager获取数据的方式是shuffle</description>
      </property>
      <property>
          <name>yarn.resourcemanager.hostname</name>
          <value>node1</value>
          <description>指定Yarn的老大(ResourceManager)的地址</description>
      </property>
      <property>
           <name>yarn.resourcemanager.webapp.address</name>
           <value>192.168.0.252:8088</value>
           <description>配置 yarn 外部可访问,(外网IP:端口)</description>
      </property>
      <property>
          <name>yarn.nodemanager.env-whitelist</name>
          <value> JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ</value>
          <description>容器可能会覆盖的环境变量,而不是使用NodeManager的默认值</description>
      </property>
      
      </configuration>
      
    4. 创建数据存储目录

      • NameNode 数据存放目录: /usr/local/data/hadoop/name
      • SecondaryNameNode 数据存放目录: /usr/local/data/hadoop/secondary
      • DataNode 数据存放目录: /usr/local/data/hadoop/data
      • 临时数据存放目录: /usr/local/data/hadoop/tmp
      • HADOOP_MAPRED_HOME :
      sudo mkdir -p /usr/local/data/hadoop/name
      sudo mkdir -p /usr/local/data/hadoop/secondary
      sudo mkdir -p /usr/local/data/hadoop/data
      sudo mkdir -p /usr/local/data/hadoop/tmp
      
  • 安装部署 seatunnel

    1. 输入’cd /usr/local’,进入/usr/local 路径,输入如下指令,下载并解压 seatunnel 组件

      export version="2.3.0"
      wget "https://archive.apache.org/dist/incubator/seatunnel/${version}/apache-seatunnel-incubating-${version}-bin.tar.gz"
      tar -xzvf "apache-seatunnel-incubating-${version}-bin.tar.gz"
      
    2. 安装 connector 插件。

      sh bin/install_plugin.sh 2.3.0
      
  • 同步组件和配置文件到其他节点

    待所有组件和配置文件都设置完毕,需要同步到其他节点上,通过如下指令同步到 node2 和 node3 节点

    scp -r apache-seatunnel-incubating-2.3.0/ flink-1.13.6/ hadoop-3.2.4/ data/ node2:'pwd'
    scp -r apache-seatunnel-incubating-2.3.0/ flink-1.13.6/ hadoop-3.2.4/ data/ node3:'pwd'
    

修改环境变量

执行’sudo vi /etc/profile’,打开文件,添加如下内容:

#set java environment
export FLINK_HOME=/usr/local/flink-1.13.6
export SEATUNNEL_HOME=/usr/local/apache-seatunnel-incubating-2.3.0
export HADOOP_HOME=/usr/local/hadoop-3.2.4
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$FLINK_HOME/bin:$SEATUNNEL_HOME/bin:$PATH
export HADOOP_CLASSPATH=`hadoop classpath`

执行’source /etc/profile’,激活环境变量,每台服务器都要执行此操作

启动服务

  1. 启动 Hadoop 集群

    • 在 hadoop 根目录,执行’./sbin/start-dfs.sh’,启动 hdfs 集群。

      如下图所示,访问’http://192.168.0.252:50070/’,可以查看 hdfs 集群情况。image.png

    • 在 Hadoop 根目录,输入’./sbin/start-yarn.sh’,启动 yarn 集群,访问’http://192.168.0.252:8088/’,可以查看 yarn 集群情况。
      image.png

    • 输入’jps -l’,如果如下图所示,说明节点启动成功。
      image.png

  2. 修改 SeaTunnel 任务模板
    从 SeaTunnel 根目录,进入 config 文件夹,创建 flinkjob 文件,文件内容如下:

    env {
      execution.parallelism = 1
      job.mode = "BATCH"
    }
    
    source {
        FakeSource {
          result_table_name = "fake"
          row.num = 16
          schema = {
            fields {
              name = "string"
              age = "int"
            }
          }
        }
    }
    
    transform {
    
    }
    
    sink {
      Console {}
    }
    
  3. 在 yarn 上启动 seatunnel 任务
    在 SeaTunnel 根目录,执行’./bin/start-seatunnel-flink-connector-v2.sh -m yarn-cluster -nm setunnel1008 --config ./config/flinkjob’。

异常场景

  1. Call From localhost/127.0.0.1 to localhost:43356 failed on connection exception: java.net.ConnectException

    原因:直接原因是 yarn 集群访问 NodeManager 所在节点失败导致的。根因是/etc/hosts 中有 127.0.0.1 localhost 的映射。NodeManager 所在节点根据映射,返回给 ResourceManager 的节点地址是 localhost:43356,因此只会请求 ResourceManager 所在节点的对应端口,导致异常。

    解决方法:删除/etc/hosts 中的 127.0.0.1 的映射,再重启 Hadoop 服务。
    查看’http://192.168.0.252:8088/’,如果三个节点名都不是“localhost:39647”形式的,说明问题已经解决。
    image.png

  2. 报错 java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument

    原因:checkArguement 是 guava 相关 jar 包带的类,Hadoop 已经带 guava 相关 jar 包,但是 Flink 自带 lib 没有带 guava 相关 jar 包,导致报错。

    解决方法:执行’find /usr/local -name guava*’,查找 hadoop 路径下的 guava jar 包,然后复制到’/usr/local/flink-1.13.6/lib’路径。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。