hadoop
----------------------------------------------------
1.独立模式(standalone|local)
nothing!
本地文件系统。
不需要启用单独进程。
主要在测试与调试的时候使用
2.pesudo(伪分布模式)
等同于完全分布式,只有一个节点。
SSH: //(Socket),
//public(公钥) + private(私钥)
//server : sshd :$>ps -Af | grep sshd //查看sshd进程是否开启
//client: ssh
$>ssh-keygen //生成公私秘钥。
//authorized_keys 需要权限为644
$>ssh IP //yes
[配置文件]
core-site.xml //配置文件系统fs.defaultFS=hdfs://localhost/
hdfs-site.xml //配置副本数replication=1(副本数)
mapred-site.xml //配置框架
yarn-site.xml //配置资源管理器
3.full distributed(完全分布式)
让命令行提示符显式完整路径
----------------------------------------------------
1.编辑profile文件,添加环境变量PS1
[/etc/profile]
export PS1='[\u@\h `pwd`]\$' //PS为大写
2.source
$>source /etc/profile
配置hadoop,使用符号连接的方式,让三种配置形态共存。
----------------------------------------------------
1.创建三个配置目录,内容等同于hadoop目录//复制时使用递归复制。加参数-r
${hadoop_home}/etc/local
${hadoop_home}/etc/pesudo
${hadoop_home}/etc/full
2.创建符号连接
$>rm -rf hadoop //删除之前配置好的hadoop,是用哪个模式时就将那个模式链接为hadoop
$>ln -s 所要使用的模式配置文件名
3.对hdfs进行格式化
$>hadoop namenode -format
4.修改hadoop配置文件,手动指定JAVA_HOME环境变量
[${hadoop_home}/etc/hadoop/hadoop-env.sh] //env表示环境
...
export JAVA_HOME=/soft/jdk
...
5.启动hadoop的所有进程
$>start-all.sh
6.启动完成后,出现以下进程
$>jps //查看所有的java进程,目前我的机子执行该命令时没有显示,有待解决
33702 NameNode
33792 DataNode
33954 SecondaryNameNode
29041 ResourceManager
34191 NodeManager
7.查看hdfs文件系统
$>hdfs dfs -ls /
8.创建目录
$>hdfs dfs -mkdir -p /user/centos/hadoop
9.通过webUI查看hadoop的文件系统
http://localhost:50070/
10.停止hadoop所有进程
$>stop-all.sh
11.centos防火墙操作
[cnetos 6.5之前的版本]
$>sudo service firewalld stop //停止服务
$>sudo service firewalld start //启动服务
$>sudo service firewalld status //查看状态
[centos7]
$>sudo systemctl enable firewalld.service //"开机启动"启用
$>sudo systemctl disable firewalld.service //"开机自启"禁用
$>sudo systemctl start firewalld.service //启动防火墙
$>sudo systemctl stop firewalld.service //停止防火墙
$>sudo systemctl status firewalld.service //查看防火墙状态
[开机自启]
$>sudo chkconfig firewalld on //"开启自启"启用
$>sudo chkconfig firewalld off //"开启自启"禁用
hadoop的端口
----------------------------------------------------
50070 //namenode http port 名称节点端口
50075 //datanode http port 数据节点端口
50090 //2namenode http port 辅助名称节点
8020 //namenode rpc port 名称节点的rpc端口
50010 //datanode rpc port 数据节点的rpc端口
hadoop四大模块
----------------------------------------------------
common //公共模块
hdfs //分布式系统模块namenode + datanode + secondarynamenode
mapred //
yarn //resourcemanager + nodemanager
启动脚本
----------------------------------------------------
1.start-all.sh //启动所有进程
2.stop-all.sh //停止所有进程
3.start-dfs.sh //
4.start-yarn.sh
[hdfs] start-dfs.sh stop-dfs.sh
NN
DN
2NN
[yarn] start-yarn.sh stop-yarn.sh
RM
NM
修改主机名
----------------------------------------------------
1./etc/hostname
s201
2./etc/hosts
127.0.0.1 localhost
192.168.231.201 s201
192.168.231.202 s202
192.168.231.203 s203
192.168.231.204 s204
完全分布式
----------------------------------------------------
1.克隆3台client(centos7)
右键centos-7-->管理->克隆-> ... -> 完整克隆
2.启动client
3.启用客户机共享文件夹。
4.修改hostname和ip地址文件
[/etc/hostname]
s202
[/etc/sysconfig/network-scripts/ifcfg-ethxxxx]
...
IPADDR=..
5.重启网络服务
$>sudo service network restart
6.修改/etc/resolv.conf文件
nameserver 192.168.231.2
7.重复以上3 ~ 6过程.
准备完全分布式主机的ssh
----------------------------------------------------
1.删除所有主机上的/home/centos/.ssh/*
2.在s201主机上生成密钥对
$>ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
3.将s201的公钥文件id_rsa.pub远程复制到202 ~ 204主机上。
并放置/home/centos/.ssh/authorized_keys
$>scp id_rsa.pub centos@s201:/home/centos/.ssh/authorized_keys
$>scp id_rsa.pub centos@s202:/home/centos/.ssh/authorized_keys
$>scp id_rsa.pub centos@s203:/home/centos/.ssh/authorized_keys
$>scp id_rsa.pub centos@s204:/home/centos/.ssh/authorized_keys
4.配置完全分布式(${hadoop_home}/etc/hadoop/)
[core-site.xml]
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://s201/</value>
</property>
</configuration>
[hdfs-site.xml]
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
[mapred-site.xml]
不变
[yarn-site.xml]
<?xml version="1.0"?>
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>s201</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
[slaves]//配置完后分发给每台机器,内容为数据节点主机名称
s202
s203
s204
[hadoop-env.sh]
...
export JAVA_HOME=/soft/jdk
...
5.分发配置
$>cd /soft/hadoop/etc/
$>scp -r full centos@s202:/soft/hadoop/etc/
$>scp -r full centos@s203:/soft/hadoop/etc/
$>scp -r full centos@s204:/soft/hadoop/etc/
6.删除符号连接
$>cd /soft/hadoop/etc
$>rm hadoop
$>ssh s202 rm /soft/hadoop/etc/hadoop
$>ssh s203 rm /soft/hadoop/etc/hadoop
$>ssh s204 rm /soft/hadoop/etc/hadoop
7.创建符号连接
$>cd /soft/hadoop/etc/
$>ln -s full hadoop
$>ssh s202 ln -s /soft/hadoop/etc/full /soft/hadoop/etc/hadoop
$>ssh s203 ln -s /soft/hadoop/etc/full /soft/hadoop/etc/hadoop
$>ssh s204 ln -s /soft/hadoop/etc/full /soft/hadoop/etc/hadoop
8.删除临时目录文件
$>cd /tmp
$>rm -rf hadoop-centos
$>ssh s202 rm -rf /tmp/hadoop-centos
$>ssh s203 rm -rf /tmp/hadoop-centos
$>ssh s204 rm -rf /tmp/hadoop-centos
9.删除hadoop日志
$>cd /soft/hadoop/logs
$>rm -rf *
$>ssh s202 rm -rf /soft/hadoop/logs/*
$>ssh s203 rm -rf /soft/hadoop/logs/*
$>ssh s204 rm -rf /soft/hadoop/logs/*
10.格式化文件系统
$>hadoop namenode -format
11.启动hadoop进程
$>start-all.sh
rsync
----------------------------------------------------
四个机器均安装rsync命令。
远程同步.
$>sudo yum install rsync
将root用户实现无密登录
----------------------------------------------------
1.同上
编写脚本
----------------------------------------------------
1.xcall.sh
创建脚本文件,设置权限为任何人可执行,当远程命令无法执行时是因为所执行的命令不在其主机的环境变量下
例如:jps命令在通过远程登录命令ssh执行$>ssh hadoop02 jps时会报错,command not found
通过$>which jps命令查找到jps所在位置,并在其主机中建立环境变量下对该命令的符号链接
$>cd usr/local/bin
$>sudo ln -s /soft/jdk/bin/jps jps
$>ssh hadoop02 jps //测试成功 编写xcall.sh,实现对对其他主机一次性执行同一命令
xcall.sh脚本内容如下
#!/bin/bash
#program
# this program is to execute command in all host
#history
# 2019.11.11 20:54 by xwg
PATH=/bin/:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH
p=$@
for((i = 1; i <= 4 ; i = $i + 1));
do
echo -----------hadoop0$i-----------
ssh hadoop0$i $p
done;
知识点:$@ : 接收所有参数 $#:参数个数 $? :上次命令的执行结果 $0:文件命令 $1/2/3 : 表示第1/2/3个参数 shift:向左移动 2.xsync.sh //复制本地文件到其他主机的相同路径
脚本内容如下:
#!/bin/bash
#program
# this program is copy file to others hosts by rsync
#history
# 2019.1.11 23:43 by xwg
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH
params=$1
dirname=`dirname $params`
filename=`basename $params`
fullname=`pwd -P .` //大写P
if[[ $# -lt 1 ]] ;then exit;fi
for(( i = 2 ; i <= 4 ; i = $i + 1 ));
do
echo --------hadoop0$i--------
rsync -lr $params `whoami`@hadoop0$i:fullname
done;