一.配置hdfs的三个进程以本地机器名comerdata001启动
目的:配置hdfs的老大NN、老二SNN、小弟DN三个进程以本地机器名comerdata001启动
好处:hdfs的三个进程和HA都是以机器名配置和启动的,这样的好处在于如果以后ip变化了,不用去修改配置文件,只需要直接修改机器的hosts文件即可
准备工作:
1.登录到hadoop001用户并切换到~/app/hadoop目录下
ps -ef | grep hadoop #查看hadoop进程
sbin/start -dfs.sh #启动服务 sbin/stop -dfs.sh #关闭服务
2.ifconfig #查看Linux的ip地址
修改机器名:
vi /etc/hosts #配置hadoop001用户的ssh信任关系
进入之后在最后一行输入ip 机器名
注意:进入之后第一行和第二行千万不能删除!!!
(一).配置Namenode以comerdata001启动
cd /home/hadoop001/app/hadoop/etc/hadoop
vi core-site.xml #进入之后,第一行、第二行千万不能删除!!!
在
(二).配置Datanode以comerdata001启动
cd /home/hadoop001/app/hadoop/etc/hadoop
cat workers #查看小弟DN 【注意】:workers是3.x版本的小弟DN配置文件;2.x版本的小弟DN配置文件是slaves(奴隶变工人)
vi workers #进入之后直接将localhost改为comerdata001即可
(三).配置Secondary Namenode以comerdata001启动
1.先看官网配置文件的参数
https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
其中0.0.0.0代表SNN本身和hostname;9868是默认端口号
【注意】:9868/9869是3.x版本的老二SNN的默认端口;
2.x版本的老二SNN的默认端口是50090、50091
2.配置
cd /home/hadoop001/app/hadoop/etc/hadoop
vi hdfs-site.xml #进入之后,第一行、第二行千万不能删除!!!
在
配置NN、SNN和DN三个进程以comerdata001启动后,
cd /home/hadoop001/app/hadoop (cd ~/app/hadoop)
sbin/stop-dfs.sh #关闭三个进程
ps -ef | grep hadoop #查看进程是否完全关闭
sbin/start-dfs.sh #启动三进程
!!!此时能明显看出老大NN和老二SNN是以comerdata001启动的,但是不能看出小弟DN以什么启动,这时候可以通过log日志查看一下小弟DN是否以comerdata001启动
cd ~/app/hadoop/logs 然后ll 即可。
二./tmp目录、pid文件及更改数据存储目录
(一)./tmp目录、pid文件
用于控制进程的:进程启动会写一个pid;进程停止从pid文件读取进程号,然后kill -9 进程号
pid指的是服务的进程号
cd /tmp 【注意:】这里的tmp目录是系统的tmp目录哟
cd hadoop-hadoop001 然后ll,显示dfs和mapred目录,其中dfs是配置目录和数据存储目录。
ll /tmp
cat cat hadoop-hadoop001-datanode.pid #显示35141,即datanode的pid是35141,也即datanode服务的进程号是35141.
ps -ef | grep 35141 #通过pid查看进程
!!!【问题】:为什么pid文件不能放在/tmp目录(系统自带的tmp目录)下面呢?
因为/tmp目录默认30天自动清除,到时候pid的文件就没有了,会影响服务的启动和重启。
下面手动删除DN的pid文件来模拟此过程:
①rm -f hadoop-hadoop001-datanode.pid #删除DN的pid文件
②sbin/stop-dfs.sh #(系统维护的时候)停止hdfs进程,但是表面上看没有任何问题
③ps -ef | grep hadoop #此时就会发现DN根本停不掉
④sbin/start-dfs.sh #启动服务进程,这时候表面上看也没有任何问题
⑤ps -ef | grep hadoop #但是此时就会发现DN的pid根本没有变化(还是之前的pid)
恶果:维护的时候,你以为更新配置或者更新jar ,DN重启生效了。其实DN压根都没有重启。
所以pid文件一定不能放在系统原有的/tmp目录里面。
(二).更改数据存储目录(2.x版本)
由上面知道pid文件放在系统原有的/tmp目录里面非常危险,其实数据存储目录也在该目录里面,也同样危险,所以要把它们放在用户自己的家目录里面。
cd ~/app/hadoop/etc/hadoop
vi core-site.xml #进入之后新增:
kill -9 NN、SNN、DN的pid
cd ~/tmp
mv /tmp/hadoop-hadoop001 /home/hadoop001/tmp
su
cd /tmp
rm -rf *.pid
再次启动:
su - hadoop001
cd ~/app/hadoop
sbin/start-dfs.sh
jps
【可能问题1】尽管三个进程已经启动了,但/home/hadoop001/tmp目录下并没有三个.pid文件,这是因为mv之后没有做“ln -s”软连接,配置文件还是读取的老地方:系统/tmp目录下,而实际存储在/home/hadoop001/tmp目录下。这样也可能导致hdfs的三个进程启动不完整。
比如jps后发现Datanode、Secondary Namenode启动了,而Namenode进程没有启动。
解决办法一:建立软连接
解决办法二:格式化
su - hadoop001
cd ~/app/hadoop
sbin/stop-dfs.sh
bin/hdfs namenode -formate #格式化
再sbin/start-dfs.sh即可
【可能问题2】启动之后,jps发现Namenode、Secondary Namenode启动了,而Datanode进程没有启动
解决办法:把~/tmp目录下dfs里面的VERSION的data的ID改为和name的一样再重新启动即可。具体如下:
cat ~/tmp/hadoop-hadoop001/dfs/data/current/VERSION
cat ~/tmp/hadoop-hadoop001/dfs/name/current/VERSION
然后对比下面两处,将data的clusterID通过vi命令改的和name的clusterID一样即可(我已经改过啦)
(三).配置pid文件存放在用户的tmp目录下
cd ~/app/hadoop/etc/hadoop
vi hadoop-env.sh
然后重新启动即可。
(四).更改数据存储目录(3.x版本)
上面(二)是2.x版本的操作,但我的hadoop是3.2.2版本,所以需要对core-site.xml文件做下修整
cd ~/app/hadoop/etc/hadoop
vi core-site.xml #进入之后新增:
修整结束后一定要格式化哟!!!
解读官网:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
dfs.datanode.data.dir : 10块物理磁盘 ,5T
dfs.datanode.data.dir : /data01/dfs/dn,/data02/dfs/dn,/data03/dfs/dn.......
也就是说,一块磁盘写的能力30M/s ,那么它需要10s;而10块磁盘写的能力是300M/s,那么它10s就能写完,多块磁盘是为了存储空间更大,且高效率的读写IO。 肯定比单块磁盘更快。
所以生产上DN的数据目录参数,必然不能默认使用${hadoop.tmp.dir},需要根据自己实际情况写清楚。
三.yarn的部署
(一).基本概念
ResourceManager RM 是全局的进程
NodeManager NM 是每个节点上的进程,管理这个节点上的资源分配和监控运行节点的健康状态。
(二).yarn部署教程
1.配置mapred-site.xml文件
cd ~/app/hadoop/etc/hadoop \ ll
【注意】:
①2.x版本没有mapred-site.xml文件,需要拷贝模板文件mapred-queues.xml.template改名为mapred-site.xml;而3.x版本直接有mapred-site.xml文件。
②2.x版本不需要配置classpath。
vi mapred-site.xml #进入之后,前面的内容千万别动,然后新添加:
mapreduce.framework.name
yarn 表示mapreduce的计算框架在yarn上
2.配置yarn-site.xml文件
与2.x版本相比,3.x版本多了env-whitelist配置。
vi yarn-site.xml 进入之后在图示位置新添加:
3.启动yarn
cd ~/app/hadoop
sbin/start-yarn.sh
4.yarn的浏览器打开
此时ResourceManager的端口号是8088
进入Windows的web界面,输入:ip:8088看能否打开网页,验证是否配置OK
(三).端口挖矿处理及修改端口号
1.端口挖矿处理
根据生产上的经验,8088端口极易被挖矿(中病毒),表现是登录机器和操作命令时很卡很卡,且通过top命令查看到有个进程占据CPU100%。
解决办法一:找到挖矿文件,chmod 000权限给它。
解决办法一:进入挖矿文件,清空里面的内容。
解决办法一:进入挖矿文件开头加exit 0 然后直接退出。
但是问题的关键在于如何找到挖矿文件呢?
所以我们一般通过更改端口号的方法来尽可能的避免被挖矿
2.修改8088端口号
①配置:
vi yarn-site.xml 进入之后,新增配置:
②验证:进入Windows的web界面,输入:ip:8123看能否打开网页,验证端口号是否修改成功.
(四).经典案例Wordcount(词频统计)及源码实现
1.环境准备
配置个人环境变量
cd
vi .bashrc 进入之后配置:
export HADOOP_HOME=/home/hadoop001/app/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
. .bashrc #使配置文件生效
which hdfs
2.数据准备
hdfs dfs -ls /
hdfs dfs -mkdir /input
vi 1.log 输入:
jepson
ruoze
xingxing
a b c
b a c
jepson
www.ruozedata.com ruoze a b c
hdfs dfs -put 1.log /input #把文件从Linux放进hdfs的/input目录下
hdfs dfs -ls /input #查看文件是否移动成功
hdfs dfs -cat /input/1.log #查看文件内容是否丢失
3.find查找及计算作业
①find查找
当不知道jar包具体名字是什么,可以根据find查找关键字
find ./ -name '*example*'
②计算案例
yarn jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.2.jar wordcount /input /output1
①number of splits:1 【切片是1 规则 】
②map tasks=1 【map 任务 1】
③reduce tasks=1 【reduce 任务 1】(生成的结果)
如果报错:Error file: prelaunch.err.
Last 4096 bytes of prelaunch.err :
Last 4096 bytes of stderr :
/bin/bash: /bin/java: No such file or directory
原因是没有这个目录,做个软连接即可:
先whereis java 再ll /bin/java看看有没有/bin/java目录,
再which java 最后做个ln -s /usr/java/jdk1.8.0_301/bin/java /bin/java
4.分析结果
hdfs dfs -ls /output1
hdfs dfs -cat /output1/part-r-00000
运行流程:
第一步map:每一行按空格拆分单词 ,且每个单词赋予默认值为1
(jepson,1)
(ruoze,1)
(xingxing,1)
(a,1) (b,1) (c,1)
(b,1) (a,1) (c,1)
(jepson,1)
(www.ruozedata.com,1)(a,1) (b,1) (c,1)
第二步reduce: 按单词维度,统计每个单词出现的次数(按字母顺序排序)
a: 1+1+1=3==> a 3
b: 1+1+1=3==> b 3
c: 1+1+1=3==> c 3
jepson: 1+1=2==> jepson 2
ruoze: 1+1=2==> ruoze 2
www.ruozedata.com: 1==> www.ruozedata.com 1
xingxing: 1==> xingxing 1
相当于SQL里面的select 单词,sum(value) from t group by 单词;
【附】
a 100 --> a 100*10
b 200 --> b 200*10
map 映射 年终奖10倍
reduce 规约 3000块
5.解读源码
https://github.com/apache/hadoop
https://github.com/apache/hadoop/blob/release-3.2.2-RC3/hadoop-mapreduce-project/hadoop-mapreduce-examples/src/main/java/org/apache/hadoop/examples/WordCount.java
已同步至:Hadoop入门二(3.2.2版本)_comer_liu的博客-CSDN博客