赞
踩
Hadoop主要由三部分组成:HDFS(分布式文件系统),MapReduce计算框架以及集中资源调度器。
从这个三个不同的角度,Hadopp将主机分为以下六种角色:
从HDFS角度出发,主机被分为:Namenode和Datanode,对应守护进程(Namenode和Datanode以及SecondaryNameNode)
从Mapreduce角度出发,主机被分为:JobTracker和TaskTracker,对应守护进程(JobTracker和TaskTracker)
从集中资源调度器角度出发,主机被分为:Master和Slave,对应守护进程(ResourceManager和NodeManager)
Hadoop有三种搭建模式,分别为:Local模式、伪分布式模式、完全分布式模式。
以下安装以hadoop3.0.3为例:
一、Local模式
Local模式是默认的模式,无需启动任何守护进程,每个程序都在单独的JVM中运行,适用于开发阶段,主要用来调试MapReduce程序逻辑正确性。
采用本地文件系统,而不是分布式文件系统。
使用Local模式不需要过多的配置,只需要安装相应版本的JDK和HADOOP,设置环境变量JAVA_HOME和HADOOP_HOME,
就可以使用了,使用hadoop -version验证安装是否成功。
配置过程如下:
- #1.首先安装JDK(hadoop3.0以上要求运行在jdk1.8及以上环境)
- #略
- #2.安装Hadoop
-
- tar -zxvf /home/hadoop-3.0.3.tar.gz
- mkdir -p /usr/local/hadoop
- cp -r /home/hadoop-3.0.3.tar.gz/* /usr/local/hadoop/
-
- #3.设置环境变量
- vim /etc/profile
-
- #增加如下内容
- export JAVA_HOME=/usr/local/java
- export CLASSPATH=&JAVA_HOME/lib
- export HADOOP_HOME=/usr/local/hadoop
- export PATH=$PATH:$JAVA_HOME:$CLASSPATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
- test:
- cd /usr/local/hadoop/
- mkdir input
- cp etc/hadoop/*.xml input/
- bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.3.jar grep input output 'dfs[a-z.]+'
- jps
-
- result:
-
- 6163 RunJar
- 6430 Jps
二、伪分布式模式
伪分布式模式使用一台主机模拟一个集群,在这个集群中,该主机既是Master又是Slave,既是JobTracker,又是TaskTracker,既是Namenode,又是Datanode.因此需要启动相应的守护进程,且是相互独立的JAVA进程。
在这种模式下,Hadoop使用的是分布式文件系统,各个作业也是由JobTraker服务,来管理的独立进程。
在单机模式之上增加了代码调试功能,允许检查内存使用情况,HDFS输入输出,以及其他的守护进程交互。类似于完全分布式模式,因此,这种模式常用来开发测试Hadoop程序的执行是否正确。
配置过程如下:
在本地模式的基础上:
- 1.配置本地服务器SSH免密码登陆(Hadoop守护进程间通过SSH协议互相访问)
-
- 2.修改$HADOOP_HOME/etc/hadoop/hadoop_env.sh
-
- export JAVA_HOME=/usr/local/java
- export HADOOP_HOME=/usr/local/hadoop
- export HADOOP_CONF_DIR=/usr/local/hadoop
-
- 3.修改$HADOOP_HOME/etc/hadoop/core-site.xml(Hadoop集群的特性,作用于全部进程及客户端)
-
- #指定hdfs访问地址
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://localhost:9000</value>
- </property>
-
- 4.修改$HADOOP_HOME/etc/hadoop/hdfs-site.xml(配置HDFS集群的工作属性)
- #指定文件备份份数
- <property>
- <name>dfs.replication</name>
- <value>1</value>
- </property>
- 5.修改$HADOOP_HOME/etc/hadoop/hdfs-site.xml(配置MapReduce集群的属性)
- #指定使用yarn资源调度
- <property>
- <name>mapreduce.framework.name</name>
- <value>yarn</value>
- </property>
- 6.修改$HADOOP_HOME/etc/hadoop/yarn-site.xml
- <property>
- <name>yarn.nodemanager.aux-services</name>
- <value>mapreduce_shuffle</value>
- </property>
- <property>
- <name>yarn.nodemanager.env-whitelist</name>
- <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
- </property>
-
-
另由于默认的
HDFS_DATANODE_USER=hdfs
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=hdfs
HDFS_SECONDARYNAMENODE_USER=hdfs
YARN_RESOURCEMANAGER_USER=yarn
YARN_NODEMANAGER_USER=yarn
我们还需要在启动脚本:start-dfs.sh、stop-dfs.sh、start-yarn.sh和stop-yarn.sh中将以上变量设置为自己创建的Linux用户(该用户需要有访问Hadoop文件的所有权限)
由于伪分布式模式使用的是分布式文件系统,因此需要格式化namenode;
执行: hadoop name -format
开始hdfs:
执行: start-dfs.sh
result:
访问:http://lcoalhost:9870 (HDFS WEB界面,3.0以前的端口号为50070)
访问:http://localhost:8088
开启:yarn:
执行:start-yarn.sh
result:
运行Hadoop Mapreduce example
执行:
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.3.jar grep /input /output 'dfs[a-z.]+'
result:
三、完全分布式模式
Hadoop的守护进程运行在由多台主机搭建的集群上,是真正的生产环境。
在所有的主机上安装JDK和Hadoop,组成相互连通的网络。
配置如下:
准备三台服务器:
10.10.10.1(master)、10.10.10.2(slave01)、10.10.10.3(slave02)
1.分别修改三台服务器:/etc/hosts,加入:
10.10.10.1 master master
10.10.10.2 slave01 slave01
10.10.10.3 slave02 slave02
2.配置三台服务器相互之间SSH免密码登陆
3.在master上安装JDK、HADOPP配置环境变量
- export JAVA_HOME=/usr/local/java
- export CLASSPATH=$JAVA_HOME/lib
- export HADOOP_HOME=/usr/local/hadoop
- export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
- export PATH=$PATH:$JAVA_HOME:$CLASSPATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
4.修改$HADOOP_CONF_DIR目录下文件
- 1.修改$HADOOP_CONF_DIR/core-site.xml
- <property>
- <name>fs.default.name</name>
- <value>hdfs://master:9000</value>
- </property>
- #hadoop临时文件在本地文件系统存放的路径
- <property>
- <name>hadoop.tmp.dir</name>
- <value>/usr/local/hadoop/tmp</value>
- </property>
- <property>
- <name>io.file.buffer.size</name>
- <value>131072</value>
- </property>
- 2.修改$HADOOP_CONF_DIR/hdfs-site.xml
- <property>
- <name>dfs.replication</name>
- <value>2</value>
- </property>
- #在程序中访问hdfs,必须要关闭权限检查
- <property>
- <name>dfs.permissions.enabled</name>
- <value>false</value>
- </property>
- #namenode数据在本地存放的路径
- <property>
- <name>dfs.namenode.name.dir</name>
- <value>/usr/local/hadoop/hdfs/name</value>
- </property>
- #datanode数据在本地存放的路径
- <property>
- <name>dfs.datanode.data.dir</name>
- <value>/usr/local/hadoop/hdfs/data</value>
- </property>
- #namenode节点地址
- <property>
- <name>dfs.namenode.http-address</name>
- <value>master:50070</value>
- </property>
- #secondary namenode地址
- <property>
- <name>dfs.namenode.secondary.http-address</name>
- <value>slave01:50090</value>
- </property>
- #开启hdfs web ui
- <property>
- <name>dfs.webhdfs.enabled</name>
- <value>true</value>
- </property>
- 3.修改$HADOOP_CONF_DIR/mapred-site.xml文件
- #使用yarn集群管理器
- <property>
- <name>mapreduce.framework.name</name>
- <value>yarn</value>
- </property>
- #指定jobhistory访问地址
- <property>
- <name>mapreduce.jobhistory.address</name>
- <value>master:10020</value>
- </property>
- #指定Jobhistory web 地址
- <property>
- <name>mapreduce.jobhistory.webapp.address</name>
- <value>master:19888</value>
- </property>
- #指定访问的jar包
- <property>
- <name>mapreduce.application.classpath</name>
- <value>/usr/local/hadoop/etc/hadoop,
- /usr/local/hadoop/share/hadoop/common/*,
- /usr/local/hadoop/share/hadoop/common/lib/*,
- /usr/local/hadoop/share/hadoop/hdfs/*,
- /usr/local/hadoop/share/hadoop/hdfs/lib/*,
- /usr/local/hadoop/share/hadoop/mapreduce/*,
- /usr/local/hadoop/share/hadoop/mapreduce/lib/*,
- /usr/local/hadoop/share/hadoop/yarn/*,
- /usr/local/hadoop/share/hadoop/yarn/lib/*</value>
- </property>
- 4.修改yarn-site.xml文件
- <property>
- <name>yarn.nodemanager.aux-services</name>
- <value>mapreduce_shuffle</value>
- </property>
- <property>
- <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
- <value>org.apache.hadoop.mapred.ShuffleHandler</value>
- </property>
- <property>
- <name>yarn.resourcemanager.address</name>
- <value>master:8032</value>
- </property>
- <property>
- <name>yarn.resourcemanager.scheduler.address</name>
- <value>master:8030</value>
- </property>
- <property>
- <name>yarn.resourcemanager.resource-tracker.address</name>
- <value>master:8031</value>
- </property>
- <property>
- <name>yarn.resourcemanager.admin.address</name>
- <value>master:8033</value>
- </property>
- <property>
- <name>yarn.resourcemanager.webapp.address</name>
- <value>master:8088</value>
- </property>
- 5.修改$HADOOP_CONF_DIR/workers文件
-
- slave01
- slave02
5.修改$HADOOP_HOME/sbin 下启动脚本
start-dfs.sh /stop-dfs.sh
- HDFS_DATANODE_USER=root
- HDFS_DATANODE_SECURE_USER=root
- HDFS_NAMENODE_USER=root
- HDFS_SECONDARYNAMENODE_USER=root
start-yarn.sh / stop-yarn.sh
- YARN_RESOURCEMANAGER_USER=root
- YARN_NODEMANAGER_USER=root
将jdk,hadoop安装文件发送到其他两台服务器的相同目录上,并增加环境变量
- scp -r /usr/local/java root@slave01:/usr/local/
- scp -r /usr/local/hadoop root@slave2:/usr/local/hadoop
格式化文件系统,在master上执行
hadoop namenode -format
执行 start-all.sh 启动集群
验证:
在master上执行 jsp,结果如下:
在slave01上执行jps,结果如下:
在slave02上执行jps,结果如下:
搭建完成
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。