准备
1、三台Centos7的机器,在/etc/hosts中都加上所有的hostname解析:
172.20.0.4 node1
172.20.0.5 node2
172.20.0.6 node3
2、配置node1到三台机器的免密登录
3、全部安装jdk8
4、官网下载安装包:hadoop-2.7.7.tar.gz(推荐中国科学技术大学开源镜像:http://mirrors.ustc.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz)
5、计划:node1作为namenode和datanode,node2和node3作为datanode
配置
三台都创建路径/mydata/,并配置环境变量:
export HADOOP_HOME=/mydata/hadoop-2.7.7
export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
下面在node1上修改hadoop的配置,解压hadoop-2.7.7.tar.gz到/mydata/,进入/mydata/hadoop-2.7.7/etc/hadoop/,修改以下文件(有些文件需要去掉,template后缀,或拷贝一份重命名):
<!-- 文件名 core-site.xml --><configuration> <property> <name>fs.defaultFS</name> <value>hdfs://node1:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/mydata/data/hadoop-${user.name}</value> </property> </configuration>
<!-- 文件名 hdfs-site.xml --> <configuration> <property> <name>dfs.replication</name> <value>2</value> </property> </configuration>
<!-- 文件名 mapred-site.xml --> <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
<!-- 文件名 yarn-site.xml --> <configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>node1</value> </property></configuration>
<!-- 文件名 slaves --> node1 node2 node3
特别说明 | |
fs.defaultFS | namenode上文件系统的地址 |
hadoop.tmp.dir | 多个路径的基础,包括namenode和datanode的数据,默认是/tmp/hadoop-${user.name} |
dfs.replication | 副本数,这里设为2,这样集群中共三份数据,适用日常大部分情况了 |
yarn.resourcemanager.hostname | yarn资源管理器所在host |
slaves | 该文件中列出的是作为从节点的datanode,若node1只打算作为namenode则不需要写进去 |
默认日志目录在$HADOOP_HOME/logs,pid文件在/tmp,可以进行修改:
# 文件名 hadoop-env.sh export HADOOP_PID_DIR="/mydata/data/pid" export HADOOP_LOG_DIR="/mydata/logs/hadoop"
# 文件名 yarn-env.sh export YARN_LOG_DIR="/mydata/logs/yarn" export YARN_PID_DIR="/mydata/data/pid"
配置完成后将hadoop程序文件拷贝到其他两台:
node1> scp /mydata/hadoop-2.7.7/ [email protected]:/mydata/ node1> scp /mydata/hadoop-2.7.7/ [email protected]:/mydata/
启动
需要先在node1初始化namenode(只有第一次启动前需要,除非删除了hadoop.tmp.dir下namenode的数据):
node1> hdfs namenode -format
看到 Storage directory /mydata/data/hadoop-root/dfs/name has been successfully formatted. 则表示成功
下面先启动hdfs,后启动yarn:
node1> start-dfs.sh node1> start-yarn.sh
验证node1的进程:
node1> jps [pid] Jps [pid] DataNode [pid] NameNode [pid] SecondaryNameNode [pid] NodeManager [pid] ResourceManager
验证node2和node3的进程(两台应该是一样的):
node2> jps [pid] DataNode [pid] Jps [pid] NodeManager
测试
通过浏览器可以访问以下地址:
namenode的后台 | http://node1:50070 |
yarn资源管理的后台 | http://node1:8088 |
前者切换到 Datanodes :
后者进入 Cluster -> Nodes :
下面执行一个官方示例(wordcount),先准备两个文件,内容如下:
# 文件名 1.txt 天空 sky 天空 sky 天空 sky # 文件名 2.txt 海洋 ocean 海洋 ocean
将这两个文件上传到hdfs,然后执行任务:
# 创建路径(将root改为自己的用户名)node1> hdfs dfs -mkdir -p /user/root/input# 上传文件node1> hdfs dfs -put *.txt input# 执行wordcount任务统计文件中每个单词的数量,并等待其执行结束node1> hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount input output# 查看结果node1> hdfs dfs -cat output/*ocean 2sky 3天空 3海洋 2# 若要重复执行任务,需要删除output文件夹,或者在命令中换一个输出目录node1> hdfs dfs -rm -r output
可以在yarn的资源管理平台 Cluster -> Applications 查看到该任务:
启用jobhistory
这个不是必须的,但可以更好的查看job的历史记录和管理job的日志
# 文件名 mapred-env.sh export HADOOP_MAPRED_LOG_DIR="/mydata/logs/mapred" export HADOOP_MAPRED_PID_DIR="/mydata/data/pid"
<!-- 文件名 mapred-site.xml --> <property> <name>mapreduce.jobhistory.address</name> <value>node1:10020</value> </property>
<!-- 文件名 yarn-site.xml 日志聚合,开启后job的日志不再存到node本地,而是上传到hdfs --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property>
停止集群:
node1> stop-yarn.sh node1> stop-dfs.sh
然后将修改的配置同步更新到其他所有节点,并在启动集群后启动historyserver:
node1> start-yarn.sh node1> start-dfs.sh node1> mr-jobhistory-daemon.sh start historyserver
通过浏览器访问 http://node1:19888 :
over
原文地址:https://www.cnblogs.com/toSeek/p/11981809.html