Seatunnel 2.3.0集群搭建(结合Hadoop+Flink)
安装步骤
前提
-
Hadoop、Flink和SeaTunnel组件都离不开 java 运行环境,而且必须要安装 Java 8 或以上版本,才能正常运行上述组件。
-
根据各个组件的版本匹配要求, Hadoop、Flink和SeaTunnel组件的版本如下:
- Hadoop 3.2.4
- Flink 1.13.6
- SeaTunnel 2.3.0
-
为实现集群部署,将采用三台服务器,网络和 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
实现免密登录
-
执行’vi /etc/hosts’,修改/etc/hosts 文件。
因系统是按照从前往后的顺序读取 hosts 文件进行匹配,建议在文件头部增加以下内容,IP 值根据实际情况修改:
192.168.0.40 node3 192.168.0.228 node2 192.168.0.252 node1
-
生成公钥和私钥:
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(公钥)
-
将公钥拷贝到要免密登录的目标机器上,~/.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 存放授权过得无密登录服务器公钥 -
验证功能,输入’ssh node2’,如下图所示,说明免密登录其他设备的功能已经开通。
如下指令可以将本地文件夹复制到目标服务器的当前路径,’-r’表示支持备份整个文件夹,'srcDrc’为本地待备份的文件路径,'node2’为目标服务器地址。
scp -r srcDrc node2:`pwd`
安装组件
-
安装部署 flink 1.13.6
-
输入’cd /usr/local’,进入/usr/local 路径,输入如下指令,下载 flink 组件
wget https://archive.apache.org/dist/flink/flink-1.13.6
-
输入如下命令,解压 flink 组件
tar -zxvf flink-1.13.6-bin-scala_2.11.tgz
-
修改 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)
-
输入’cd /usr/local’,进入/usr/local 路径,输入如下指令,下载 hadoop 组件
wget http://archive.apache.org/dist/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz
-
输入如下命令,解压 hadoop 组件
tar -zxvf hadoop-3.2.4.tar.gz
-
修改 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>
-
-
创建数据存储目录
- 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
-
输入’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"
-
安装 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’,激活环境变量,每台服务器都要执行此操作。
启动服务
-
启动 Hadoop 集群
-
在 hadoop 根目录,执行’./sbin/start-dfs.sh’,启动 hdfs 集群。
如下图所示,访问’http://192.168.0.252:50070/’,可以查看 hdfs 集群情况。
-
在 Hadoop 根目录,输入’./sbin/start-yarn.sh’,启动 yarn 集群,访问’http://192.168.0.252:8088/’,可以查看 yarn 集群情况。
-
输入’jps -l’,如果如下图所示,说明节点启动成功。
-
-
修改 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 {} }
-
在 yarn 上启动 seatunnel 任务
在 SeaTunnel 根目录,执行’./bin/start-seatunnel-flink-connector-v2.sh -m yarn-cluster -nm setunnel1008 --config ./config/flinkjob’。
异常场景
-
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”形式的,说明问题已经解决。
-
报错 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’路径。
- 点赞
- 收藏
- 关注作者
评论(0)