1、安装jdk
2、安装Zookeeper
3、安装RBF
3.1 解压 tar -zxvf hadoop-3.3.6.tar.gz
3.2 复制集群配置文件:hdfs-site.xml、core-site.xml
3.3 Router配置:apache hdfs-rbf-site.xml hdp: hdfs-site.xml
<!-- Router RPC服务器 -->
<property>
<!-- 要监视的默认子群集的NS标识符 -->
<name>dfs.federation.router.default.nameserviceId</name>
<value>ns1</value>
</property>
<property>
<!-- 是否开启默认子群集的NS标识符 -->
<name>dfs.federation.router.default.nameservice.enable</name>
<value>true</value>
</property>
<property>
<!-- 是否开启路由处理客户端的RPC请求 -->
<name>dfs.federation.router.rpc.enable</name>
<value>true</value>
</property>
<property>
<!-- 处理客户端请求的RPC地址 -->
<name>dfs.federation.router.rpc-address</name>
<value>0.0.0.0:8888</value>
</property>
<property>
<!-- RPC 服务器将绑定到的实际地址 -->
<name>dfs.federation.router.rpc-bind-host</name>
<value>0.0.0.0</value>
</property>
<property>
<!-- 路由处理来自客户端的RPC请求的服务器线程数 -->
<name>dfs.federation.router.handler.count</name>
<value>20</value>
</property>
<property>
<!-- 用于处理RPC客户端请求的处理程序数的队列大小 -->
<name>dfs.federation.router.handler.queue.size</name>
<value>200</value>
</property>
<property>
<!-- 路由用于处理RPC客户端请求的读取器数。 -->
<name>dfs.federation.router.reader.count</name>
<value>5</value>
</property>
<property>
<!-- 路由处理RPC客户端请求的读取器数的队列大小 -->
<name>dfs.federation.router.reader.queue.size</name>
<value>100</value>
</property>
<!-- NN连接配置 -->
<property>
<!-- 从路由到namenode的连接池的大小 -->
<name>dfs.federation.router.connection.pool-size</name>
<value>6</value>
</property>
<property>
<!-- 时间间隔(以毫秒为单位),用于检查连接池是否应删除未使用的连接 -->
<name>dfs.federation.router.connection.clean.ms</name>
<value>10000</value>
</property>
<property>
<!-- 时间间隔(以毫秒为单位),用于检查连接管理器是否应删除未使用的连接池 -->
<name>dfs.federation.router.connection.pool.clean.ms</name>
<value>60000</value>
</property>
<!-- 管理服务 -->
<property>
<!-- 是否启用路由的管理服务处理客户端请求的RPC请求 -->
<name>dfs.federation.router.admin.enable</name>
<value>true</value>
</property>
<property>
<!-- 处理管理员请求的RPC地址 -->
<name>dfs.federation.router.admin-address</name>
<value>0.0.0.0:8111</value>
</property>
<property>
<!-- RPC管理服务器将绑定到的实际地址 -->
<name>dfs.federation.router.admin-bind-host</name>
<value>0.0.0.0</value>
</property>
<property>
<!-- 路由器处理来自管理员的RPC请求的服务器线程数 -->
<name>dfs.federation.router.admin.handler.count</name>
<value>1</value>
</property>
<!-- HTTP服务 -->
<property>
<!-- 是否启用路由处理客户端的HTTP请求 -->
<name>dfs.federation.router.http.enable</name>
<value>true</value>
</property>
<property>
<!-- 处理对路由的Web请求的HTTP地址 -->
<name>dfs.federation.router.http-address</name>
<value>0.0.0.0:50071</value>
</property>
<property>
<!-- HTTP服务器将绑定到的实际地址 -->
<name>dfs.federation.router.http-bind-host</name>
<value>0.0.0.0</value>
</property>
<property>
<!-- 处理对路由的Web请求的HTTPS地址 -->
<name>dfs.federation.router.https-address</name>
<value>0.0.0.0:50072</value>
</property>
<property>
<!-- HTTPSS服务器将绑定到的实际地址 -->
<name>dfs.federation.router.https-bind-host</name>
<value>0.0.0.0</value>
</property>
<!-- StateStore存储 -->
<property>
<!-- 是否启用路由连接statestore -->
<name>dfs.federation.router.store.enable</name>
<value>true</value>
</property>
<property>
<!-- 用于序列化状态存储记录的类 -->
<name>dfs.federation.router.store.serializer</name>
<value>org.apache.hadoop.hdfs.server.federation.store.driver.impl.StateStoreSerializerPBImpl</value>
</property>
<property>
<!-- 实现statestore的类 -->
<name>dfs.federation.router.store.driver.class</name>
<value>org.apache.hadoop.hdfs.server.federation.store.driver.impl.StateStoreZooKeeperImpl</value>
</property>
<property>
<!-- 检查与状态存储的连接的频率(以毫秒为单位) -->
<name>dfs.federation.router.store.connection.test</name>
<value>60000</value>
</property>
<property>
<!-- 刷新状态存储缓存的频率(以毫秒为单位) -->
<name>dfs.federation.router.cache.ttl</name>
<value>60000</value>
</property>
<property>
<!-- membership记录的过期时间(以毫秒为单位) -->
<name>dfs.federation.router.store.membership.expiration</name>
<value>300000</value>
</property>
<property>
<!-- 如果为true,则每当为所有路由器添加、修改或删除挂载表条目时,都会更新挂载表缓存 -->
<name>dfs.federation.router.mount-table.cache.update</name>
<value>false</value>
</property>
<property>
<!-- 等待所有路由器完成其挂载表缓存更新的最长时间 -->
<name>dfs.federation.router.mount-table.cache.update.timeout</name>
<value>1m</value>
</property>
<property>
<!-- 路由客户端可以缓存连接的最大时间 -->
<name>dfs.federation.router.mount-table.cache.update.client.max.time</name>
<value>5m</value>
</property>
<!-- Routing路由 -->
<property>
<!-- 用于将文件解析到对应子群集的类。默认org.apache.hadoop.hdfs.server.federation.resolver.MountTableResolver,如果要为一个挂载点启用多个子集群,请设置为org.apache.hadoop.hdfs.server.federation.resolver.MultipleDestinationMountTableResolver -->
<name>dfs.federation.router.file.resolver.client.class</name>
<value>org.apache.hadoop.hdfs.server.federation.resolver.MultipleDestinationMountTableResolver</value>
</property>
<property>
<!-- 用于解析到子集群的NameNode的类 -->
<name>dfs.federation.router.namenode.resolver.client.class</name>
<value>org.apache.hadoop.hdfs.server.federation.resolver.MembershipNamenodeResolver</value>
</property>
<!-- NameNode监控 -->
<property>
<!-- 如果为true,路由会定期将其状态检测信号到statestore -->
<name>dfs.federation.router.heartbeat.enable</name>
<value>true</value>
</property>
<property>
<!-- 如果true,路由将获取NameNode检测信号并发送到StateStore。如果未显式指定,则取与相同的dfs.federation.router.heartbeat.enable值 -->
<name>dfs.federation.router.namenode.heartbeat.enable</name>
<value>true</value>
</property>
<property>
<!-- 路由器应检测信号进入状态存储的频率(以毫秒为单位) -->
<name>dfs.federation.router.heartbeat.interval</name>
<value>5000</value>
</property>
<property>
<!-- 要监视的NameNode的标识符,Router安装在非namenode结点需要配置! -->
<name>dfs.federation.router.monitor.namenode</name>
<value>ns1.nn1,ns1.nn2,ns2.nn3,ns2.nn4</value>
</property>
<property>
<!-- 如果为true,路由器应监视本地计算机中的NameNode,Router安装在非namenode结点需要设置为false -->
<name>dfs.federation.router.monitor.localnamenode.enable</name>
<value>false</value>
</property>
<!-- localnamenode.enable设置true,需要配置子集群允许路由直接查找本地节点 -->
<property>
<name>dfs.nameservice.id</name>
<value>ns1</value>
</property>
<!-- Quota配额 -->
<property>
<!-- 如果为true,在路由中启用配额系统。在这种情况下,不建议直接设置或清除子集群的配额,因为路由管理服务器将使用全局配额覆盖子集群的配额 -->
<name>dfs.federation.router.quota.enable</name>
<value>false</value>
</property>
<property>
<!-- 路由更新配额缓存的频率。此设置支持多个时间单位后缀。如果未指定后缀,则假定为毫秒 -->
<name>dfs.federation.router.quota-cache.update.interval</name>
<value>60s</value>
</property>
<!-- Kerberos安全 -->
<!-- 应该给router单独创建principal,keytab,nn节点部署使用nn的keytab和principal -->
<property>
<!-- 路由用于作为其服务主体登录的密钥表文件 -->
<name>dfs.federation.router.keytab.file</name>
<value>/etc/security/keytabs/nn.service.keytab</value>
</property>
<property>
<!-- 路由服务主体的principal。这通常设置为路由/_HOST@REALM。_HOST占位符允许在HA设置中的所有路由器上使用相同的配置设置 -->
<name>dfs.federation.router.kerberos.principal</name>
<value>nn/_HOST@OCDP.COM</value>
</property>
<!-- <property>
<!-- 包含此配置文件的路由器的主机名。每台计算机都不同。默认为当前主机名 -->
<name>dfs.federation.router.kerberos.principal.hostname</name>
<value></value>
</property> -->
<property>
<!-- 启用Kerberos安全性时路由器用于WebUI SPNEGO身份验证的服务器主体。这通常设置为HTTP/_HOST@REALM -->
<name>dfs.federation.router.kerberos.internal.spnego.principal</name>
<value>HTTP/_HOST@OCDP.COM</value>
</property>
<property>
<!-- 用于实现statestore到委托令牌的类。默认实现使用zookeeper作为后端来存储委派令牌 -->
<name>dfs.federation.router.secret.manager.class</name>
<value>org.apache.hadoop.hdfs.server.federation.router.security.token.ZKDelegationTokenSecretManagerImpl</value>
</property>
<!-- statestore配置 -->
<property>
<!-- state store 采用zk时需要配置 -->
<name>hadoop.zk.address</name>
<value>host-@@@-236-144:2181,host-@@@-241-65:2181,host-@@@-241-68:2181</value>
</property>
<!-- zookeeper to persists TokenIdentifiers and DelegationKeys -->
<property>
<name>zk-dt-secret-manager.kerberos.keytab</name>
<value>/etc/security/keytabs/nn.service.keytab</value>
</property>
<property>
<name>zk-dt-secret-manager.kerberos.principal</name>
<value>nn/_HOST@OCDP.COM</value>
</property>
<property>
<!-- 单独部署zk不开kerberos 配置为none -->
<name>zk-dt-secret-manager.zkAuthType</name>
<value>sasl</value>
</property>
<property>
<name>zk-dt-secret-manager.zkConnectionString</name>
<value>host-@@@-241-65:2181,host-@@@-241-68:2181,host-@@@-236-144:2181</value>
</property>
<!-- NameNode配置,配置所有router主机允许访问namenode -->
<property>
<name>hadoop.proxyuser.ocdp.hosts</name>
<value>host-@@@-236-144,host-@@@-241-68,host-@@@-234-85</value>
<final>false</final>
</property>
3.4 客户端配置:
客户端使用联合命名空间,它们需要创建一个指向路由器的新命名空间,并配置高可用模式。例如:
具有4个命名空间 ns0、ns1、ns2、ns3 的集群可以向hdfs-site.xml添加一个名为ns-fed的新命名空间,
它指向其中两个路由器,配置的是router对应的服务端口。
注意:两个独立子集群开联邦,子集群需要配置所有子集群namenode和HA相关配置,hdfs读取配置时加载conf目录下所有配置,
yarn-site.xml会覆盖hdfs-site.xml 中hadoop.zk.address, 启动router的时候需要注意这个参数,单独配置。
4、启动router进程
Router的启动/停止方式和启动DN/NN类似, 作为一个独立进程, 也有自己单独的日志。
执行:hdfs --daemon start dfsrouter 命令启动联邦服务,默认端口8888。
#停止router: hdfs --daemon stop dfsrouter
独立部署需要指定配置目录:–config confdir 覆盖缺省配置目录,缺省是${HADOOP_HOME}/conf。