Hadoop开发入门与实践(三)
一、配置ssh免密码登陆
1、查看隐藏文件:
[root@xtwyhadoop ~]# ls -la
[root@xtwyhadoop ~]# cd .ssh
known_hosts 知道的主机
2、生成ssh免登陆密钥
[root@xtwyhadoop .ssh]# ssh-keygen -t rsa
3、查看生在的文件:
执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
4、将公钥拷贝到要免登陆的机器上
[root@xtwyhadoop .ssh]# cp id_rsa.pub authorized_keys
或用以下命令:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
或:
ssh-copy-id 主机名
将一台机器的公钥发送到另一台机器
5、测试进行停止与启动:
[root@xtwyhadoop .ssh]# stop-all.sh
[root@xtwyhadoop .ssh]# start-all.sh
不用再输入密码了。
二、集群模式
Hadoop对应的Java进程运行在多台物理机器上,称为集群模式.[集群就是有主有从]。
完全分部式是真正利用多台 Linux 主机来进行部署 Hadoop,对 Linux 机器集群进行规划,使得 Hadoop 各个模块分 别部署在不同的多台机器上。
(一)服务器功能规划
masterhadoop | slave1hadoop | slave2hadoop |
---|---|---|
192.168.0.106 | 192.168.0.107 | 192.168.0.108 |
ResourceManage | ||
DataNode | DataNode | DataNode |
NodeManager | NodeManager | NodeManager |
HistoryServer | SecondaryNameNode |
(二)Master配置:
Master节点仅作为NameNode使用
1、修改Hadoop配置
(1)修改core-site.xml
[root@hadoop hadoop]# vi core-site.xml
<configuration>
<property>
<!-- 指定HDFS(namenode)的通信地址 -->
<name>fs.defaultFS</name>
<value>hdfs://masterhadoop:9000</value>
</property>
<property>
<!-- 指定hadoop运行时产生文件的存储路径 -->
<name>hadoop.tmp.dir</name>
<value>/home/root/hadoop_tmp</value>
</property>
</configuration>
fs.defaultFS 为 NameNode 的地址
hadoop.tmp.dir 为 hadoop 临时目录的地址,默认情况下,NameNode 和 DataNode 的数据文件都会存在这个目录下的对应子目录下。应该保证此目录是存在的,如果不存在,先创建。
(2)修改hdfs-site.xml
[root@slave2hadoop hadoop]# vi hdfs-site.xml
<configuration>
<property>
<!-- 设置namenode的http通讯地址 -->
<name>dfs.namenode.http-address</name>
<value>masterhadoop:50070</value>
</property>
<property>
<!-- 设置secondarynamenode的http通讯地址 -->
<name>dfs.namenode.secondary.http-address</name>
<value>slave1hadoop:50090</value>
</property>
<property>
<!-- 设置hdfs副本数量 -->
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<!-- 设置namenode存放的路径 -->
<name>dfs.namenode.name.dir</name>
<value>/home/root/hadoop_tmp/dfs/name</value>
</property>
<property>
<!-- 设置datanode存放的路径 –->
<name>dfs.datanode.data.dir</name>
<value>/home/root/hadoop_tmp/dfs/data</value>
</property>
</configuration>
(3)修改mapred-site.xml
[root@masterhadoop hadoop]# mv mapred-site.xml.template mapred-site.xml
[root@slave2hadoop hadoop]# vi mapred-site.xml
<configuration>
<property>
<!-- 通知框架MR使用YARN -->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>masterhadoop:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>masterhadoop:19888</value>
</property>
</configuration>
mapreduce.framework.name 设置 mapreduce 任务运行在 yarn 上。 mapreduce.jobhistory.address 是设置 mapreduce 的历史服务器安装在 xtwyhadoop机器上。
mapreduce.jobhistory.webapp.address 是设置历史服务器的 web 页面地址和端口号。
(4)修改yarn-site.xml
[root@softhadoop hadoop]# vi yarn-site.xml
<configuration>
<property>
<!-- reducer取数据的方式是mapreduce_shuffle -->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<!-- 设置 resourcemanager 在哪个节点-->
<name>yarn.resourcemanager.hostname</name>
<value>masterhadoop</value>
</property>
</configuration>
根据规划yarn.resourcemanager.hostname 这个指定resourcemanager 服务器指向softhadoop
yarn.log-aggregation-enable 是配置是否启用日志聚集功能。
yarn.log-aggregation.retain-seconds 是配置聚集的日志在 HDFS 上最多保存多长时间。
2、启动Hadoop进行测试:
[root@masterhadoop ~]# ${HADOOP_HOME}/sbin/hadoop-daemon.sh start namenode
[root@masterhadoop ~]# jps
3305 NameNode
3434 Jps
(三)Slave配置
1、配置主机名:
[root@softhadoop ~]# vi /etc/hosts
192.168.0.107 slave1hadoop
2、配置slaves
[root@xtwyhadoop usr]# vi /hadoop/hadoop-2.7.4/etc/hadoop/slaves
masterhadoop
slave1hadoop
slave2hadoop
slaves文件是指定HDFS上有哪些 DataNode节点
3、配置每台电脑的hosts文件:
[root@masterhadoop /]# vi /etc/hosts
192.168.0.106 masterhadoop
192.168.0.107 slave1hadoop
192.168.0.108 slave2hadoop
4、 建立集群之间的SSH无密码登录
(1)删除掉~/.ssh文件夹内的所有内容,然后重新生成dsa密钥。
[root@masterhadoop ~]# cd ~/.ssh/
(2)会有提示,都按回车就可以
[root@masterhadoop .ssh]# ssh-keygen -t rsa
(3)加入授权
[root@masterhadoop .ssh]# cat id_rsa.pub >> authorized_keys
(4)修改文件权限,如果不改,无法通过.
[root@masterhadoop .ssh]# chmod 600 ./authorized_keys
4、具体步骤(以master无密码登录slaver为例):
(1)首先将master生成的公匙用scp命令传到所有的slaver上(以下命令是在master上执行)
[root@masterhadoop /]# ssh-copy-id slave1hadoop
同样的在slave1、slave2上生成公钥和私钥后,将公钥分发到其它机器上。
从master上访问slave1/2即可无需密码了。
[root@masterhadoop ~]# ssh slave2hadoop
5、发布文件到从机
master配置hadoop,然后将master的hadoop文件传送给node节点.
此方法可不用每台配置。
(1)压缩已配置好的Master文件:
[root@masterhadoop /]# tar -zcf hadoop.master.tar.gz ./hadoop
(2)上传文件到slaves主机的根目录:
[root@masterhadoop /]# scp ./hadoop.master.tar.gz slave1hadoop:/
在Slave1hadoop中查看:
6、首次启动需要在Master节点执行NameNode格式化:
[root@masterhadoop hadoop]# hdfs namenode -format
注意:
如果需要重新格式化NameNode,需要先将原来 NameNode 和 DataNode下的文件全部删除,不然会报错,NameNode 和 DataNode 所在目录是在 core-site.xml 中 hadoop.tmp.dir、dfs.namenode.name.dir、 dfs.datanode.data.dir 属性配置的。
因为每次格式化,默认是创建一个集群 ID,并写入 NameNode 和 DataNode 的 VERSION 文件中(VERSION 文件所 在目录为 dfs/name/current 和 dfs/data/current),重新格式化时,默认会生成一个新的集群 ID,如果不删 除原来的目录,会导致 namenode 中的 VERSION 文件中是新的集群 ID,而 DataNode 中是旧的集群 ID,不一致时 会报错。
另一种方法是格式化时指定集群 ID 参数,指定为旧的集群 ID。
7、启动测试
启动需要在Master节点上进行
(1)启动HDFS进程
[root@masterhadoop hadoop]# start-dfs.sh
(2)查看Slaves上的进程:
(3)启动计算平台
[root@masterhadoop hadoop]# start-yarn.sh
(4)启动jobhistoryserver来实现web查看作业的历史运行情况
[root@masterhadoop hadoop]# mr-jobhistory-daemon.sh start historyserver
配置好后,将Master上的 /hadoop 文件夹复制到各个节点上(缺少任一进程都表示出错。另外还需要在 Master 节点上通过命令 hdfs dfsadmin -report 查看 DataNode 是否正常启动,如果 Live datanodes 不为 0 ,则说明集群启动成功。
[root@masterhadoop hadoop]# hdfs dfsadmin -report
(5)通过Web页面看到查看 DataNode和NameNode的状态:
IP是master的IP地址。如果不成功,可以通过启动日志排查原因。
http://192.168.0.106:8088/cluster
(6) 执行以下命令将Hadoop的安装包发送到Hdfs上,查看HDFS的状态:
[root@masterhadoop /]# hadoop fs -mkdir -p /user/hadoop
[root@masterhadoop /]# hadoop fs -put hadoop.master.tar.gz /user/hadoop
8、执行分布式实例
9、关闭Hadoop集群
关闭Hadoop集群也是在 Master 节点上执行的:
[root@masterhadoop /]# stop-yarn.sh
[root@masterhadoop /]# stop-dfs.sh
[root@masterhadoop /]# mr-jobhistory-daemon.sh stop historyserver