理解与搭建hadoop
本文目的是提供一个最小化的hadoop配置与安装指南,版本使用最新稳定版本hadoop 2.7.3,它利用yarn实现资源管理。
架构
第二代hadoop在存储方面依旧基于namenode和datanode的架构来实现hdfs;在map-reduce方面架构改变很大,hadoop将集群资源管理和任务执行交给了yarn框架,并在yarn框架上开发了hadoop这个application来做调度。
hadoop通过提供客户端、applicationMaster、若干类库,从而可以让用户在yarn上轻松的执行map-reduce程序,在部署hadoop之前一定要理解yarn架构,否则寸步难行:点我学习。
另外,2.x版本已经支持namenode和resourcemanager的高可用,它们基于zookeeper以及日志实现,对于这块的配置在此不做探究。
安装
下载hadoop
在这里下载2.7.3的binary版本,解压到/root/hadoop:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[root@localhost hadoop]# pwd /root/hadoop [root@localhost hadoop]# ll 总用量 112 drwxr-xr-x. 2 root root 194 2月 14 01:01 bin drwxr-xr-x. 6 root root 72 2月 14 01:17 data drwxr-xr-x. 3 root root 20 8月 18 09:49 etc drwxr-xr-x. 2 root root 106 8月 18 09:49 include drwxr-xr-x. 3 root root 20 8月 18 09:49 lib drwxr-xr-x. 2 root root 239 8月 18 09:49 libexec -rw-r--r--. 1 root root 84854 8月 18 09:49 LICENSE.txt drwxr-xr-x. 3 root root 4096 2月 14 02:02 logs -rw-r--r--. 1 root root 14978 8月 18 09:49 NOTICE.txt -rw-r--r--. 1 root root 1366 8月 18 09:49 README.txt drwxr-xr-x. 2 root root 4096 8月 18 09:49 sbin drwxr-xr-x. 4 root root 31 8月 18 09:49 share |
添加必要环境变量
有了这两个环境变量,其他的环境变量基本都会自动生成,将它们加到~/.bashrc里:
1 2 |
export JAVA_HOME=/usr export HADOOP_HOME=/root/hadoop |
etc/hadoop/core-site.xml
1 2 3 4 5 6 |
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://172.18.9.75:11000</value> </property> </configuration> |
- fs.defaultFS:客户端访问hdfs的地址
etc/hadoop/hdfs-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<configuration> <property> <name>dfs.namenode.name.dir</name> <value>file:/root/hadoop/data/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/root/hadoop/data/datanode</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration> |
- dfs.namenode.name.dir:namenode的数据存储目录
- dfs.datanode.data.dir:datanode的数据存储目录
- dfs.replication:文件副本数为1,因为我只有一台虚拟机,所以只需要保存1份,生产环境建议3份。
etc/hadoop/yarn-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.resourcemanager.hostname</name> <value>172.18.9.75</value> </property> <property> <name>yarn.nodemanager.hostname</name> <value>172.18.9.75</value> </property> <property> <name>yarn.nodemanager.local-dirs</name> <value>file:/root/hadoop/data/nodemanager</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration> |
- yarn.resourcemanager.hostname:resourcemanage部署的机器host
- yarn.nodemanager.hostname:nodemanager部署的机器host
- yarn.nodemanager.local-dirs:nodemanager的数据存储目录
- yarn.nodemanager.aux-services:配置支持mapreduce的shuffle
etc/hadoop/mapred-site.xml
1 2 3 4 5 6 7 8 9 10 |
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>yarn.app.mapreduce.am.staging-dir</name> <value>/root/hadoop/data/staging</value> </property> </configuration> |
- mapreduce.framework.name:使用yarn架构(默认不是yarn,一定要注意)
- yarn.app.mapreduce.am.staging-dir:mapreduce中间数据和准备数据的存储临时目录
启动
namenode
1 |
sbin/hadoop-daemon.sh start namenode |
datanode
1 |
sbin/hadoop-daemon.sh start datanode |
resourcemanager
1 |
sbin/yarn-daemon.sh start resourcemanager |
nodemanager
1 |
sbin/yarn-daemon.sh start nodemanager |
job historyserver
1 |
sbin/mr-jobhistory-daemon.sh start historyserver |
访问Web UI
hdfs
1 |
http://172.18.9.75:50070/ |
yarn
1 |
http://172.18.9.75:8088/ |
job historyserver
1 |
http://172.18.9.75:19888/ |
执行mapreduce
上传input文件
hadoop包里有一个NOTICE.txt文件,创建一个/input目录,将NOTICE.txt上传到目录里:
1 2 3 4 |
[root@localhost hadoop]# pwd /root/hadoop [root@localhost hadoop]# bin/hadoop fs -mkdir /input [root@localhost hadoop]# bin/hadoop fs -put ./NOTICE.txt /input |
执行streaming
1 |
bin/hadoop jar ./share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar -input /input -output /output -mapper /bin/cat -reducer /bin/uniq |
该例子将文件按行去重并输出结果在/output目录:
1 2 3 4 |
[root@localhost hadoop]# bin/hadoop fs -ls /output Found 2 items -rw-r--r-- 1 root supergroup 0 2017-02-14 02:48 /output/_SUCCESS -rw-r--r-- 1 root supergroup 0 2017-02-14 02:48 /output/part-00000 |
MapReduce执行原理可以参考这里。
本文安装原则:端口基本采用默认,只改hostname,重要数据目录全部存储到data。
如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~

One thought on “理解与搭建hadoop”