文章目录
Hadoop
#基本命令
scp基本语法:
发送:scp -r 要拷贝的文件 用户@主机:路径/
拖过来:scp -r 用户@主机名:路径(文件名) 拖哪里(路径/)
在2将1的文件传给3:scp -r 用户@1:路径(文件名) 用户@3:路径/
rsync基础语法:
rsync -av 要同步的文件(夹) 用户@主机:路径/
ssh基础语法:
[student@hadoop102 .ssh]$ ssh-keygen -t rsa --生成公私密钥
[student@hadoop102 .ssh]$ ssh-copy-id hadoop103 --发送私钥给103
单独启动HDFS组件
hdfs --daemon start/stop namenode/datanode/secondarynamenode
启动/停止YARN
yarn --daemon start/stop resourcemanager/nodemanager
一、常用端口号
hadoop3.x
HDFS NameNode 内部常用端口号:8020/9000/9820
HDFS NameNode 对用户的查询端口:9870
Yarn查看任务运行情况端口号:8088
历史服务器:19888
hadoop2.x
HDFS NameNode 内部常用端口:8020/9000
HDFS NameNode 对用户的查询端口:50070
Yarn查看任务运行情况端口号:8088
历史服务器:19888
二、常用的配置文件
3.x
core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml workers
2.x
core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml slaves
1.🐘Hadoop集群配置
1.集群部署规划
- hadoop-3.1.3、Centos7
- NameNode 和 SecondaryNameNode 不要安装在同一个服务器
- ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode 配置在同一台机器上
hadoop102 hadoop103 hadoop104 HDFS NameNode
DataNode
DataNodeSecondaryNameNode
DataNodeYARN
NodeManagerResourceManager
NodeManager
NodeManage2.四个配置文件
core-site.xml
<!-- 指定NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:8020</value> </property> <!-- 指定hadoop数据的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-3.1.3/data</value> </property>
hdfs-site.xml
<!-- nn web端访问地址--> <property> <name>dfs.namenode.http-address</name> <value>hadoop102:9870</value> </property> <!-- 2nn web端访问地址--> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop104:9868</value> </property>
yarn-site.xml
<!-- 指定MR走shuffle --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定ResourceManager的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop103</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>
mapred-site.xml
<!-- 指定MapReduce程序运行在Yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
4.配置workers (此文件不能有空格、回车等多余)
主机名1(hadoop102) 主机名2(hadoop103) 主机名3(hadoop104)
4.然后三台主机同步配置文件内容
[student@hadoop102 hadoop-3.1.3]$ xsync hadoop/ xsync文件内容(此文件存放于操作用户的~/bin中,并附加x执行权限) #!/bin/bash #1. 判断参数个数 if [ $# -lt 1 ] then echo Not Enough Arguement! exit; fi #2. 遍历集群所有机器 for host in hadoop102 hadoop103 hadoop104 do echo ==================== $host ==================== #3. 遍历所有目录,挨个发送 for file in $@ do #4. 判断文件是否存在 if [ -e $file ] then #5. 获取父目录 pdir=$(cd -P $(dirname $file);pwd) #6. 获取当前文件的名称 fname=$(basename $file) ssh $host "mkdir -p $pdir" rsync -av $pdir/$name $host:$pdir else echo $file does not exists! fi done done
5.初始化集群
[student@hadoop102 hadoop-3.1.3]$ hdfs namenode -format
6.启动集群
[student@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
7.启动yarn
- 注意 yarn 在hadoop103机器上启动
[student@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
7.对比节点是否与一开始(上面👆)集群规划任务节点相同(HDFS)
访问Web端
http://hadoop102:9870 --HDFS的NameNode,可查看HDFS上存储的数据信息 http://hadoop103:8088 --ResourceManager,可查看YARN上运行的Job信息
2.集群崩溃处理方案
1.停掉所有节点
2.删除所有机器上的 data logs
3.主节点重新格式化
3.配置历史服务器
mapred-site.xml
<!-- 历史服务器端地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop102:10020</value> </property> <!-- 历史服务器web端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop102:19888</value> </property>
然后分发脚本同步机器配置文件及启动历史服务器
分发[student@hadoop102 hadoop]$ xsync mapred-site.xml 启动[student@hadoop102 hadoop-3.1.3]$ mapred --daemon start historyserver 查看[student@hadoop102 hadoop-3.1.3]$ jps 60453 NameNode 60597 DataNode 61285 JobHistoryServer --历史服务器 61142 NodeManager 61848 Jps
4.配置日志聚集功能
yarn-site.xml
<!-- 开启日志聚集功能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 设置日志聚集服务器地址 --> <property> <name>yarn.log.server.url</name> <value>http://hadoop102:19888/jobhistory/logs</value> </property> <!-- 设置日志保留时间为7天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property>
之后需要重启历史服务器与yarn (操作顺序不可变)
[student@hadoop102 hadoop-3.1.3]$ mapred --daemon stop historyserver [student@hadoop103 hadoop-3.1.3]$ sbin/stop-yarn.sh [student@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh [student@hadoop102 hadoop-3.1.3]$ mapred --daemon start historyserver
之后的任务就会生成日志信息了 在 url: hadoop102:19888 中查看
2.HDFS的Shell相关操作(开发)
1.基础命令
创建文件夹:hadoop fs -mkdir /sanguo
剪切文件到HDFS:hadoop fs -moveFromLocal ./shuguo.txt /sanguo
上传文件到HDFS(与拷贝效果相同):hadoop fs -put wuguo.txt /sanguo
获取HDFS上的文件:hadoop fs -get /sanguo/shuguo.txt
本地文件内容追加到HDFS文件内容末尾:hadoop fs -appendToFile liubei.txt /sanguo/shuguo.txt
查看HDFS文件内容:hadoop fs -cat /sanguo/shuguo.txt
删除HDFS文件或文件夹:hadoop fs -rm /sanguo/shuguo.txt
递归删除HDFS文件夹:hadoop fs -rm -r /sanguo
显示文件末尾1kb的数据:hadoop fs -tail /sanguo/shuguo.txt
1.2统计文件夹的大小信息
[student@hadoop102 ~]$ hadoop fs -du -s -h /output2
38 114 /output2
38:代表文件夹的大小
114:代表38*3个副本
/output2:代表查看的目录
1.3设置HDFS中文件的副本数量
^C[student@hadoop102 ~]$ hadoop fs -setrep 10 /output2/part-r-00000
Replication 10 set: /output2/part-r-00000
[student@hadoop102 ~]$ hadoop fs -ls /output2/*
-rw-r--r-- 3 student supergroup 0 2022-01-08 15:33 /output2/_SUCCESS
-rw-r--r-- 10 student supergroup 38 2022-01-08 15:33 /output2/part-r-00000
这里设置的副本数只是记录在NameNode的元数据中,是否真的会有这么多副本,还得看DataNode的数量。因为目前只有3台设备,最多也就3个副本,只有节点数的增加到10台时,副本数才能达到10。
2.HDFS的API参数优先级
①linux里hdfs配置文件 和 ②Java项目hdfs-site.xml配置文件 and ③java类代码中 三者优先级如下
③ > ② > ①
3.JavaAPI操作HDFS编程
详见:Java操作HDFS