目录
1.部署所需环境
- JDK
- Zookeeper
- 关闭防火墙
- ssh 免密登录
2.集群规划
机器 | 服务 |
---|---|
192.168.179.131 (01.weisx.com) | DataNode、NodeManager、NameNode、
JournalNode、ResourceManager、NodeManager、ZKFC
|
192.168.179.132 (02.weisx.com) | DataNode、NodeManager、NameNode、
JournalNode、ResourceManager、NodeManager、ZKFC
|
192.168.179.133 (03.weisx.com) | DataNode、NodeManager、NameNode、
JournalNode、ResourceManager、NodeManager、ZKFC
|
以下第3到12步操作在192.168.179.131服务器上操作
3.解压,配置环境变量
1 )拷贝Hadoop安装包到01节点~/tools/目录
2)解压到~/opt/目录
tar -zxf hadoop-3.2.4.tar.gz -C /home/weisx/opt/
3)创建hadoop软链接
ln -s /home/weisx/opt/hadoop-3.2.4 /home/weisx/opt/hadoop
4 )配置环境变量
vi ~/.base_profile
#使环境变量生效: source ~/.bash_profile
4.创建 hadoop 运行时产生文件的存储目录
mkdir data
5.创建白名单,方便服务扩展等
vi /home/hadoop/opt/hadoop/etc/hadoop/whitelist
6.配置workers
vi /home/weisx/opt/hadoop/etc/hadoop/workers
7.配置hadoop-env.sh
配置jdk目录: export JAVA_HOME=/home/weisx/opt/jdk
8. 配置core-site.xml
配置hadoop集群名称、存储目录、zookeeper等信息
<configuration>
<!-- 把多个 NameNode 的地址组装成一个集群 mycluster -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoopcluster</value>
</property>
<!-- 指定 hadoop 运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/weisx/opt/hadoop/data-ha</value>
</property>
<!-- 指定 zkfc 要连接的 zkServer 地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>01.weisx.com:2181,02.weisx.com:2181,03.weisx.com:2181</value>
</property>
<!-- NN 连接 JN 重试次数,默认是 10 次 -->
<property>
<name>ipc.client.connect.max.retries</name>
<value>20</value>
</property>
<!-- 重试时间间隔,默认 1s -->
<property>
<name>ipc.client.connect.retry.interval</name>
<value>5000</value>
</property>
<!-- 在网页界面访问数据使用的用户名。默认值是一个不真实存在的用户,此用户权限很小,不能访问不同用户的数据。这保证了数据安全。也可以设置为hdfs和hadoop等具有较高权限的用户,但会导致能够登陆网页界面的人能看到其它用户数据。实际设置请综合考虑。如无特殊需求。使用默认值dr.who就好 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>weisx</value>
</property>
</configuration>
9.配置hdfs-site.xml
<configuration>
<!-- 白名单,方便服退役新节点 -->
<property>
<name>dfs.hosts</name>
<value>/home/weisx/opt/hadoop/etc/hadoop/whitelist</value>
</property>
<!-- 数据块副本数为3 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- NameNode 数据存储目录 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.tmp.dir}/name</value>
</property>
<!-- DataNode 数据存储目录 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.tmp.dir}/data</value>
</property>
<!-- JournalNode 数据存储目录 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>${hadoop.tmp.dir}/jn</value>
</property>
<!-- 完全分布式集群名称,与core-site.xml里fs.defaultFS的值要对应 -->
<property>
<name>dfs.nameservices</name>
<value>hadoopcluster</value>
</property>
<!-- 集群中 NameNode 节点都有哪些 -->
<property>
<name>dfs.ha.namenodes.hadoopcluster</name>
<value>nn1,nn2,nn3</value>
</property>
<!-- NameNode 的 RPC 通信地址 -->
<property>
<name>dfs.namenode.rpc-address.hadoopcluster.nn1</name>
<value>01.weisx.com:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hadoopcluster.nn2</name>
<value>02.weisx.com:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hadoopcluster.nn3</name>
<value>03.weisx.com:8020</value>
</property>
<!-- NameNode 的 http 通信地址 -->
<property>
<name>dfs.namenode.http-address.hadoopcluster.nn1</name>
<value>01.weisx.com:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.hadoopcluster.nn2</name>
<value>02.weisx.com:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.hadoopcluster.nn3</name>
<value>03.weisx.com:9870</value>
</property>
<!-- 启用 nn 故障自动转移 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 指定 NameNode 元数据在 JournalNode 上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://01.weisx.com:8485;02.weisx.com:8485;03.weisx.com:8485/hadoopcluster</value>
</property>
<!-- 访问代理类:client 用于确定哪个 NameNode 为 Active -->
<property>
<name>dfs.client.failover.proxy.provider.hadoopcluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 使用隔离机制时需要 ssh 秘钥登录-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/weisx/.ssh/id_rsa</value>
</property>
</configuration>
11.配置mapred-site.xml
<configuration>
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>01.weisx.com:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>01.weisx.com:19888</value>
</property>
</configuration>
12.配置yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- 执行MapReduce需要配置的shuffle过程 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 启用 resourcemanager ha -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 给yarn cluster 取个名字 -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yarncluster</value>
</property>
<!--给ResourceManager 取个名字-->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2,rm3</value>
</property>
<!-- ========== rm1 的配置 ========== -->
<!-- 指定 rm1 的主机名 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>01.weisx.com</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>01.weisx.com:8088</value>
</property>
<property>
<name>yarn.resourcemanager.address.rm1</name>
<value>01.weisx.com:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address.rm1</name>
<value>01.weisx.com:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
<value>01.weisx.com:8031</value>
</property>
<!-- ========== rm2 的配置 ========== -->
<!-- 指定 rm2 的主机名 -->
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>02.weisx.com</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>02.weisx.com:8088</value>
</property>
<property>
<name>yarn.resourcemanager.address.rm2</name>
<value>02.weisx.com:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address.rm2</name>
<value>02.weisx.com:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
<value>02.weisx.com:8031</value>
</property>
<!-- ========== rm3 的配置 ========== -->
<!-- 指定 rm3 的主机名 -->
<property>
<name>yarn.resourcemanager.hostname.rm3</name>
<value>03.weisx.com</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm3</name>
<value>03.weisx.com:8088</value>
</property>
<property>
<name>yarn.resourcemanager.address.rm3</name>
<value>03.weisx.com:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address.rm3</name>
<value>03.weisx.com:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm3</name>
<value>03.weisx.com:8031</value>
</property>
<!-- 指定 zookeeper 集群的地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>01.weisx.com:2181,02.weisx.com:2181,03.weisx.com:2181</value>
</property>
<!-- 启用自动恢复 -->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!-- 指定 resourcemanager 的状态信息存储在 zookeeper 集群 -->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</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_MAPRED_HOME,SPARK_HOME</value>
</property>
<property>
<!-- 启用节点的内容和CPU自动检测,最小内存为1G -->
<name>yarn.nodemanager.resource.detect-hardware-capabilities</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>512</value> <!-- 资源分配值8G -->
</property>
<!-- scheduler最大核数 -->
<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>1</value>
</property>
<!-- 单个Container能够使用的最大内存 -->
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>1024</value>
</property>
<!-- 该参数的含义是,单个Container能够使用的最小内存 -->
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>126</value>
</property>
<property>
<name>yarn.app.mapreduce.am.resource.mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>1</value>
</property>
<!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://01.weisx.com:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<property>
<name>yarn.resourcemanager.am.max-attempts</name>
<value>1</value>
<description>
The maximum number of application master execution attempts.
</description>
</property>
</configuration>
13.分发hadoop到其他服务器
scp -r /home/weisx/opt/hadoop-3.2.4 02.weisx.com:~/opt
scp -r /home/weisx/opt/hadoop-3.2.4 03.weisx.com:~/opt
以下第14步操作在192.168.179.132服务器上操作
14.配置第二台服务器的hadoop
1 ) 创建hadoop软链接
ln -s /home/weisx/opt/hadoop-3.2.4 /home/weisx/opt/hadoop
2)配置环境变量
vi ~/.base_profile
#使环境变量生效: source ~/.bash_profile
以下第15步操作在192.168.179.133服务器上操作
15.配置第三台服务器的hadoop
1 ) 创建hadoop软链接
ln -s /home/weisx/opt/hadoop-3.2.4 /home/weisx/opt/hadoop
2)配置环境变量
vi ~/.base_profile
#使环境变量生效: source ~/.bash_profile
以下第16步操作在192.168.179.131服务器上操作
16.启动Hadoop集群
0)启动zookeeper
zkServer.sh start
0)启动所有节点journalnode进程
hdfs --daemon start journalnode
1)注意只格式化一次,之后再格式化会使数据丢失
hdfs namenode -format
2)格式化高可用(Zookeeper里的hadoop信息)
hdfs zkfc -formatZK
3)启动namenode
hdfs --daemon start namenode
4)需要在备节点192.168.179.132同步主节点的元数据信息
hdfs namenode -bootstrapStandby
5)需要在备节点192.168.179.133同步主节点的元数据信息
hdfs namenode -bootstrapStandby
6)namenode元数据同步完数据后,紧接着在主节点节点上,结束namenode进程
hdfs --daemon stop namenode
7)关闭所有节点上面的journalnode进程
hdfs --daemon stop journalnode
8)重启启动hadoop
在主节点上分别执行:start-dfs.sh 和 start-yarn.sh 启动dfs和yarn或者 执行start-all.sh
9)Web 端查看 HDFS 的 NameNode
17.测试Hadoop集群
1)在192.168.179.131服务器上上传文件到hadoop集群
2)在192.168.179.132查看hadoop集群文件