2.4.2 Hadoop配置
修改Hadoop的主要配置文件,文件路径:/opt/software/hadoop/etc/hadoop
1. slaves
master node1 node2 node3 node4 node5 node6
2. hadoop-env.sh
在export JAVA_HOME=${JAVA_HOME}前添加
export JAVA_HOME=/opt/software/openjdk # NN分配32G内存,SN分配32G内存,DN分配6G内存,原默认都是1G内存 # 添加以下参数(原参数保留): export HADOOP_NAMENODE_OPTS="-Xmx32000m $HADOOP_NAMENODE_OPTS" export HADOOP_SECONDARYNAMENODE_OPTS="-Xmx32000m $HADOOP_SECONDARYNAMENODE_OPTS" export HADOOP_HEAPSIZE=6000
3. yarn-env.sh
修改RESOURCEMANAGER内存 添加如下参数 export YARN_RESOURCEMANAGER_HEAPSIZE=3000
4. core-site.xml
<configuration> <property> <!-- 默认文件系统的名称,一个URI,用于确定文件系统的主机、端口 --> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <!-- HDFS文件临时目录,/data1目录即为之前划分的数据盘 --> <name>hadoop.tmp.dir</name> <value>/data3/hdfsdata</value> </property> <property> <!-- 分钟数,在此时间之后,检查点将被删除 --> <name>fs.trash.interval</name> <value>1440</value> </property> <property> <!-- 接受客户端连接的服务器的侦听队列的长度,需要对somaxconn配置进行调整,参考2.2.2环境配置部分 --> <name>ipc.server.listen.queue.size</name> <value>32768</value> </property> <property> <!--断开与服务器连接的时间为6秒 --> <name>ipc.client.connection.maxidletime</name> <value>60000</value> </property> <property> <!-开启服务器端TCP连接算法 --> <name>ipc.server.tcpnodelay</name> <value>true</value> </property> <property> <!--Reader的个数 --> <name>ipc.server.read.threadpool.size</name> <value>10</value> </property> </configuration>
5. hdfs-site.xml
<configuration> <property> <!-- hdfs文件副本数 --> <name>dfs.replication</name> <value>2</value> </property> <property> <!-- 禁用 hdfs filesystem cache --> <name>fs.hdfs.impl.disable.cache</name> <value>true</value> </property> <property> <!-- 禁用 hdfs filesystem cache --> <name>fs.file.impl.disable.cache</name> <value>true</value> </property> <property> <!-- 关闭HDFS权限检查 --> <name>dfs.permissions.enabled</name> <value>false</value> </property> <property> <!-- 确定DFS数据节点在本地文件系统上的哪个位置存储其块,/data1和/data2即为之前划分的数据盘 --> <name>dfs.datanode.data.dir</name> <value>/data3/hdfsdata/data,/data4/hdfsdata/data</value> </property> <property> <!-- 确定DFS节点在本地文件系统上存储文件的位置,多目录列表实现冗余效果 --> <name>dfs.namenode.name.dir</name> <value>/data3/hdfsdata/namenode</value> </property> <property> <!-- Secondary NameNode web管理端口 --> <name>dfs.secondary.http.address</name> <value>node1:50090</value> </property> <property> <!-- DataNode 最大传输线程数 --> <name>dfs.datanode.maxtransfer.threads</name> <value>10240</value> </property> <property> <!-- hadoop磁盘存储策略调整由轮询改为磁盘适配--> <name>dfs.datanode.fsdataset.volume.choosing.policy</name> <value>org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicy</value> </property> <property> <!--块写入出错时的重试次数--> <name>dfs.client.block.write.retries</name> <value>15</value> </property> <property> <!--hdfs客户端超时时间毫秒,解决IO超时问题--> <name>dfs.client.socket-timeout</name> <value>600000</value> </property> <property> <!--hdfs存储段写入超时时间毫秒,解决IO超时问题 --> <name>dfs.datanode.socket.write.timeout</name> <value>600000</value> </property> <property> <!--调度数据移动方案的线程池大小 --> <name>dfs.balancer.dispatcherThreads</name> <value>4096</value> </property> <property> <!--移动数据移动方案的线程池大小 --> <name>dfs.mover.moverThreads</name> <value>4096</value> </property> <property> <!--socket的读超时时间 --> <name>dfs.datanode.socket.reuse.keepalive</name> <value>600000</value> </property> <property> <!--数据节点断电,文件完全同步到磁盘 --> <name>dfs.datanode.synconclose</name> <value>true</value> </property> <property> <!--此配置指定datanode将尝试读取的当前读取位置前面的字节数 --> <name>dfs.datanode.readahead.bytes</name> <value>131072</value> </property> <property> <!--用于短路读取的socket缓存容量 --> <name>dfs.client.socketcache.capacity</name> <value>128</value> </property> <property> <!--用于短路读取的socket缓存过期时间,单位为毫秒 --> <name>dfs.client.socketcache.expiryMsec</name> <value>600000</value> </property> <property> <!--额外的edit日志段的最大数量 --> <name>dfs.namenode.max.extra.edits.segments.retained</name> <value>2016</value> </property> <property> <!--写入danode的客户端socket超时时间,单位为毫秒 --> <name>dfs.datanode.socket.write.timeout</name> <value>600000</value> </property> <property> <!--做balance时每个dn移动块的最大并行线程数 --> <name>dfs.datanode.balance.max.concurrent.moves</name> <value>600</value> </property> <property> <!--支持DFS客户端的hedged读取,正数为开启--> <name>dfs.client.hedged.read.threadpool.size</name> <value>300</value> </property> <property> <!--配置DFS客户端的hedged读取。属性值为启动hedged读取前的等待时间--> <name>dfs.client.hedged.read.threshold.millis</name> <value>100</value> </property> <property> <!--datanode进行传输数据的最大线程数--> <name>dfs.datanode.max.transfer.threads</name> <value>10240</value> </property> <property> <!--RPC服务器的监听client线程数,如果dfs.namenode.servicerpc-address属性没有配置,则线程会监听所有节点的请求--> <name>dfs.namenode.handler.count</name> <value>1024</value> </property> <property> <!--datanode的服务器线程数--> <name>dfs.datanode.handler.count</name> <value>512</value> </property> <property> <!----> <name>dfs.datanode.handler.count</name> <value>512</value> <description>Thenumberofserverthreadsforthedatanode.</description> </property> <property> <!--只有当dfs.namenode.servicerpc-address属性配置后,该属性才有效。用于配置datanode和其它非client节点的监听线程数--> <name>dfs.namenode.service.handler.count</name> <value>40</value> </property> </configuration>
6. mapred-site.xml
复制:cp mapred-site.xml.template mapred-site.xml
添加如下property属性配置
<configuration> <property> <!-- 使用yarn运行mapreduce,非本地运行 --> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
7. yarn-site.xml
<configuration> <property> <!-- RM的主机名 --> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <!-- Application执行结束后延迟604800s即7天,删除本地文件及日志 --> <name>yarn.nodemanager.delete.debug-dely-sec</name> <value>604800</value> </property> <property> <!-- 可分配给容器的物理内存总量 --> <!--所以分配的内存为Executor数量*64G:4*64*1024 --> <name>yarn.nodemanager.resource.memory-mb</name> <value>32768</value> </property> <property> <!-- 分配给AM单个容器可申请的最小内存,推荐默认分配内存 --> <name>yarn.scheduler.minimum-allocation-mb</name> <value>40</value> </property> <property> <!-- 分配给AM单个容器可申请的最大内存 --> <name>yarn.scheduler.maximum-allocation-mb</name> <value>65536</value> </property> <property> <!-- 该节点上YARN可使用的虚拟CPU个数,默认是8,推荐将该值设值为与逻辑CPU核数数目相同 --> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>40</value> </property> <property> <!-- 单个任务可申请的最大虚拟CPU个数,默认是32 --> <name>yarn.scheduler.maximum-allocation-vcores</name> <value>32</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> <!-- 用于存储本地化文件的目录列表 --> <name>yarn.nodemanager.local-dirs</name> <value>/data3/yarn/yarnlogs,/data4/yarn/yarnlogs</value> </property> <property> <!-- 全局的applicationmaster重试次数的限制 --> <name>yarn.resourcemanager.am.max-attempts</name> <value>1000</value> </property> <property> <!-- 资源调度模型 --> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <!-- 资源调度模型 --> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> </configuration>
8. 运行hdfs和yarn
在/opt/software/hadoop/目录下执行一次格式化命令: ./bin/hdfs namenode -format 然后在/opt/software/hadoop/sbin目录下,执行: sh start-dfs.sh sh start-yarn.sh 主节点进程:namenode + resourcemanager + nodemanager + datanode,可使用jps验证 子节点进程:datenode + nodemanager + secondarnamenode(只有一台机器上有SN),可使用jps查看验证 子节点进程:datanode + nodemanager,可使用jps查看验证 可在部署Hadoop的节点上登陆浏览器查看:master:50070