实训一、安装java
步骤一、解压并重命名java
[root@master ~]#
tar -xzvf /opt/software/jdk-8u212-linux-x64.tar.gz -C /opt/module/
mv /opt/module/jdk1.8.0_212 /opt/module/java
步骤二、配置全局环境变量
[root@master ~]#
vim /etc/profile
配置内容:
export JAVA_HOME=/opt/module/java
export PATH=$PATH:$JAVA_HOME/bin
加载环境变量
source /etc/profile
步骤三、测试java
[root@master ~]#
javac
java -version
步骤四、分发java文件和环境变量
[root@master ~]#
scp -r /opt/module/java root@slave1:/opt/module/java
scp -r /opt/module/java root@slave2:/opt/module/java
scp /etc/profile root@slave1:/etc/
scp /etc/profile root@slave2:/etc/
实训二、安装zookeeper集群
步骤一、解压并重命名为zookeeper
[root@master ~]#
tar -xzvf /opt/software/apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module/
mv /opt/module/apache-zookeeper-3.5.7-bin /opt/module/zookeeper
步骤二、配置用户环境变量
[root@master ~]#
vim /root/.bash_profile
配置内容:
export ZOOKEEPER_HOME=/opt/module/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
加载环境变量
source /root/.bash_profile
步骤三、配置zoo.cfg文件
[root@master ~]#
cp /opt/module/zookeeper/conf/zoo_sample.cfg /opt/module/zookeeper/conf/zoo.cfg
vim $ZOOKEEPER_HOME/conf/zoo.cfg
配置内容:
# 配置zk数据文件路径
dataDir=/opt/module/zookeeper/data
# 配置zk日志文件
dataLogDir=/opt/module/zookeeper/logs
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
步骤四、配置myid文件
[root@master ~]#
mkdir -p $ZOOKEEPER_HOME/{logs,data}
echo "1" > $ZOOKEEPER_HOME/data/myid
步骤五、分发文件
scp -r /opt/module/zookeeper root@slave1:/opt/module/
scp -r /opt/module/zookeeper root@slave2:/opt/module/
scp /root/.bash_profile slave1:/root/
scp /root/.bash_profile slave2:/root/
步骤六、修改其他节点myid文件
[root@slave1 ~]#
echo 2 > $ZOOKEEPER_HOME/data/myid
source /root/.bash_profile
[root@slave2 ~]#
echo 3 > $ZOOKEEPER_HOME/data/myid
source /root/.bash_profile
步骤七、启动zookeer集群
[root@master ~]#
zkServer.sh start
[root@slave1 ~]#
zkServer.sh start
[root@slave2 ~]#
zkServer.sh start
步骤八、查看jps进程
[root@master ~]#
jps
[root@slave1 ~]#
jps
[root@slave2 ~]#
jps
实训三、部署Hadoop HA
步骤一、解压并重命名
[root@master ~]#
tar -xzvf /opt/software/hadoop-3.1.3.tar.gz -C /opt/module/
mv /opt/module/hadoop-3.1.3 /opt/module/hadoop
步骤二、配置环境变量
[root@master ~]#
vim /root/.bash_profile
配置内容:
export HADOOP_HOME=/opt/module/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
加载环境变量
source /root/.bash_profile
步骤三、查看hadoop版本
[root@master ~]#
hadoop version
步骤四、配置hadoop-env.sh
[root@master ~]#
vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
配置内容:
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
export JAVA_HOME=/opt/module/java
步骤五、配置hdfs-site.xml
[root@master ~]#
vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml
配置内容:
<property>
<!--nameservices逻辑名称-->
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<!--nameservices服务中每个 NameNode 的唯一标识符-->
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2,nn3</value>
</property>
<property>
<!--nn1 NameNode监听的完全限定的 RPC 地址-->
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>master:8020</value>
</property>
<property>
<!--nn2 NameNode监听的完全限定的 RPC 地址-->
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>slave1:8020</value>
</property>
<property>
<!--nn3 NameNode监听的完全限定的 RPC 地址-->
<name>dfs.namenode.rpc-address.mycluster.nn3</name>
<value>slave2:8020</value>
</property>
<property>
<!--nn1 NameNode 监听的完全限定的 HTTP 地址-->
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>master:9870</value>
</property>
<property>
<!--nn2 NameNode 监听的完全限定的 HTTP 地址-->
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>slave1:9870</value>
</property>
<property>
<!--nn3 NameNode 监听的完全限定的 HTTP 地址-->
<name>dfs.namenode.http-address.mycluster.nn3</name>
<value>slave2:9870</value>
</property>
<property>
<!--标识 NameNode 将在其中写入/读取编辑的 JN 组的 URI-->
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</value>
</property>
<property>
<!--HDFS 客户端用来联系 Active NameNode 的 Java 类-->
<name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<!--一个脚本或 Java 类的列表,将在故障转移期间用于隔离 Active NameNode-->
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<!--SSH 到 Active NameNode 并终止进程-->
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<!--SSH连接超时时长(毫秒)-->
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<property>
<!--开启自动故障转移-->
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<!--配置zk集群-->
<name>ha.zookeeper.quorum</name>
<value>master:2181,slave1:2181,slave2:2181</value>
</property>
<property>
<!--hadoop的副本数量,默认为3-->
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<!--在本地文件系统所在的NameNode的存储空间和持续化处理日志-->
<name>dfs.namenode.name.dir</name>
<value>/opt/module/hadoop/dfs/name</value>
</property>
<property>
<!--在本地文件系统所在的DataNode的存储空间和持续化处理日志-->
<name>dfs.datanode.data.dir</name>
<value>/opt/module/hadoop/dfs/data</value>
</property>
<property>
<!--用于大型文件系统的 HDFS 块大小为 256MB。-->
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
<property>
<!--NameNode 服务器线程来处理来自大量DataNode 的 RPC-->
<name>dfs.namenode.handler.count</name>
<value>100</value>
</property>
步骤六、配置core-site.xml
[root@master ~]#
vim $HADOOP_HOME/etc/hadoop/core-site.xml
配置内容
<property>
<!--hadoop临时文件路径-->
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop/dfs/tmp</value>
</property>
<property>
<!--Hadoop FS 客户端使用的默认路径-->
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<!--SequenceFiles 中使用的读/写缓冲区的大小。-->
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<!--JournalNode 守护进程将存储其本地状态的路径-->
<name>dfs.journalnode.edits.dir</name>
<value>/opt/module/hadoop/journal/data</value>
</property>
<property>
<!--hadoop的副本数量,默认为3-->
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<!--hadoop临时文件路径-->
<name>hadoop.tmp.dir</name>
<value>/usr/local/src/hadoop/dfs/tmp</value>
</property>
<property>
<!--配置允许访问的主机-->
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<!--配置允许访问的用户组-->
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<property>
<!--配置允许访问的用户-->
<name>hadoop.proxyuser.root.users</name>
<value>*</value>
</property>
步骤七、配置yarn-site.xml
[root@master ~]#
vim $HADOOP_HOME/etc/hadoop/yarn-site.xml
配置内容
<property>
<!--逗号分隔的服务列表-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<!--在资源管理器中分配给每个容器请求的最小内存限制。以 MB 为单位-->
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
<property>
<!--在资源管理器中分配给每个容器请求的最大内存限制。以 MB 为单位-->
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
</property>
<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>
<!--可以为容器分配的 vcore 数量,这不用于限制 YARN 容器使用的物理内核数。默认为8-->
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>5</value>
</property>
<property>
<!--启用 RM HA-->
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<!--标识集群。选举人使用它来确保 RM 不会接管另一个集群的活动。-->
<name>yarn.resourcemanager.cluster-id</name>
<value>RMcluster</value>
</property>
<property>
<!--RM 的逻辑 ID 列表-->
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<!--指定 RM逻辑id,rm1对应的主机名-->
<name>yarn.resourcemanager.hostname.rm1</name>
<value>master</value>
</property>
<property>
<!--指定 RM逻辑id,rm2对应的主机名-->
<name>yarn.resourcemanager.hostname.rm2</name>
<value>slave1</value>
</property>
<property>
<!--指定 RM逻辑id,rm1对应的web地址-->
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>master:8088</value>
</property>
<property>
<!--指定 RM逻辑id,rm2对应的web地址-->
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>slave1:8088</value>
</property>
<property>
<!--指定hadoop集群-->
<name>hadoop.zk.address</name>
<value>master:2181,slave1:2181,slave2:2181</value>
</property>
步骤八、配置mapred-site.xml
[root@master ~]#
vim $HADOOP_HOME/etc/hadoop/mapred-site.xml
配置内容
<property>
<!--执行框架设置为 Hadoop YARN-->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop</value>
</property>
<property>
<!--map任务的资源限制-->
<name>mapreduce.map.memory.mb</name>
<value>2048</value>
</property>
<property>
<!--map任务子jvm的堆大小-->
<mame>mapreduce.map.java.opts</mame>
<value>-Xmx1536M</value>
</property>
<property>
<!--reduce任务的资源限制-->
<name>mapreduce.reduce.memory.mb</name>
<value>4096</value>
</property>
<property>
<!--reduce任务子jvm的堆大小-->
<mame>mapreduce.map.java.opts</mame>
<value>-Xmx2560M</value>
</property>
<property>
<!--MapReduce JobHistory 服务器主机:端口-->
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<!--MapReduce JobHistory Server Web UI主机:端口-->
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
<property>
<!--MapReduce 作业写入历史文件的目录-->
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/mr-history/tmp</value>
</property>
<property>
<!--历史文件由 MR JobHistory Server 管理的目录。-->
<name>mapreduce.jobhistory.done-dir</name>
<value>/mr-history/done</value>
</property>
步骤九、配置workers
[root@master ~]#
vim $HADOOP_HOME/etc/hadoop/workers
配置内容
master
slave1
slave2
步骤十、分发文件
[root@master ~]#
scp -r /opt/module/hadoop/ root@slave1:/opt/module/
scp -r /opt/module/hadoop/ root@slave2:/opt/module/
scp /root/.bash_profile root@slave1:/root/
scp /root/.bash_profile root@slave2:/root/
步骤十一、分别启动journalnode
[root@master ~]#
hdfs --daemon start journalnode
[root@slave1 ~]#
source /root/.bash_profile
hdfs --daemon start journalnode
[root@slave2 ~]#
source /root/.bash_profile
hdfs --daemon start journalnode
步骤十二、格式化namenode
[root@master ~]#
hdfs namenode -format
步骤十三、格式化zkfc
[root@master ~]#
hdfs zkfc -formatZK
步骤十四、启动集群
[root@master ~]#
start-all.sh
[root@master ~]#
jps
[root@slave1 ~]#
jps
[root@slave2 ~]#
jps
步骤十五、备用namenode复制元数据目录
[root@slave1 ~]#
hdfs namenode -bootstrapStandby
[root@slave2 ~]#
hdfs namenode -bootstrapStandby
[root@slave1 ~]#
hdfs --daemon start namenode
jps
[root@slave2 ~]#
hdfs --daemon start namenode
jps
步骤十六、运行pi程序测试
[root@master ~]#
yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar pi 10 10
步骤十七、查看所有namenode状态
[root@master ~]#
hdfs haadmin -getAllServiceState
步骤十八、重启master namenode
[root@master ~]#
hdfs --daemon start namenode
jps
hdfs haadmin -getServiceState nn1