### 上传`hadoop-3.1.4.tar.gz`到`/tmp`,解压 >注意在六台机器均上传到`/tmp` ```bash # 在6台机器执行 sudo tar -zxvf /tmp/hadoop-3.1.4.tar.gz -C /usr/local/ # 分发到其他主机 ssh_root.sh chown -R hadoop:hadoop /usr/local/hadoop-3.1.4 ssh_root.sh ln -s /usr/local/hadoop-3.1.4/ /usr/local/hadoop ``` ### 配置环境变量 ```bash echo 'export HADOOP_HOME=/usr/local/hadoop' >> /etc/profile.d/myEnv.sh echo 'export PATH=$PATH:$HADOOP_HOME/bin' >> /etc/profile.d/myEnv.sh echo 'export PATH=$PATH:$HADOOP_HOME/sbin' >> /etc/profile.d/myEnv.sh ``` ```bash # 分发到nn2、nn3、s1、s2、s3 scp_all.sh /etc/profile.d/myEnv.sh /etc/profile.d/ # source 环境变量 ssh_root.sh source /etc/profile ``` >还需要创建 `/data`这个目录,由于nn1、nn2、nn3已经创建`/data`,其他三台需要创建一下 ```bash ### 在s1、s2、s3执行 sudo mkdir /data sudo chown -R hadoop:hadoop /data ``` ### 修改core-site.xml ```bash vim /usr/local/hadoop/etc/hadoop/core-site.xml ``` ```xml fs.defaultFS hdfs://ns1 默认文件服务的协议和NS逻辑名称,和hdfs-site.xml里的对应此配置替代了1.0里的fs.default.name hadoop.tmp.dir /data/tmp 数据存储目录 hadoop.proxyuser.root.groups hadoop hdfs dfsadmin –refreshSuperUserGroupsConfiguration, yarn rmadmin –refreshSuperUserGroupsConfiguration 使用这两个命令不用重启就能刷新 hadoop.proxyuser.root.hosts localhost 本地代理 ha.zookeeper.quorum nn1:2181,nn2:2181,nn3:2181 HA使用的zookeeper地址 ``` ### 修改`hdfs-site.xml` ```bash vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml ``` ```xml dfs.namenode.name.dir /data/namenode namenode本地文件存放地址 dfs.nameservices ns1 提供服务的NS逻辑名称,与core-site.xml里的对应 dfs.ha.namenodes.ns1 nn1,nn2,nn3 列出该逻辑名称下的NameNode逻辑名称 dfs.namenode.rpc-address.ns1.nn1 nn1:9000 指定NameNode的RPC位置 dfs.namenode.http-address.ns1.nn1 nn1:50070 指定NameNode的Web Server位置 dfs.namenode.rpc-address.ns1.nn2 nn2:9000 指定NameNode的RPC位置 dfs.namenode.http-address.ns1.nn2 nn2:50070 指定NameNode的Web Server位置 dfs.namenode.rpc-address.ns1.nn3 nn3:9000 指定NameNode的RPC位置 dfs.namenode.http-address.ns1.nn3 nn3:50070 指定NameNode的Web Server位置 dfs.namenode.handler.count 77 namenode的工作线程数 dfs.namenode.shared.edits.dir qjournal://nn1:8485;nn2:8485;nn3:8485/ns1 指定用于HA存放edits的共享存储,通常是namenode的所在机器 dfs.journalnode.edits.dir /data/journaldata/ journaldata服务存放文件的地址 ipc.client.connect.max.retries 10 namenode和journalnode的链接重试次数10次 ipc.client.connect.retry.interval 10000 重试的间隔时间10s dfs.ha.fencing.methods sshfence 指定HA做隔离的方法,缺省是ssh,可设为shell,稍后详述 dfs.ha.fencing.ssh.private-key-files /home/hadoop/.ssh/id_rsa 杀死命令脚本的免密配置秘钥 dfs.client.failover.proxy.provider.ns1 org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider 指定客户端用于HA切换的代理类,不同的NS可以用不同的代理类以上示例为Hadoop 2.0自带的缺省代理类 dfs.client.failover.proxy.provider.auto-ha org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider dfs.ha.automatic-failover.enabled true dfs.datanode.data.dir /data/datanode datanode本地文件存放地址 dfs.replication 3 文件复本数 dfs.namenode.datanode.registration.ip-hostname-check false dfs.client.use.datanode.hostname true dfs.datanode.use.datanode.hostname true ``` ### 修改`hadoop-env.sh` ```bash vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh ``` ```bash # 添加这两行 source /etc/profile export HADOOP_HEAPSIZE_MAX=512 ``` ### 分发这些配置文件 ```bash scp_all.sh /usr/local/hadoop/etc/hadoop/core-site.xml /usr/local/hadoop/etc/hadoop/ scp_all.sh /usr/local/hadoop/etc/hadoop/hdfs-site.xml /usr/local/hadoop/etc/hadoop/ scp_all.sh /usr/local/hadoop/etc/hadoop/hadoop-env.sh /usr/local/hadoop/etc/hadoop/ ``` ### 集群初始化 - 需要先启动zookeeper集群 ```bash ssh_all_zookeeper.sh /usr/local/zookeeper/bin/zkServer.sh start ``` ```bash # 第一次启动先启动journalnode,便于3个namenode的元数据同步 ssh_all_zookeeper.sh hadoop-daemon.sh start journalnode ``` - `zkfc`搭建 ```bash #在nn1节点执行 hdfs zkfc -formatZK #nn1 nn2 nn3启动zkfc hadoop-daemon.sh start zkfc ``` - 初始化nn1的namenode,在nn1执行 ```bash hdfs namenode -format hadoop-daemon.sh start namenode ``` - 格式化第二台和第三台namenode,并且启动namenode,在nn2、nn3执行 ```bash hdfs namenode -bootstrapStandby hadoop-daemon.sh start namenode ``` - 修改**workers** ```bash vim /usr/local/hadoop/etc/hadoop/workers ``` 修改为 ```text s1 s2 s3 ``` 分发给其他机器 ```bash scp_all.sh /usr/local/hadoop/etc/hadoop/workers /usr/local/hadoop/etc/hadoop ``` - 启动datanode节点,在s1、s2、s3执行 ```bash #启动各个节点的datanode,仅在一台机器执行即可(nn1或其他任意机器) hadoop-daemons.sh start datanode ``` ### hdfs集群启动 ```bash start-dfs.sh ```