【xcp.sh】远程拷贝:实现文件和文件夹在所有节点上的复制
-------------------------------------------------------------------------------------------
#################
#x copy
#################
# argu < 1 , no args
if [ $# -lt 1 ]
then
echo no args!
exit
fi
arg1=$1
cuser=`whoami`
fname=`basename $arg1`
dir=`dirname $arg1`
if [ "$dir" = "." ]
then
dir=`pwd`
fi
for((i=200;i<500;i=i+100))
do
echo ---- coping $arg1 to s$i ----
if [ -d $arg1 ]
then
scp -r $arg1 $cuser@s$i:$dir
else
scp $arg1 $cuser@s$i:$dir
fi
echo
done
【xrm.sh】远程删除:实现文件和文件夹在所有节点上的删除
-------------------------------------------------------------------------------------------
#################
#x rm
#################
# argu < 1 , no args
if [ $# -lt 1 ]
then
echo no args!
exit
fi
#get first argument
arg1=$1
#get current userName
cuser=`whoami`
#get fileName
fname=`basename $arg1`
#get dir
dir=`dirname $arg1`
#dir= . or dir = /xxx/xx,get absPath
if [ "$dir" = "." ]
then
dir=`pwd`
fi
echo ---- rming $arg1 from localhost ----
rm -rf $arg1
echo
for((i=200;i<500;i=i+100))
do
echo ---- rming $arg1 to s$i ----
ssh s$i rm -rf $dir/$fname
echo
done
【xls.sh】远程浏览文件夹内容
-------------------------------------------------------------------------------------------
#################
#x ls
#################
# argu < 1 , no args
if [ $# -lt 1 ]
then
echo no args!
exit
fi
#get first argument
arg1=$1
#get current userName
cuser=`whoami`
#get fileName
fname=`basename $arg1`
#get dir
dir=`dirname $arg1`
#dir= . or dir = /xxx/xx,get absPath
if [ "$dir" = "." ]
then
dir=`pwd`
fi
for((i=200;i<500;i=i+100))
do
echo ---- ls $arg1 to s$i ----
ssh s$i ls $dir/$fname | xargs
echo
done
【xcall】全节点命令执行
------------------------------------------------------------------------------
#!/bin/bash
#################
#xcall
#################
if [ $# -lt 1 ]
then
echo no args~
exit
fi
echo -------------xcall: $1 form localhost --------------
$@
echo
for((i=200;i<=500;i=i+100))
do
echo ----xcall : $1 from s$i ----
ssh s$i $@
echo
done
【手动启动数据节点DataNode】
---------------------------------------------------------------
1.在名称节点上,启动所有的数据节点
$> hadoop-daemons.sh start datanode
2.在挂掉的数据节点主机上,启动该主机对应的单个节点
$> hadoop-daemom.sh start datanode
【查看所有端口】
---------------------------------------------------------------
1.$> netstat -ano //tcp udp 包括ipv6
2.$> netstat -plut //tcp udp 没有ipv6
【配置windows 的 host目录】
---------------------------------------------------------------
1.打开隐藏文件:C:\Windows\System32\drivers\etc\hosts,没有就新建一个
2.修改对应ip
127.0.0.1 localhost
192.168.43.131 s100
192.168.43.132 s200
192.168.43.133 s300
192.168.43.134 s400
192.168.43.135 s500
【dfs.namenode.name.dir 说明】
---------------------------------------------------------------
1.名称节点配置多个目录,目的在于更可靠
2.每个目录存放的数据完全一致,并且是并发修改的
【dfs.datanode.data.dir】
---------------------------------------------------------------
1.数据节点配置多个储存目录,注意仅仅是分多个磁盘,多个文件夹进行存储
而不是存储多个副本,只是将文件块存放到多个目录下
2.每个目录的内容都是不同的
3.用“,”分割
【刷新节点】
-----------------------------------------------------------------------
$> hdfs dfsadmin -refreshNodes
【常用端口】
---------------------------------------------------------------
1.namenode
rpc: //8020
web: //50070
2.datanode
web: //50075
3.2NN
web: //50090
4.resouce history
web: //8088
5.nodemanager
web: //8042
【commossion/decommission】
---------------------------------------------------------------
1.服役/退役
【dfs.hosts 和 dfs.hosts.exclude】
---------------------------------------------------------------
1.hosts决定:是否连接
2.hosts.exclude决定:是否退役
3. hosts hosts.exclude
× √ //不能连
× × //不能连
√ × //能连,正常
√ √ //能连,但是是退役的
4.配置
a.创建 /soft/hadoop/etc/dfs-hosts-include.conf文件
内容:s200
s300
b.创建 /soft/hadoop/etc/dfs-hosts-exclude.conf文件
内容:s300
s400
c.编辑配置文件 hdfs-site.xml 文件
dfs.hosts= /soft/hadoop/etc/dfs-hosts-include.conf
dfs.hosts.exclude=/soft/hadoop/etc/dfs-hosts-exclude.conf
d.应用到所有节点
xcp s100 s200 s300 s400 s500
e.刷新节点
$> hdfs dfsadmin -refreshNodes
f.结果显示
s200 连接,正常
s300 连接,退役
s400 断开连接
【数据节点和名称节点中的--VERSION文件解析】
--------------------------------------------------------------------------------------------
1.clusterID=xxx : namenode 和 datanode 是一致的,集群ID
2.storageID=xxx : datanode的 唯一ID标识,每个datanode 都有唯一的
3.ctime : 集群创建的事件,用于更新
4.acl : 访问控制列表 access control list
【dfsadmin 常用指令】管理集群
---------------------------------------------------------------
1.手动保存NameNode的fsImage,而不经过2NN(正常是2NN在处理的),需安全模式
$> hdfs dfsadmin -saveNamespace
2.手动保存最新的名称节点镜像文件(*.fsimage)到本地系统
$> hdfs dfsadmin -fetchImage localPath
3.保存元数据,默认保存路径为{HADOOP_HOME}/logs/ 下
$> hdfs dfsamin -metasave metabak.meta
4.启动均衡器,让数据存储在集群上更加的平均,提高效率
$> start-balancer.sh
5.查看目录的统计信息(dir file bytes ...)
$> hadoop fs -count /user/ubuntu/data
6.dfsadmin 安全模式
【dfsadmin 安全模式】
---------------------------------------------------------------
1.集群启动的时候,namenode 会合并fsimage 和 edit 生成新的 fsimage和edit,此时集群处于安全模式,namenode是只读的,无法写入
2.安全模式的常规操作
a.$> hdfs dfsadmin -safemode enter //进入安全模式
b.$> hdfs dfsadmin -safemode leave //退出安全模式
c.$> hdfs dfsadmin -safemode get //查看安全模式状态
d.$> hdfs dfsadmin -safemode wait //等待...直到退出安全模式
【Hadoop Snapshot】快照
--------------------------------------------------------------------------
1.Hadoop Snapshot 快照,针对NameNode的快速备份
a.目录默认是没有创建快照权限的,需要管理员允许快照
$> hdfs dfsadmin -allowSnapshot /user/ubuntu/data
b.给/user/ubuntu/data创建快照snap-1
$> hadoop fs -createSnapshot /user/ubuntu/data
c.重命名快照
$> hadoop fs -renameSnapshot /user/ubuntu/data snap-1 snap-1-new
d.删除快照
$> hadoop fs -deleteSnapshot /user/ubuntu/data snap-1-new
e.禁用目录的快照(但是前提是必须删除该目录已经建立的所有快照)
$> hdfs dfsadmin -disallowSnapshot /user/ubuntu/data
【Hadoop Trash】回收站
---------------------------------------------------------------
1.回收站默认是每隔0分钟进行清除。意味着禁用回收站,删除文件的时候会直接删除
2.可以设置文件在回收站的贮存时间
【core-site.xml】添加属性
fs.trash.interval=1 //1分钟
3.通过shell命令删除的文件,会进入.Trash(回收站),但是通过编程删除,不会进入回收站,会直接删除。除非,调用moveToTrash()方法,返回值表示删除成功或者失败
4.每个用户都有自己的回收站目录(当然前提是已经启用了回收站,即设置了core-site.xml的回收间隔)
$>hadoop fs -ls -R /user/ubuntu/.Trash
5.用户可以手动丢弃回收站
$> hadoop fs -expunge
【Quata】 配额,针对目录的
---------------------------------------------------------------
1.子元素配额
//给文件夹data 限定N个元素配额(文件夹也算配额,初始为1,代表data文件夹自身),N=1,表示文件夹为空,且不能再有任何子元素
$> hdfs dfsadmin -setQuota N /user/ubuntu/data
2.清除子元素配额
$> hdfs dfsadmin -clrQuota /user/ubuntu/data
3.空间配额
//给文件夹data限定N的硬盘空间,N>0 , 50 表示50字节,1k,5m,1g...
$> hdfs dfsadmin -setSpaceQuota 1m /user/ubuntu/data
4.清除空间配额
$> hdfs dfsadmin -clrSpaceQuota /user/ubuntu/data