









集群配置
1.集群部署规划
slave101 slave102 slave103
2.配置集群
(1)核心配置文件
配置core-site.xml
[admin@slave101 ~]$ cd /opt/module/hadoop-2.7.2/etc/hadoop
[admin@slave101 hadoop]$ sudo vim core-site.xml
fs.defaultFS用来告诉Hadoop这是个分布式系统还是本地,hdfs://....表示这是一个分布式系统
(2)HDFS配置文件
配置hadoop-env.sh
[admin@slave101 hadoop]$ sudo vim hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置hdfs-site.xml
[admin@slave101 hadoop]$ sudo vim hdfs-site.xml
(3)YARN配置文件
配置yarn-env.sh
[admin@slave101 hadoop]$ sudo vim yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置yarn-site.xml
[admin@slave101 hadoop]$sudo vim yarn-site.xml
(4)MapReduce配置文件
配置mapred-env.sh
[admin@slave101 hadoop]$ sudo vim mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置mapred-site.xml
[admin@slave101 hadoop]$ sudo vim mapred-site.xml
3.在集群上分发配置好的Hadoop配置文件
[admin@slave101 hadoop]# xsync /opt/module/hadoop-2.7.2/
测试
[admin@slave102 hadoop]$ cat core-site.xml
集群单点启动
(1)如果集群是第一次启动,需要格式化namenode
[adamin@slave101 hadoop-2.7.2]$ hadoop namenode -format
(2)在slave101上启动namenode
[admin@slave101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode
[admin@slave101 hadoop-2.7.2]$ jps----看是否有namenode
(3)在slave101,slave102,slave103上分别启动datanode
[admin@slave101 hadoop-2,7,2]$ sbin/hadoop-daemon.sh start datanode
[admin@slave102 hadoop-2,7,2]$ sbin/hadoop-daemon.sh start datanode
[admin@slave103 hadoop-2,7,2]$ sbin/hadoop-daemon.sh start datanode
ssh免密码登录
1.xshell免登陆linux(以主机slave103为例)
(1).
(2).一直点下一步,直到需要输入密码
(3).点击保存文件到桌面(id_rsa_2048.pub)
(4).
[admin@slave103 ~]$cd .ssh----没有那个文件或目录
[admin@slave103 ~]$ ssh-keygen -t rsa -----连续点击回车键三下,出现如下图表示成功
ssh-keygen表示生成密钥,rsa表示非对称算法,即生成的私钥和公钥不同
图中的id_rsa表示私钥,id_rsa.pub表示公钥
[admin@slave103 ~]$ cd .ssh
[admin@slave103 .ssh]ll
(5).使用工具Xftp 6将生成的公钥(桌面上的文件id_rsa_2048.pub)拖到/home/admin/.ssh
(6).
[admin@slave103 .ssh] cat id_rsa_2048.pub >> authorized_keys---将xshell生成的公钥放入authorized_keys,该文件就是slave03该主机允许别的主机免密码访问自己存放别的主机的公钥的地方
[admin@slave103 .ssh]$ cat id_rsa_2048.pub
[admin@slave103 .ssh]$ cat authorized_keys
---一样
(7).在xshell中,右击Hadoop_Slave103,点击属性
(8).点击用户身份验证
(9).在xshell中右击Hadoop_Slave103,点击打开,就可以免密码连接了
2.主机slave103免密码登录主机slave101,slave101
(1).这里还需要配置ssh文件
[admin@slave103 ~]$ sudo vim /etc/ssh/sshd_config
(2).[admin@slave103 ~]$ ssh-keygen -t rsa------ssh-keygen表示生成密钥,rsa:非对称算法,即生成的公钥和私钥不一样
(3).[admin@slave103 ~]$ cd .ssh
[admin@slave103 .ssh]$ ssh-copy-id admin@slave101---即将slave103中的id_rsa.pub公钥复制到authorized_keys中,存放授权过得无密登录服务器公钥
[admin@slave103 .ssh]$ ssh admin@slave101----成功
(4).[admin@slave103 .ssh]$ ssh-copy-id admin@slave103----将自己的公钥复制到自己的authorized中,即也可以通过ssh连接自己
(5).这里需要将slave101,slave102,slave103中的公钥分别复制到不同的主机,使得他们之间可以相互通信
注意:这里很有可能会出现slave101去ssh slave102,slave103,死活都连不上,但是slave102去ssh slave101,slave103一下子就连上了,在网上找了很久都没有找到原因,一气之下,把.ssh删了,重新来,就都可以了.
脚本--xcall---在集群的所有机器上批量执行同一条命令,比如
[admin@slave101 ~]$ xcall ifconfig----则会显示slave101,slave102,slave103的IP地址
创建过程
[admin@slave101 ~]$ cd bin
[admin@slave101 bin]$ touch xcall
[admin@slave101 bin]$ vim xcall---加入如下内容:
#!/bin/bash
#在集群的所有机器上批量执行同一条命令
if(($#==0))
then
echo 请输入您要操作的命令!
exit
fi
echo 要执行的命令是$*
#循环执行命令
for((i=101;i<=103;i++))
do
echo-------------slave$i--------------
ssh slave$i $*
done
[admin@slave101 bin]$ chmod u+x xcall
测试
[admin@slave101 ~]$ xcall jps
从图可以看到,该命令对于slave102不起作用,这是因为
[admin@slave101 ~]$ ssh admin@salve102
[admin@slave102 ~]$jps
与
[admin@slave101 ~]$ ssh admin@slave102 jps 这两种写法执行是不同的
①ssh 目标机器
登录之后,执行某个命令!
属于Login-shell,会自动读取 /etc/profile文件中定义的所有的变量!
②ssh 目标机器 命令
属于non-login-shell
不会读取/etc/profile
如果在使用命令时,我们需要使用/etc/profile定义的一些变量,需要在
目标机器的对应的用户的家目录/.bashrc中添加以下代码
source /etc/profile
如果不添加以上代码,在执行start-all.sh | stop-all.sh一定会报错!
[admin@slave102 ~]$ ll -al----查看是否有隐藏文件.bashrc
[admin@slave102 ~]$ vim .bashrc
测试
[admin@slave101 ~]$ xcall jps
群起集群
1.配置slaves
[admin@slave101 hadoop-2.7.2]$ cd etc/hadoop
[admin@slave101 hadoop]$ vim slaves
加入slave101,slave102,slave103
2.启动集群
2.1如果是第一次启动,需要格式化Namenode
2.2启动HDFS
因为前面已经将namenode,datanode 启动了,先关闭
[admin@slave101 hadoop-2.7.2]$ xcall sbin/hadoop-daemon.sh stop datanode
[admin@slave101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop namenode
2.3测试
[admin@slave101 hadoop-2.7.2]$ xcall jps
2.4启动HDFS
[admin@slave101 hadoop-2.7.2]$sbin/start-dfs.sh
2.5测试
[admin@slave101 hadoop-2.7.2]$xcall jps
2.6启动Yarn----NameNode和ResourceManger如果不是同一台机器,不能在NameNode上启动 YARN,应该在ResouceManager所在的机器上启动YARN。
[admin@slave102 hadoop-2.7.2]$ sbin/start-yarn.sh
2.7测试
[admin@slave101 hadoop-2.7.2]$ xcall jps
3.集群测试
[admin@slave101 haoop-2.7.2]$ mkdir wcinput
[admin@slave101 hadoop-2.7.2]$cd wcinput
[admin@slave101 wcinput]$ touch wc.input
[admin@slave101 wcinput]$ vim wc.input
[admin@slave101 ~]$ hadoop fs -mkdir /input--创建文件
查看http://hadoop101:50070/dfshealth.html#tab-overview
点击
---创建成功
这里有一个疑问:
[admin@slave101 hadoop-2.7.2]$hadoop fs -mkdir input1,在/和hadoop-2.7.2上都可以创建,但都存在与/
[admin@slave101 hadoop-2.7.2]$ hadoop fs -put wcinput /input/---将文件wcinput传入input中,点击input文件,出现下面结果,说明传入进去了
[admin@slave101 hadoop-2.7.2]$ cd share/hadoop/mapreduce
[admin@slave101 mapreduce]$ ll
----运行示例
[admin@slave101 mapreduce]$ hadoop jar hadoop-mapreduce-examples-2.7.2.jar wordcount /input /wcinput/wc.input /output 例子 计算词的个数的类名 数据的来源 结果
---出现了output,点击output
----说明运行成功
xshell中查看
[admin@slave101 hadoop-2.7.2]$ hadoop fs -cat /output/*
4.集群启动/停止方式总结
1.各个服务组件逐一启动/停止
1).分别启动/停止HDFS组件
hadoop-daemon.sh start/stop namenode/datanode/secondarynamenode
2).启动/停止yarn
yarn-daemon.sh start/stop resourcemanager/nodemanager
2.各个模块分开启动/停止
1).整体启动/停止HDFS
start-dfs.sh / stop-dfs.sh
2).整体启动/停止yarn
start-yarn.sh / stop-yarn.sh
3).包括HDFS和YARN的启动/停止(resourcemanager需要手动开启和停止)
start-all.sh /stop-all.sh
5.时间同步问题
[admin@slave101 ~]$ xcall date
-----时间不同步
[admin@slave101 ~]$ sudo ntpdate -u ntp7.aliyun.com----ntpdate是指通过ntp(网路时钟服务),自动请求一个服务器,把这个服务器的时间当成最新的时间(ntp7.aliyun.com为阿里云服务器)
[admin@slave101 ~]$ xcall date
---时间同步了
永久的
[admin@slave101 ~]$ crontab -e---点击回车,编辑
---将这句语句写入,即1个小时就同步一次