hadoop 2.9.2 完全分布式安装
完全分布式环境部署Hadoop
完全分布式是真正利用多台Linux主机进行部署Hadoop,对Linux机器集群进行规划,使Hadoop各个模块分别部署在不同的多台机器上;
1.环境准备
虚拟机安装,在此使用KVM虚拟机;
2.网络配置
配置完成后可以访问外网即可;
3.hostname配置
将三台主机分别命名加以区分;
4.hosts配置
修改主机名
hostname hadoop-node1
hostname hadoop-node2
hostname hadoop-node3
将三台主机名和IP地址对应关系写入hosts文件;
vim /etc/hosts
10.10.2.177 hadoop-node1
10.10.2.178 hadoop-node2
10.10.2.179 hadoop-node3
5.服务器功能角色规划
hadoop-node1 hadoop-node2 hadoop-node3
NameNode ResourceManage
DataNode DataNode DataNode
NodeManager NodeManager NodeManager
HistoryServer SecondaryNameNode
6.在一台机器上安装Hadoop
#在此,先在第一台机器上解压、配置hadoop,然后将配置文件分发到另外两台机器上的方式来安装集群;
1)解压hadoop目录
tar -zxvf /opt/hadoop-2.9.2.tar.gz -C /opt/modules/app/
2)配置Hadoop JDK路径,修改hadoop-env.sh、mapred-env.sh、yarn-env.sh文件中的JDK路径;
export JAVA_HOME="/opt/modules/jdk1.7.0_80"
3)配置core-site.xml
cd /opt/modules/app/hadoop-2.9.2/etc/hadoop
vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/data/tmp</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value></value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value></value>
</property>
</configuration>
#fs.defaultFS为NameNode的地址
#hadoop.tmp.dir为hadoop临时目录的地址,默认情况下,NameNode和DataNode的数据文件都会存在这个目录下对应的子目录中。若此目录不存在,则须手动创建;
4)配置slaves
#指定HDFS上有哪些datanode节点
cd /opt/modules/hadoopstandalone/hadoop-2.9.2/etc/hadoop
vim slaves
hadoop-node1
hadoop-node2
hadoop-node3
5)配置hdfs-site.xml
cd /opt/modules/app/hadoop-2.9.2/etc/hadoop
vim hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop-node3:50090</value>
</property>
</configuration>
#dfs.namenode.secondary.http-address 是指定secondaryNameNode 的http访问地址和端口号,在此将hadoop-node3规划为SecondaryNameNode服务器;
6)配置yarn-site.xml
cd /opt/modules/app/hadoop-2.9.2/etc/hadoop
vim yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-node2</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>106800</value>
</property>
#根据规划 yarn.resourcemanager.hostname 这个指定resourcemanager 服务器指向 hadoop-node2
#yarn.log-aggregation-enable 是配置是否启用日志聚集功能
#yarn.log-aggregation-retain-seconds 是配置聚集的日志在HDFS上最多保存多长时间
7)配置mapred-site.xml
#从mapred-site.xml.template 复制一个mapred-site.xml 文件;
cd /opt/modules/app/hadoop-2.9.2/etc/hadoop
cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop-node1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop-node1:19888</value>
</property>
</configuration>
#mapreduce.framework.name 设置mapreduce任务运行在yarn上
#mapreduce.jobhistory.address 是设置mapreduce的历史服务器安装在hadoop-node1机器上
#mapreduce.jobhistory.webapp.address 是设置历史服务器的web页面地址和端口号
7.设置SSH无密码登录
Hadoop集群中的各个机器间会相互通过SSH访问,每次访问输入密码不现实,所以需配置各个机器间SSH无密码登录;
1)在hadoop-node1上生成公钥
ssh-keygen -t rsa
#全部回车即可,都是默认值。完成后当前用户home目录下的.ssh中会生成公钥文件id_rsa.pub和私钥文件id_rsa
2)分发公钥
ssh-copy-id hadoop-node1
ssh-copy-id hadoop-node2
ssh-copy-id hadoop-node3
3)设置hadoop-node2/hadoop-node3到其他机器的免密码登录
同理hadoop-node1操作,生成公钥、私钥,然后分发到其他三台机器即可;
8.分发hadoop文件
1)三台机器分别创建Hadoop目录
mkdir -p /opt/modules/app
2)通过scp分发hadoop文件
#Hadoop根目录下share/doc目录是存放hadoop文档,文件较大,分发前可以直接删除,以提高分发速度;
scp -r /opt/modules/app/hadoop-2.9.2/ hadoop-node2:/opt/modules/app/
scp -r /opt/modules/app/hadoop-2.9.2/ hadoop-node3:/opt/modules/app/
9.格式化NameNode
#在NameNode机器上执行格式化-master节点
/opt/modules/app/hadoop-2.9.2/bin/hdfs namenode -format
#注意:如需重新格式化NameNode,需将原来NameNode和DataNode下的文件全部删除,否则会报错。NameNode和DataNode所在目录是core-site.xml中hadoop.tmp.dir、dfs.namenode.dir、dfs.datanode.data.dir属性配置的;
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/data/tmp</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/data</value>
</property>
#因为每次格式化,默认是创建一个集群ID,并写入NameNode和DataNode的VERSION文件中(VERSION文件所在目录为dfs/name/current和dfs/data/current),重新格式化时,默认会生成一个新的集群ID,如果不删除原来的目录,会导致namenode中的VERSION文件中是新的集群ID,而DataNode中是旧的集群ID,造成不一致报错;
#另一种方法是格式化时指定集群ID参数,指定为集群旧ID值;
10.启动集群
1)启动HDFS
#hadoop-node1节点启动HDFS
/opt/modules/app/hadoop-2.9.2/sbin/start-dfs.sh
2)启动YARN
#hadoop-node2节点启动yarn
/opt/modules/app/hadoop-2.9.2/sbin/start-yarn.sh
#在hadoop-node2上启动ResourceManager
cd /opt/modules/app/hadoop-2.9.2
sbin/yarn-daemon.sh start resourcemanager
3)启动日志服务器
#根据规划,在hadoop-node3上启动MapReduce日志服务
cd /opt/modules/app/hadoop-2.9.2/sbin/mr-jobhistory-daemon.sh start historyserver
#查看启动状态
jps
4)查看HDFS 的Web页面
http://10.10.2.177:50070
5)查看YARN的Web页面
http://10.10.2.178:8088
11.测试Job
在此,用hadoop自带的wordcount例子在本地模式下测试运行mapreduce
测试过程须在yarn运行节点(即hadoop-node2)上执行,包括创建hdfs存储目录,上传wc.input测试文件,输出计算测试结果;
1)准备mapreduce 输入文件wc.input
cd /opt/data/
touch wc.input
vim wc.input
hadoop mapreduce hive
hbase spark storm
sqoop hadoop hive
spark hadoop
2)在HDFS上创建输入目录input
cd /opt/modules/app/hadoop-2.9.2/
bin/hdfs dfs -mkdir /input
3)将wc.input上传到HDFS
cd /opt/modules/app/hadoop-2.9.2/
bin/hdfs dfs -put /opt/data/wc.input /input/wc.input
4)运行hadoop自带的mapreduce Demo
cd /opt/modules/app/hadoop-2.9.2/
bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount /input/wc.input /output
5)查看输出文件
cd /opt/modules/app/hadoop-2.9.2/
bin/hdfs dfs -ls /output
12.状态截图
版本 2.9.2
http://10.10.2.177:50070/dfshealth.html#tab-overview
http://10.10.2.178:8088/cluster/nodes
版本 3.0.0