centos7安装分布式hadoop
1 场景
1.1 目的
centos7环境下安装分布式hadoop。hadoop版本:2.7.1。
1.2 准备工作
(1)操作系统版本
centos7.3.1611
(2)服务器主从
192.168.1.11 master
192.168.1.12 slave1
192.168.1.13 slave2
主从部署,参见文章:https://www.jianshu.com/p/4c145367208b
(3)JDK版本
JDK版本:1.8
JDK1.8安装,参见文章:https://www.jianshu.com/p/0b9467edf04d
(4)创建相关目录
主节点和从节点,均需创建如下目录:
hadoop程序目录:
mkdir /usr/local/dsj
hadoop数据目录:
mkdir /home/hadoop/hadoop
mkdir /home/hadoop/hadoop/data
mkdir /home/hadoop/hadoop/name
mkdir /home/hadoop/hadoop/tmp
2 安装master
总体顺序是,先将master节点安装配置好,然后将对应的文件拷贝到从节点服务器(slave1/slave2)。
以下均在主节点
服务器上操作。
2.1 下载解压
下载地址:
https://archive.apache.org/dist/hadoop/common/hadoop-2.7.1/hadoop-2.7.1.tar.gz
下载后,解压到目录/usr/local/dsj/hadoop-2.7.1(此目录为安装目录):
tar -zxvf hadoop-2.7.1.tar.gz -C /usr/local/dsj
2.2 配置环境变量
(1)打开配置文件
vi /etc/profile
(2)文件末尾增加配置
export HADOOP_HOME=/usr/local/dsj/hadoop-2.7.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
(2)让配置生效
source /etc/profile
2.3 hdfs配置
(1)更改核心配置文件
vi /usr/local/dsj/hadoop-2.7.1/etc/hadoop/core-site.xml
增加如下配置:
<!-- hdfs通信地址 -->
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<!-- hadoop运行时产生文件的存储路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop/tmp</value>
</property>
(2)修改hdfs配置文件
vi /usr/local/dsj/hadoop-2.7.1/etc/hadoop/hdfs-site.xml
添加如下内容:
<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/hadoop/name</value>
<description>namenode上存储hdfs名字空间元数据 </description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/hadoop/data</value>
<description>datanode上数据块的物理存储位置</description>
</property>
<!-- 设置hdfs副本数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.http.address</name>
<value>master:50070</value>
</property>
(3)修改hadoop-env.sh
vi /usr/local/dsj/hadoop-2.7.1/etc/hadoop/hadoop-env.sh
原配置:export JAVA_HOME=${JAVA_HOME}
更改为JDK绝对路径:
export JAVA_HOME=/usr/local/dsj/jdk1.8.0_121
2.4 yarn配置
(1)配置mapred-site.xml
复制配置文件:
cd /usr/local/dsj/hadoop-2.7.1/etc/hadoop
cp mapred-site.xml.template mapred-site.xml
打开配置文件:
vi /usr/local/dsj/hadoop-2.7.1/etc/hadoop/mapred-site.xml
文件中增加配置:
<!-- 通知框架MR使用YARN -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
(2)配置yarn-site.xml
打开配置文件:
vi /usr/local/dsj/hadoop-2.7.1/etc/hadoop/yarn-site.xml
增加如下配置:
<!-- reducer取数据的方式是mapreduce_shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--RM的hostname-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
2.5 配置从节点
vi /usr/local/dsj/hadoop-2.7.1/etc/hadoop/slaves
更改配置如下:
slave1
slave2
2.6 拷贝主节点文件到从节点
(1)主节点拷贝hadoop文件到从节点
scp -r /usr/local/dsj/hadoop-2.7.1/ slave1:/usr/local/dsj/
scp -r /usr/local/dsj/hadoop-2.7.1/ slave2:/usr/local/dsj/
(2)主节点拷贝环境变量到从节点
scp /etc/profile slave1:/etc/profile
scp /etc/profile slave2:/etc/profile
3 配置slaver
以下均在从节点
服务器上操作。
在slave1、slave2节点上执行如下操作,使从主节点拷贝到从节点上的环境变量生效:
source /etc/profile
4 格式化节点
master节点上执行操作,格式化节点:
/usr/local/dsj/hadoop-2.7.1/bin/hdfs namenode -format
5 测试
(1)启动hdfs
start-dfs.sh
(2)启动yarn
start-yarn.sh
6 优化
(1)core-site.xml增加配置
<!-- 流文件的缓冲区 128K(默认4K) -->
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
(2)hdfs-site.xml增加配置
<!-- 缺省文件块大小128MB(默认64M)-->
<property>
<name>dfs.block.size</name>
<value>134217728</value>
</property>
<!-- NameNode 节点上面为处理datanode节点来来气的远程调用的服务线程数量(默认10) -->
<property>
<name>dfs.namenode.handler.count</name>
<value>64</value>
</property>
(3)mapred-site.xml增加配置
<!-- Map任务的中间结果是否进行压缩,减少网络带宽压力-->
<property>
<name>mapreduce.map.output.compress</name>
<value>true</value>
</property>
<!-- 压缩方式 -->
<property>
<name>mapreduce.map.output.compress.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
<!-- map任务需要的内存大小-->
<property>
<name>mapreduce.map.memory.mb</name>
<value>2048</value>
</property>
<!-- map任务需要的虚拟机核数(默认1) -->
<property>
<name>mapreduce.map.cpu.vcores</name>
<value>1</value>
</property>
<!-- reduce需要的内存大小-->
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>2048</value>
</property>
<!-- reduce需要的内存核数(默认1) -->
<property>
<name>mapreduce.reduce.cpu.vcores</name>
<value>1</value>
</property>