一、hdfs的启动问题:
1、第一次启动:需要询问yes/no;第二次启动不询问;
2、启动之后,输入jps查看当前打开的节点:
观察:
属于localhost:
namenode
datanode
属于0.0.0.0:
seconddary namenodes
问题:读写都是通过namenode来的,但是namenode:localhost,很容易让别的机器访问
不了执行不了读写的操作,因此需要修改为本机器ip地址。
(1)修改localhost:
1)找到这个core-site.xml文件(/opt/software/hadoop-2.8.1/etc/hadoop)
2)打开core-site.xml文件:
修改为namenode当前IP,如果做了IP和hostname配置的话,也可以直接配置为hostname。
3)验证(重启hdfs):
关闭:
启动:
成功将namenode的localhost改为hadoop001。
(2)修改datanode:
1)找到slaves(从的意思,相当于namenode是主,datanode是从,所以要在slaves这里改)
路径:/opt/software/hadoop-2.8.1/etc/hadoop
2)打开slaves文件
如果datanode是多台机器的时候,ip用逗号分割。
3)重新启动hdfs
已经修改成功
修改secondarynamenode的IP地址
(3)打开官网,查看configuration
(4)在hdfs-default.xml文档中
(5)由于是hdfs-default.xml文档的内容,所以打开hadoop中的hdfs-default.xml
/opt/software/hadoop-2.8.1/etc/hadoop
vi ./hdfs-site.xml
(6)添加
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>192.168.137.130:50090</value>
</property>
<property>
<name>dfs.namenode.secondary.https-address</name>
<value>192.168.137.130:50091</value>
</property>
(7)重启hdfs
三个进程都已经成功修改为hadoop001的IP地址。
为什么要这么处理?
1、对外提供服务和后期集群配置
2、第一次启动之前我们是配置当前hadoop001的无密码的信任关系,生产上不可能
配置0.0.0.0信任关系
(8)在浏览器输入192.168.137.130:50070进入hdfs的后台管理系统
(9)jps
1)jps 查看java接口的进程号(基本hadoop有关的java接口可以查)
(10)假死分为“真的死”和“假的死”
HDFS模拟机器宕机或者进程误杀的真死状态:
由于root用户不是生产中常见的,因此以新用户HBinz操作
1)切换目录权限:
将hadoop-2.8.1文件所属用户从root换成HBinz
chown -R HBinz:HBinz hadoop-2.8.1
2)以HBinz用户身份开启HDFS
注意!!!
这里踩了一个坑,进入hadoop-2.8.1目录后,cd /sbin是默认进入根目录的sbin而不是hadoop-2.8.1的sbin。要cd ./sbin才可以正确开启HDFS
由于没给HBinz和hadoop001配置信任关系,所以老提醒输入密码,这里我们配置信任关系。
由于之前我们是以root用户配置namenode,datanode,因此也要把数据清掉。这里以HBinz用户为例重新配置hadoop信任关系,以及启动HDFS。
1】kill掉HBinz用户所有进程
kill -9 $(pgrep -f HBinz)
2】清理namenode,datanode,secondrynamenode数据
在tmp目录下:
清理标红的文件
rm -rf /tmp/hadoop-* /tmp/hsperfdata_*
3】清理HBinz的.ssh文件
4】按步骤做HBinz与本机器192.168.137.130的信任关系
5】重新翻阅官网文档
发现:如果其他用户要做信任关系的话,需要修改authorized_key的权限
chmod 0600 ~/.ssh/authorized_keys
6】修改权限
成功了!
(11)格式化hadoop
进入hadoop-2.8.1目录执行hdfs namenode -format
(12)配置path等参数...
(13)启动HDFS
总结:
1、三个进程以hadoop001(192.168.137.130)启动
2、HBinz用户的信任关系和root是不同的,要对authorized_keys修改为600权限
3、重新部署HDFS
/tmp目录下数据存储删除--》格式化HDFS--》启动
4、学会查看官网的xml文件
回到(10)状态的真假
1、假死分为“真的死”和“假的死”
(1)以HBinz用户启动HDFS
(2)以root用户登陆
kill掉hadoop-2.8.1的所有进程:
kill -9 $(pgrep -f hadoop-2.8.1)
(3)进程已经杀掉了,但是仍有显示在jps中
进程真死,但假活的状态。进程不存在,且process information unavailable
(4)重新启动
(5)在root用户在看进程存在,但是information unavailable
状态问题解释:
1、JPS查询的是当前用户HBinz的hsperfdata_HBinz
2、所以如果kill了进程,但是jps仍存在,可以进入当前用户HBinz的hsperfdata_HBinz
把所有文件都删除了。这是jps就不会有多余的jps进程出现了。
在hsperfdata_HBinz文件夹里
rm -f *
到root用户的终端再输入jps
生产上process information unavailable的解决思路:
1、找到进程号jps
2、ps -ef|grep pid 是否存在
3、假如不存在,我们可以去该用户/tmp/hsperfdata_xxx(到/tmp目录下
ll hsperfdata_* ,然后匹配相应的进程号)然后去删除
4、假如存在,当前用户查看就是process information unavailable,那么怎样查看是
有用的?(切换用户查看)
切换哪个呢?
同上
二、yarn伪分布式部署
1、找到hadoop目录,发现没mapred-site.xml,所以将mapred-site.xml.template复制为mapred-site.xml:
cp mapred-site.xml.template mapred-site.xml
2、将官网的内容复制到两个相应的xml文件里
mapred-site.xml :
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
说明mapreduce是在yarn上计算,如果没用yarn,就在本地计算
yarn-site.xml:
<configuration>
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property>
</configuration>
3、启动yarn(后台:192.168.137.130:8088)
4、Mapreduce2
(1)找到hadoop-mapreduce-examples-2.8.1.jar:
在hadoop-2.8.1/下
find -name "*example*"
路径:/opt/software/hadoop-2.8.1/share/hadoop/mapreduce
(2)hadoop
查看命令帮助得:hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.1.jar
(3)hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.1.jar pi
(4)hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.1.jar pi 5 20
(5)打开后台
结果是3.2000000