hadoop完全分布式搭建(CentOS 6.5)
1. 关闭防火墙
sudo service iptables stop
关闭防火墙自启
sudo chkconfig iptables off
注意:所有的机器防火墙都要关
2. 修改hostname
- master节点
vim /etc/sysconfig/network
# ----------
HOSTNAME=master
- slave1节点
vim /etc/sysconfig/network
# ----------
HOSTNAME=slave1
- slave2节点
vim /etc/sysconfig/network
# ----------
HOSTNAME=slave2
3. 修改网络映射hosts
vim /etc/hosts
# -------
192.168.100.132 master
192.168.100.133 slave1
192.168.100.134 slave2
注意:所有的机器都要改
4. 配置免密登录
- 生成密钥
ssh-keygen -t rsa # 一路回车
- 将集群中的所有公钥集中到某台机器,生成免密授权登录文件
- slave1:
bash
scp ~/.ssh/id_rsa.pub master:/home/hduser/.ssh/slave1
- slave2:
bash
scp ~/.ssh/id_rsa.pub master:/home/hduser/.ssh/slave1
- master
bash
cat id_rsa.pub >> authorized_keys
cat slave1 >> authorized_keys
cat slave2 >> authorized_keys
chmod 600 authorized_keys # 必须改,不然不能免密登录
- slave1:
- 将授权列表分发给slave1和slave2
scp ~/.ssh/authorized_keys slave1:/home/hduser/.ssh/authorized_keys
scp ~/.ssh/authorized_keys slave2:/home/hduser/.ssh/authorized_keys
5. 准备软件环境
把Hadoop、JDK的压缩包上传到集群中的每台机器、并解压。
可以先配好一台机器中的配置文件,再将软件复制到其他机器,减少配置的工作量。
6. 配置环境变量
vim /etc/profile
# -------
export HADOOP_HOME=/hadoop/hadoop-2.6.5
export JAVA_HOME=/hadoop/jdk1.8.0_172
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$JAVA_HOME/bin
注意:所有的机器都要改
7. 修改hadoop配置文件
7.1 hadoop-env.sh 和 yarn-env.sh
添加JAVA_HOME
7.2 core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
<description>默认的文件系统</description>
</property>
<!-- 8020 9000 都是HDFS的RPC端口,都可以 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/hadoop-2.6.5/data</value>
<description></description>
</property>
7.3 hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>2</value>
<description>数据块备份数</description>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
<description>关闭权限检查</description>
</property>
7.4 mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<description>指定运行mapreduce的框架</description>
</property>
7.5 yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
<description>指定namenode节点的地址</description>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<description>NodeManager上运行的附属服务</description>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
<description>指定shuffle类</description>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
<description>是否启用日志聚合,将slave节点的日志聚合至master</description>
</property>
7.6 配置slaves
slave1
slave2
8. 格式化namenode
hadoop namenode -format
9. 启动hadoop
# 启动HDFS
start-dfs.sh
# 启动yarn
start-yarn.sh
10. web端测试
- HDFS的web端: http://master:50070
- MapReduce的web端: http://master:8088
11. hdfs上传下载文件测试
hadoop fs -put aa.txt /
hadoop fs -get /aa.txt
12. 测试MapReduce
使用hadoop自带的测试例
* 计算圆周率
hadoop jar hadoop-mapreduce-examples-2.6.5.jar pi 5 5
- wordcount(单词计数)
hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount <hdfs中的输入文件> <hdfs中输出目录>
注意:指定的输出目录在HDFS中必须 不存在,否则会出错
13. 补充
13.1 可能出现的错误
13.1.1 System times on machines may be out of sync. Check system time and time zones.
需要同步集群的时间,解决方案如下:
sudo yum -y install ntp ntpdate
ntpdate cn.pool.ntp.org
13.2 查看MapReduce运行历史日志
在mapred-site.xml增加配置
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
<description>MapReduce JobHistory Server IPC host:port</description>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
<description>MapReduce JobHistory Server Web UI host:port</description>
</property>
启动服务
mr-jobhistory-daemon.sh start historyserver