启动集群
配置相关注意事项:
- NameNode和SecondaryNameNode不要放在同一个物理机上,比较消耗内存
- ResourceManager是消耗内存,不要和NameNode、SecondaryNameNode放在同一个物理机上
如果三台机器,可参考以下配置:
hadoop1 | hadoop2 | hadoop3 | |
---|---|---|---|
HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
Yarn | NodeManager | ResourceManager NodeManager | NodeManager |
hadoop 配置文件分为:默认配置文件、自定义配置文件:
默认配置文件:
core-default.xml 、hdfs-default.xml、yarn-default.xml、mapred-default.xml,在在hadoop安装路径/share/hadoop下的/common/hadoop-common-3.1.4.jar、/hdfs/hadoop-hdfs-3.1.4.jar、/yarn/hadoop-yarn-common-3.1.4.jar、/mapreduce/hadoop-mapreduce-client-core-3.1.4.jar
自定义配置文件:
core-site.xml 、hdfs-site.xml、yarn-site.xml、mapred-site.xml,在hadoop安装路径/etc/hadoop下
1. 自定义配置集群
- core-site.xml
<!--指定NameNode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:8020</value>
</property>
<!--指定hadoop的存储目录,如不存在自动创建-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.4/data</value>
</property>
<!--配置HDFS网页登录为静态用户,可操作网页-->
<property>
<name>hadoop.http.staticuser.user</name>
<value>julian</value>
</property>
- hdfs-site.xml
<!--nn web 访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop1:9870</value>
</property>
<!--2nn web访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop3:9868</value>
</property>
- yarn-site.xml
<!--指定mr走shuffle-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定resource manager的机器地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop2</value>
</property>
<!--继承环境变量,3.2版本之后不需要配这条-->
<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>
- mapred-site.xml
<!--配置mapreduce运行在yarn上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
之后记住,/etc/workers里添加主机名称:hadoop1、hadoop2…,注意workers里面不允许有空格和换行
2. 启动集群
- 第一次使用需要对NameNode做初始化:
hdfs namenode -format
, 之后会在当前机器的hadoop目录下创建data 和 logs目录 - 启动HDFS,命令:
sbin/start-dfs.sh
,可通过jps查看每台机器相关进程,可通过之前配置web页面查看hadoop1:9870
- 启动yarn,注意需要在对应resource manager机器上启动,命令:
sbin/start-yarn.sh
,可通过web页面查看信息:hadoop2:8088/
3. 测试
- 在hadoop1上通过hdfs命令创建目录:
hadoop fs -mkdir /input
,可通过web页面查看结果 - 上传文件:
hadoop fs -put xx/word.txt /input
- 测试mapreduce:
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.4.jar wordcount /input /output3
,注意这里的/input 和/output3都是hdfs下的,且输出目录不能是已存在的
4. 故障解决
若不小心删除了相关的namenode等数据,可以通过重新初始化解决
- 停掉yarn和hdfs的进程
- 清除每个机器上的data和logs目录,因为每次初始化后的datanode和namenode都是对应的
- 重新初始化
hdfs namenode -format
配置记录历史的服务器
在mapred-site.xml配置文件中加入以下配置
- mapred-site.xml
<!--配置yarn历史服务器地址-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop2:10020</value>
</property>
<!--配置yarn历史服务器web查看地址-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop2:19888</value>
</property>
-
之后手动启动历史服务器:
mapred --daemon start historyserver
-
访问yarn配置的暴露给web的8088页面:
hadoop2:8088
,能看到yarn任务的相关信息,点击右侧的历史按钮,跳转到历史服务器19888端口,可看到一次任务map reduce的详细信息
配置日志聚集功能
- 在
yarn-site.xml
里配置相关功能
<!--开启日志聚集功能-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!--配置日志服务器聚集地方-->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop2:19888/jobhistory/logs</value>
</property>
<!--配置日志保持维持7天-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
- 重启历史服务器和yarn:
停掉历史服务器:mapred --daemon stop historyserver
重启yarn:stop-yarn.sh
start-yarn.sh
启动历史服务器:mapred --daemon start historyserver
- 再次执行wordcount任务:
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.4.jar wordcount /input /output4
可以通过yarn的web页面history->log查看日志信息
单节点启动/停用单个服务
- HDFS:
hdfs --daemon start/stop namenode/datanode/secondarynamenode
- Yarn:
yarn --daemon start/stop resourcemanager nodemanager