四种部署模式
本地模式,伪分布式模式,完全分布式模式,HA完全分布式模式
区分的依据是NameNode、DataNode、ResourceManager、NodeManager等模块运行在几个JVM进程、几个机器。
模式名称 | 各个模块占用的JVM进程数 | 各个模块运行在几个机器数上 |
---|---|---|
本地模式 | 1 | 1 |
伪分布式 | N | 1 |
分布式 | N | N |
HA分布式 | N | N |
1.本地模式
所有的模块都运行在一个JVM进程中,使用的不是HDFS而是本地文件系统.下载的安装包不进行任何配置,默认就是本地模式
- 下载hadoop安装包 hadoop-3.1.1.tar.gz
- 安装前确认已经安装了JDK
echo $JAVA_HOME
- 解压文件到指定目录
这样我们就完成了本地模式的搭建.我们可以运行一下hadoop自带的wordcount例子来实验一下
首先,准备一个输入文件word_count.input
,内容可以如下
hadoop mapreduce hive
hbase spark storm
sqoop hadoop hive
spark hadoop
运行wordcount demo
[hadoop@bigdata-senior01 hadoopstandalone]$ ${HADOOP_HOME}/bin/hadoop jar ${HADOOP_HOME}/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.1.jar wordcount ~/word_count.input ~/word_count_output
运行完毕后可以看到输入结果是一个目录,目录下有两个文件:_SUCCESS
和part-r-00000
,其中part-r-00000
是结果输入,_SUCCESS
表示任务运行成功
2.伪分布式模式
1.配置hadoop-env.sh
,mapred-env.sh
,yarn-env.sh
中的JAVA_HOME参数
export JAVA_HOME=${你的JDK目录}
2.配置core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/export/hadoop/tmp</value>
</property>
fs.defaultFS
配置的是HDFS的地址hadoop.tmp.dir
配置的是NameNode数据存储的目录
hadoop.tmp.dir
默认地址是/tmp/hadoop-${user.name}
,每次系统重启后,tmp目录下的数据将会被清空
3.格式化HDFS并重启
- 配置hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
这里的dfs.replication
指的是HDFS存储时的备份数量
- 格式化HDFS
${HADOOP_HOME}/bin/hdfs namenode -format
格式化是对HDFS这个分布式文件系统中的DataNode进行分块,统计所有分块后的初始元数据的存储在NameNode中
格式化后可以查看指定的hadoop.tmp.dir
目录下是否有dfs目录
4.启动NameNode和DataNode
[root@izj6cj3wje0m1jxumjkuelz ~]# hdfs --daemon start namenode
[root@izj6cj3wje0m1jxumjkuelz ~]# hdfs --daemon start secondarynamenode
[root@izj6cj3wje0m1jxumjkuelz ~]# hdfs --daemon start datanode
[root@izj6cj3wje0m1jxumjkuelz ~]# jps
16936 NameNode
3034 Bootstrap
17181 Jps
17150 SecondaryNameNode
17038 DataNode
5.测试在HDFS上创建目录、上传和下载文件
首先创建一个test目录
[root@izj6cj3wje0m1jxumjkuelz ~]# hdfs dfs -mkdir /test
[root@izj6cj3wje0m1jxumjkuelz ~]# hdfs dfs -ls /
Found 5 items
drwxr-xr-x - root supergroup 0 2018-08-13 20:51 /demo
drwxr-xr-x - root supergroup 0 2018-08-12 11:06 /demo1
drwxr-xr-x - root supergroup 0 2018-08-13 20:52 /test
drwx------ - root supergroup 0 2018-08-12 11:20 /tmp
drwxr-xr-x - root supergroup 0 2018-08-12 11:18 /wordcountdemo
上传文件到HDFS上
[root@izj6cj3wje0m1jxumjkuelz ~]# hdfs dfs -put ~/word_count.input /test
[root@izj6cj3wje0m1jxumjkuelz ~]# hdfs dfs -ls /test
Found 1 items
-rw-r--r-- 1 root supergroup 71 2018-08-13 20:53 /test/word_count.input
下载文件到本地目录
[root@izj6cj3wje0m1jxumjkuelz ~]# hdfs dfs -get /test/word_count.input tmp/
[root@izj6cj3wje0m1jxumjkuelz ~]# ls tmp/
word_count.input
6.配置和启动Yarn
- 首先配置mapred-site.xml,指定mapreduce运行在yarn框架上
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
- 配置yarn-site.xml
<!--配置yarn的混选方式,选择为默认混选算法-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定resourcemanager运行在哪个节点上-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<!-- Site specific YARN configuration properties -->
<!--开启日志聚集-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>106800</value>
</property>
- 启动ResourceManager
[root@izj6cj3wje0m1jxumjkuelz etc]# yarn --daemon start resourcemanager
[root@izj6cj3wje0m1jxumjkuelz etc]# yarn --daemon start nodemanager
[root@izj6cj3wje0m1jxumjkuelz etc]# jps
18401 NodeManager
18515 Jps
16936 NameNode
3034 Bootstrap
17979 ResourceManager
17150 SecondaryNameNode
17038 DataNode
- 开启历史服务
Hadoop开启历史服务可以在web页面上查看Yarn上执行job情况的详细信息。可以通过历史服务器查看已经运行完的Mapreduce作业记录,比如用了多少个Map、用了多少个Reduce、作业提交时间、作业启动时间、作业完成时间等信息
[root@izj6cj3wje0m1jxumjkuelz etc]# mapred --daemon start historyserver
- 开启日志聚集
在yarn-site.xml中配置
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>106800</value>
</property>
yarn.log-aggregation-enable:是否启用日志聚集功能。
yarn.log-aggregation.retain-seconds:设置日志保留时间,单位是秒