hadoop高可用配置
hadoop配置官方文档:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html
hdfs-site.xml配置明细
dfs.nameservices - 此新名称服务的逻辑名称
为此名称服务选择一个逻辑名称,例如“mycluster”,并使用此逻辑名称作为此config选项的值。
您选择的名称是任意的。它既可用于配置,也可用作群集中绝对HDFS路径的权限组件。注意:如果您还在使用HDFS Federation,则此配置设置还应包括其他名称服务列表,HA或其他,
以逗号分隔列表。<property> <name>dfs.nameservices</name> <value>mycluster</value></property>dfs.ha.namenodes。[nameservice ID] - nameservice中每个NameNode的唯一标识符
配置逗号分隔的NameNode ID列表。DataNodes将使用它来确定集群中的所有NameNode。
例如,如果您之前使用“mycluster”作为名称服务ID,并且您希望使用“nn1”和“nn2”作为NameNodes的各个ID,则可以将其配置为:<property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value></property>注意:目前,每个名称服务最多只能配置两个NameNode。dfs.namenode.rpc-address。[nameservice ID]。[name node ID] - 要监听的每个NameNode的完全限定的RPC地址
对于两个先前配置的NameNode ID,请设置NameNode进程的完整地址和IPC端口。请注意,这会产生两个单独的配置选项。例如:
<property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>node01:8020</value></property><property><name>dfs.namenode.rpc-address.mycluster.nn2</name><value>node02:8020</value></property> 注意:如果您愿意,可以类似地配置“ servicerpc-address ”设置。 dfs.namenode.http-address。[nameservice ID]。[name node ID] - 要监听的每个NameNode的完全限定HTTP地址与上面的rpc-address类似,设置两个NameNodes的HTTP服务器的地址以进行侦听。例如:
<property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>node01:50070</value></property><property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>node02:50070</value></property>注意:如果启用了Hadoop的安全功能,则还应为每个NameNode 设置https-address。dfs.namenode.shared.edits.dir - 标识NameNodes将写入/读取编辑的JN组的URI
这是一个配置JournalNodes的地址的地方,它提供共享编辑存储,由Active nameNode写入并由Standby NameNode读取,以保持Active NameNode所做的所有文件系统更改的最新状态。虽然您必须指定多个JournalNode地址,但您应该只配置其中一个URI。URI应该是以下形式:qjournal:// * host1:port1 *; * host2:port2 *; * host3:port3 * / * journalId *。Journal ID是此nameservice的唯一标识符,它允许一组JournalNodes为多个联合名称系统提供存储。虽然不是必需的,但最好重用日志标识符的名称服务ID。
例如,如果此群集的JournalNodes在计算机“node1.example.com”,“node2.example.com”和“node3.example.com”上运行,并且名称服务ID是“mycluster”,则您将使用以下为此设置的值(JournalNode的默认端口为8485):
<property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value></property>dfs.client.failover.proxy.provider。[nameservice ID] - HDFS客户端用于联系Active NameNode的Java类
配置Java类的名称,DFS客户端将使用该名称来确定哪个NameNode是当前的Active,以及哪个NameNode当前正在为客户端请求提供服务。目前Hadoop附带的两个实现是ConfiguredFailoverProxyProvider和RequestHedgingProxyProvider(对于第一次调用,它同时调用所有名称节点以确定活动的名称,并在后续请求中调用活动的名称节点直到发生故障转移),所以除非您使用自定义代理提供程序,否则请使用其中一个。例如:
<property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property>dfs.journalnode.edits.dir - JournalNode守护程序将存储其本地状态的路径
这是JournalNode计算机上的绝对路径,其中将存储JN使用的编辑和其他本地状态。您只能使用单个路径进行此配置。通过运行多个单独的JournalNode或在本地连接的RAID阵列上配置此目录,可以提供此数据的冗余。例如:
<property> <name>dfs.journalnode.edits.dir</name> <value>/var/sxt/hadoop/ha/jn</value></property>dfs.ha.fencing.methods - 脚本或Java类的列表,用于在故障转移期间屏蔽 Active NameNode
对于系统的正确性,期望在任何给定时间只有一个NameNode处于活动状态。重要的是,在使用Quorum Journal Manager时,只允许一个NameNode写入JournalNodes,因此不存在从裂脑情况中破坏文件系统元数据的可能性。但是,当发生故障转移时,以前的Active NameNode仍可能向客户端提供读取请求,这可能已过期,直到NameNode在尝试写入JournalNode时关闭。因此,即使使用Quorum Journal Manager,仍然需要配置一些防护方法。但是,为了在防护机制失败的情况下提高系统的可用性,建议配置防护方法,该方法可保证作为列表中的最后一个防护方法返回成功。请注意,如果您选择不使用实际的防护方法,则仍必须为此设置配置某些内容,例如“ shell(/ bin / true) ”。
故障转移期间使用的防护方法配置为回车分隔列表,将按顺序尝试,直到指示防护成功为止。Hadoop有两种方法:shell和sshfence。有关实现自定义防护方法的信息,请参阅org.apache.hadoop.ha.NodeFencer类。
sshfence - SSH到Active NameNode并终止进程该sshfence选项SSHes到目标节点,并使用定影杀死进程监听服务的TCP端口上。为了使此防护选项起作用,它必须能够在不提供密码的情况下SSH到目标节点。因此,还必须配置dfs.ha.fencing.ssh.private-key-files选项,该选项是以逗号分隔的SSH私钥文件列表。例如:
<property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value></property><property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_dsa</value></property>在典型部署中,ZooKeeper守护程序配置为在三个或五个节点上运行。由于ZooKeeper本身具有轻量级资源要求,因此可以在与HDFS NameNode和备用节点相同的硬件上并置ZooKeeper节点。许多运营商选择在与YARN ResourceManager相同的节点上部署第三个ZooKeeper进程。建议将ZooKeeper节点配置为将数据存储在与HDFS元数据不同的磁盘驱动器上,以获得最佳性能和隔离。ZooKeeper的设置超出了本文档的范围。我们假设您已经设置了在三个或更多节点上运行的ZooKeeper集群,并通过使用ZK CLI进行连接来验证其正确的操作。
在开始配置自动故障转移之前,应关闭群集。当群集运行时,目前无法从手动故障转移设置转换为自动故障转移设置。自动故障转移的配置需要在配置中添加两个新参数。在hdfs-site.xml文件中,添加:<property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property>core-site.xml配置明细
默认文件系统的名称。一个URI,其方案和权限决定了FileSystem的实现。uri的方案确定命名FileSystem实现类的config属性(fs.SCHEME.impl)。uri的权限用于确定文件系统的主机,端口等。注意:hadoop.tmp.dir的配置要变更:/var/sxt/hadoop-2.6/ha <property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value></property>由逗号分隔的ZooKeeper服务器地址列表,由ZKFailoverController在自动故障转移中使用。
<property> <name>ha.zookeeper.quorum</name> <value>node02:2181,node03:2181,node04:2181</value> </property>zookeeper(配置)
conf/zoo.cfgdataDir=/var/sxt/zkserver.1=node02:2888:3888server.2=node03:2888:3888server.3=node04:2888:3888/var/sxt/zk
echo 1 > myid //数字根据节点规划需搭配完全分步式配置系统环境:jdk , ssh免秘钥
Hadoop:jdk(在hadoop安装目录下etc/hadoop下的env.sh文件JAVA_HOME路径重写)配置文件:集群中要同步!!!
zookeepr配置 启动zookeeper集群 zkServer.sh start || zkServer.sh status hadoop-daemon.sh start journalnode 第一台NN: hdfs namenode –format hadoop-deamon.sh start namenode 另一台NN: hdfs namenode -bootstrapStandby start-dfs.sh $ZOOKEEPER/bin/zkCli.sh ls / hdfs zkfc -formatZK stop-dfs.sh && start-dfs.sh || hadoop-daemon.sh start zkfc