准备
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 2
- sky 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
- # 通过 jps 查看进程
- node1> jps
- ...
- [pid] JobHistoryServer
- ...
通过浏览器访问 http://node1:19888 :
over
来源: http://www.bubuko.com/infodetail-3319354.html