大数据高可用集群环境安装与配置(06)——安装Hadoop高可用集群
Posted AllEmpty
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据高可用集群环境安装与配置(06)——安装Hadoop高可用集群相关的知识,希望对你有一定的参考价值。
下载Hadoop安装包
登录 https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/ 镜像站,找到我们要安装的版本,点击进去复制下载链接
安装Hadoop时要注意版本与后续安装的HBase、Spark等相关组件的兼容,不要安装了不匹配的版本,而导致某些组件需要重装
输入命令进行安装操作
cd /usr/local/src/ wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz tar -zxvf hadoop-2.7.7.tar.gz mv hadoop-2.7.7 /usr/local/hadoop/
修改服务器系统环境变量
所有服务器都需要按要求修改配置
vi /etc/profile
在尾部添加下面配置
export HADOOP_HOME=/usr/local/hadoop/ export PATH=$PATH:$HADOOP_HOME/bin export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR" export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native" export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native/:$LD_LIBRARY_PATH unset MAILCHECK
保存退出后,运行命令,让配置马上生效
source /etc/profile
创建Hadoop需要的文件夹
# 所有服务器都需要执行创建hadoop的tmp文件夹 mkdir -p /data/hadoop/ # 在两台master服务器创建这个文件夹 mkdir -p /data/hadoop/journaldata
安装NSCD服务
Hadoop高度依赖DNS,因此在正常运行期间会执行许多DNS查找。为了减少DNS基础结构的负载,需要在运行Linux或任何其他dns缓存机制(即dnsmasq)的群集节点上使用名称服务缓存守护程序(NSCD)。
该守护程序将缓存主机,用户和组查找,并提供更好的解析性能,并减少DNS基础结构的负载。
# 每台服务器上都安装 yum -y install nscd systemctl enable nscd systemctl start nscd
设置nscd配置
vi /etc/nscd.conf
按下面配置进行修改
enable-cache passwd yes positive-time-to-live passwd 600 negative-time-to-live passwd 20 suggested-size passwd 211 check-files passwd yes persistent passwd yes shared passwd yes max-db-size passwd 33554432 auto-propagate passwd yes enable-cache group yes positive-time-to-live group 3600 negative-time-to-live group 60 suggested-size group 211 check-files group yes persistent group yes shared group yes max-db-size group 33554432 auto-propagate group yes enable-cache hosts yes positive-time-to-live hosts 3600 negative-time-to-live hosts 20 suggested-size hosts 211 check-files hosts yes persistent hosts yes shared hosts yes max-db-size hosts 33554432 enable-cache services no positive-time-to-live services 28800 negative-time-to-live services 20 suggested-size services 211 check-files services yes persistent services yes shared services yes max-db-size services 33554432 enable-cache netgroup yes positive-time-to-live netgroup 28800 negative-time-to-live netgroup 20 suggested-size netgroup 211 check-files netgroup yes persistent netgroup yes shared netgroup yes max-db-size netgroup 33554432
配置Hadoop参数
打开Hadoop对应版本的官方页面,按说明对Hadoop配置文件配置相关参数
http://hadoop.apache.org/docs/r3.1.3/hadoop-project-dist/hadoop-common/SingleCluster.html
1. 配置hadoop-env.sh
cd /usr/local/hadoop/etc/hadoop/ vi hadoop-env.sh
在文件尾部添加相关配置(优化gc参数,记录gc日志)
export HADOOP_IDENT_STRING=$USER export JAVA_HOME=/usr/local/java/jdk/ export HADOOP_NAMENODE_OPTS="-XX:+UseCompressedOops -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSParallelRemarkEnabled -XX:+DisableExplicitGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:/data/logs/hadoop/gc-`date +\'%Y%m%d\'`.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps ${HADOOP_NAMENODE_OPTS}"
2. 配置core-site.xml
vi core-site.xml
将配置文件里的内容修改为下面内容:
<configuration> <!-- NameNode URI,客户端访问HDFS地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://nameservice/</value> </property> <!-- 以分钟为单位的垃圾回收时间,垃圾站中数据超过此时间,会被删除。如果是0,垃圾回收机制关闭 --> <property> <name>fs.trash.interval</name> <value>4320</value> </property> <!-- 设置hadoop临时目录 --> <property> <name>hadoop.tmp.dir</name> <value>/data/hadoop/</value> </property> <!-- 设置zookeeper集群地址 --> <property> <name>ha.zookeeper.quorum</name> <value>master:2181,master-backup:2181</value> </property> <!-- HealthMonitor check namenode 的超时设置,默认50000ms,改为5mins --> <property> <name>ha.health-monitor.rpc-timeout.ms</name> <value>90000</value> </property> <!-- zk failover的session 超时设置,默认5000ms,改为3mins --> <property> <name>ha.zookeeper.session-timeout.ms</name> <value>90000</value> </property> <!-- 被删除文件保留时间(小时) --> <property> <name>fs.trash.interval</name> <value>1440</value> </property> <!-- 每个日志文件的最大值,单位:bytes --> <property> <name>hadoop.logfile.size</name> <value>50000000</value> </property> <!-- 日志文件的最大数量 --> <property> <name>hadoop.logfile.count</name> <value>10</value> </property> </configuration>
3. 配置hdfs-site.xml
vi hdfs-site.xml
将配置文件里的内容修改为下面内容:
<configuration> <!-- hadoop存储文件的副本数量 --> <property> <name>dfs.replication</name> <value>2</value> </property> <!-- 设置hadoop namenode存储路径 --> <property> <name>dfs.namenode.name.dir</name> <value>file://${hadoop.tmp.dir}/dfs/name</value> </property> <!-- 设置hadoop datanode存储路径 --> <property> <name>dfs.datanode.data.dir</name> <value>file://${hadoop.tmp.dir}/dfs/data</value> </property> <!--设置hdfs的nameservice,需要和core-site.xml中的保持一致 --> <property> <name>dfs.nameservices</name> <value>nameservice</value> </property> <!-- nameservice下面有两个NameNode --> <property> <name>dfs.ha.namenodes.nameservice</name> <value>namenodes1,namenodes2</value> </property> <!-- namenodes1的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.nameservice.namenodes1</name> <value>master:9000</value> </property> <!-- namenodes1的http通信地址 --> <property> <name>dfs.namenode.http-address.nameservice.namenodes1</name> <value>master:50070</value> </property> <!-- namenodes2的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.nameservice.namenodes2</name> <value>master-backup:9000</value> </property> <!-- namenodes2的http通信地址 --> <property> <name>dfs.namenode.http-address.nameservice.namenodes2</name> <value>master-backup:50070</value> </property> <!-- 开启NameNode失败自动切换 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 设置NameNode的元数据在JournalNode上的存放位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://master:8485;master-backup:8485/nameservice</value> </property> <!-- 设置JournalNode存放数据位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/data/hadoop/journaldata</value> </property> <!-- 配置失败自动切换实现方式 --> <property> <name>dfs.client.failover.proxy.provider.nameservice</name> <value> org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider </value> </property> <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行--> <property> <name>dfs.ha.fencing.methods</name> <value> sshfence shell(/bin/true) </value> </property> <!-- 使用sshfence隔离机制时需要ssh免登陆 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>~/.ssh/id_rsa</value> </property> <!-- 配置sshfence隔离机制超时时间 --> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property> <!-- JournalNodes选择输入流时超时时间 --> <property> <name>dfs.qjournal.select-input-streams.timeout.ms</name> <value>60000</value> </property> <!-- EditLog会被切割为很多段,每一段称为一个segment,Namenode发起新写入editlog的RPC调用,会使用startLogSegment方法,该参数表示发起新segment的超时时间 --> <property> <name>dfs.qjournal.start-segment.timeout.ms</name> <value>60000</value> </property> <!--写入超时时间 --> <property> <name>dfs.qjournal.write-txns.timeout.ms</name> <value>60000</value> </property> <!-- namenode节点RPC的处理线程数,计算公式(N为集群服务器数量):python -c \'import math ; print int(math.log(N) * 20)\' --> <property> <name>dfs.namenode.handler.counts</name> <value>32</value> </property> <!-- datanode节点RPC的处理线程数 --> <property> <name>dfs.datanode.handler.count</name> <value>30</value> </property> <!-- datanode同时处理文件的上限 --> <property> <name>dfs.datanode.max.xcievers</name> <value>4096</value> </property> </configuration>
4. 配置mapred-site.xml
mv mapred-site.xml.template mapred-site.xml vi mapred-site.xml
将配置文件里的内容修改为下面内容
<configuration> <!-- 设置执行框架为Hadoop YARN --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
5. 配置yarn-site.xml
vi yarn-site.xml
将配置文件里的内容修改为下面内容
<configuration> <!-- 启用resourcemanager为高可用 --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!-- 启用MapReduce功能 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 定义在节点管理器总的可用资源,用于container申请的物理内存大小。这里需要根据服务器实际的内存大小进行对应的调整 --> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>1024</value> </property> <!-- 设置resourcemanager的集群标识, 确保RM不会接管另一个集群 --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>yrc</value> </property> <!-- 设置resourcemanager的名字 --> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>resourcemanager1,resourcemanager2</value> </property> <!-- 设置resourcemanager的地址 --> <property> <name>yarn.resourcemanager.hostname.resourcemanager1</name> <value>master</value> </property> <property> <name>yarn.resourcemanager.hostname.resourcemanager2</name> <value>master-backup</value> </property> <!-- 设置resourcemanager的webapp地址 --> <property> <name>yarn.resourcemanager.webapp.address.resourcemanager1</name> <value>master:8088</value> </property> <property> <name>yarn.resourcemanager.webapp.address.resourcemanager2</name> <value>master-backup:8088</value> </property> <!-- 设置zookeeper集群地址 --> <property> <name>yarn.resourcemanager.zk-address</name大数据高可用集群环境安装与配置(07)——安装HBase高可用集群大数据高可用集群环境安装与配置(09)——安装Spark高可用集群
大数据高可用集群环境安装与配置(05)——安装zookeeper集群
大数据高可用集群环境安装与配置(08)——安装Ganglia监控集群