hadoop—集群维护手册
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Had oop部分
启动命令:start-all.sh
停止命令:stop-all.sh
Hadoop运行
增加集群的存储量/节点
如果只增加集群的存储量,建议增加Hadoop datanode节点。
步骤:
1、停掉集群包括Hadoop和hbase,当然也可以不停掉,直接在hadoop namenode的配置文件Slave里添加新节点的host,别忘了在host文件里也要添加新添加的host名。
2、执行bin/start-all.sh启动集群
3、以下选择一种
1)如果不手动作平衡,插入的数据将会放在新添加的节点上。
以趋于平衡。
2)如果手动平衡,则 start-balancer.sh和调用bin/sHadoop balancer命令相似,也可加参数
-threshold 5(threshold 是平衡阈值,默认是10%,值越低各节点越平衡,但消耗时间也更长)。
在使用start-balancer.sh时,如果在hdfs-site.xml里面没有配置dfs.balance.bandwidthPerSec,那么集群hdfs内部默认使用1M/S的速度移动数据(so slowly...),我们可以通过在hdfs-site.xml 里面配置dfs.balance.bandwidthPerSec来加快balance的速度。
最开始我们配置的是20m/S ,然后结果是导致job运行变得不稳定,出现一些意外的长map单元,某些reduce时间处理变长(整个集群负载满满的情况下,外加20m/s的balance),在前天的中国hadoop年会上听淘宝调整的为10m/s,需要调整后实验,看看情况如何。
另外再修改dfs.balance.bandwidthPerSec参数后,需要在namenode上运行stop-dfs.sh start-dfs.sh重启hdfs生效。
我们可以通过stop-balancer.sh停掉平衡任务。
作完平衡后,启动hbase,正常。
果cluster设置的副本数不为3(默认),需要先运行命令hadoop fs –setrep [-R] <path> ;
进行设置一个文件的副本系数。
如果默认为3则不必。
如果执行完平衡以后才改变副本数,会将新加入到新节点上的所有数据删除。
dfs.replication设置的副本系数只在文件系统写入时有效,并不影响在新添加节点时,平衡时的副本数;
另外:由于还有hbase数据库,因此,在运行完平衡以后,将hbase下的.META.文件删除(防止出错),启动hbase,执行hbase org.jruby.Main add_table /表名来进行hbase表恢复;
Hadoop1升级
1.运行dfsadmin -upgradeProgress status 检查是否存在备份如果是第一次升级就不存在备份(在升级Hadoop前,如果已经存在备份,需要先结束 finalize 它。
)
2.备份node.dir下文件,同时要备份下hdfs的文件目录的元数据信息:
bin/hadoop fsck / -files -blocks -locations > dfs-v-old-fsck-1.log bin/hadoop dfs -lsr / > dfs-v-old-lsr-1.log
bin/hadoop dfsadmin -report > dfs-v-old-report-1.log
3.停止所有节点 bin/stop-all.sh
4.在所有节点上重新部署hadoop 并替换conf文件夹下所有文件(就是将原有的hadoop-0.19.1更名为hadoop-0.19.1-oldverstion,然后解压hadoop-0.19.2.tar.gz 将0.19.2中的conf文件替换为0.19.1中的conf文件夹)
并且要对照修改hadoop-site.xml中的路径指定是否正确
5.使用 bin/start-dfs.sh -upgrade 进行升级(DFS从一个版本升级到另外一个版本的时候,NameNode和DataNode使用的文件格式有可能会改变。
当你第一次使用新版本的时候,你要告诉Hadoop 去改变HDFS版本,否则,新版本不会生效)
6.监控升级情况和升级问题处理
开始升级,你可以通过
bin/hadoop dfsadmin -upgradeProgress
命令来查看版本升级的情况。
当然你可以使用
bin/hadoop dfsadmin -upgradeProgress details
来查看更多的详细信息。
当升级过程被阻塞的时候,你可以使用
bin/hadoop dfsadmin -upgradeProgress force
来强制升级继续执行(当你使用这个命令的时候,一定要慎重考虑)。
当HDFS升级完毕后,Hadoop依旧保留着旧版本的有关信息,
以便你可以方便的对HDFS进行降级操作。
可以使用bin/start-dfs.sh -rollback来执行降级操作。
7.对比现有hdfs的文件目录的元数据信息和升级的差异。
8.升级完成,Hadoop一次只保存一个版本的备份,当新版本运行几天以后还是没有出现什么问题,你就可以使用运行一段时间后没有问题再执行升级终结操作
bin/hadoop dfsadmin -finalizeUpgrade
命令把旧版本的备份从系统中删掉了。
删除以后rollback 命令就失效了。
Hdfs
Mapreduce
Hbase部分
启动命令:start-hbase.sh
如果一个regionserver死掉了,可以执行该命令启动,也可以启动整个hbase;
停止命令:stop-hbase.sh
停止hbase运行的命令.
日常维护
1.基本命令
建表:create 'testtable','coulmn1','coulmn2'
也可以建表时加coulmn的属性如:create 'testtable',{NAME => 'coulmn1', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', VERSIONS => '10', COMPRESSION => 'LZO', TTL => '30000', IN_MEMORY => 'false', BLOCKCACHE => 'false'}, {NAME => 'coulmn', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', VERSIONS => '30', COMPRESSION => 'LZO', TTL => '30000', IN_MEMORY => 'true'} (其中的属性有versions:设置历史版本数,TTL:过期时间,COMPRESSION:压缩方式,当配置lzo的情况)删除表:drop 'testtable' (删除表之前先要禁用表,命令disable 'testtable')
启用和禁用表: enable 'testtable' 和disable 'testtable'
其它的基本命令:describe 'testtable'(查看表结构),alert 修改表结构,list 列出所有表。
2.维护命令
1,major_compact 'testtable',通常生产环境会关闭自动major_compact(配置文件中hbase.hregion.majorcompaction设为0),选择一个晚上用户少的时间窗口手工major_compact,如果hbase更新不是太频繁,可以一个星期对所有表做一次major_compact,这个可以在做完一次major_compact后,观看所有的storefile数量,如果storefile数量增加到 major_compact后的storefile 的近二倍时,可以对所有表做一次major_compact,时间比较长,操作尽量避免高锋期。
2,flush 'testtable',将所有memstore刷新到hdfs,通常如果发现regionserver的内存使用过大,造成该机的 regionserver很多线程block,可以执行一下flush操作,这个操作会造成hbase的storefile 数量剧增,应尽量避免这个操作,还有一种情况,在hbase进行迁移的时候,如果选择拷贝文件方式,可以先停写入,然后flush所有表,拷贝文件。
3,balance_switch true或者balance_switch flase,配置master是否执行平衡各个regionserver 的region数量,当我们需要维护或者重启一个regionserver时,会关闭balancer,这样就使得region
在regionserver上的分布不均,这个时候需要手工的开启balance。
3.重启一个regionserver
bin/graceful_stop.sh --restart --reload --debug nodename
这个操作是平滑的重启regionserver进程,对服务不会有影响,他会先将需要重启的regionserver 上面的所有 region迁移到其它的服务器,然后重启,最后又会将之前的region迁移回来,但我们修改一个配置时,可以用这种方式重启每一台机子,这个命令会关闭balancer,所以最后我们要在hbase shell 里面执行一下balance_switch true,对于hbase regionserver重启,不要直接kill进程,这样会造成在zookeeper.session.timeout这个时间长的中断,也不要通过 bin/hbase-daemon.sh stop regionserver 去重启,如果运气不太好,-ROOT-或者.META.表在上面的话,所有的请求会全部失败。
4.关闭下线一台regionserver
bin/graceful_stop.sh --stop nodename
和上面一样,系统会在关闭之前迁移所有region,然后stop进程,同样最后我们要手工balance_switch true,开启master的region均衡。
5.检查region是否正常以及修复
bin/hbase hbck (检查)
bin/hbase hbck -fix (修复)
会返回所有的region是否正常挂载,如没有正常挂载可以使用下一条命令修复,如果还是不能修复,那需要看日志为什么失败,手工处理。
6.hbase的迁移
◆copytable方式
bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable
--peer.adr=zookeeper1,zookeeper2,zookeeper3:/hbase 'testtable'
目前0.92之前的版本的不支持多版本的复制,0.94已经支持多个版本的复制。
当然这个操作需要添加hbase目录里的conf/mapred-site.xml,可以复制hadoop的过来。
◆ Export/Import
bin/hbase org.apache.hadoop.hbase.mapreduce.Export testtable /user/testtable [versions] [starttime] [stoptime]
bin/hbase org.apache.hadoop.hbase.mapreduce.Import testtable /user/testtable 跨版本的迁移,我觉得是一个不错的选择,而且copytable不支持多版本,而export支持多版本,比copytable更实用一些。
◆直接拷贝hdfs对应的文件
首先拷贝hdfs文件,如bin/hadoop distcp hdfs://srcnamenode:9000/hbase/testtable/ hdfs://distnamenode:9000/hbase/testtable/
然后在目的hbase上执行bin/hbase org.jruby.Main bin/add_table.rb /hbase/testtable
生成meta信息后,重启hbase
这个操作是简单的方式,操作之前可以关闭hbase的写入,执行flush所有表(上面有介绍),再distcp拷贝,如果hadoop版本不一致,可以用hftp接口的方式,我推荐使用这种方式,成本低。
HBase升级
在hbase-0.96-0版本,提供了升级命令,当然需要预先将低版本的升级到0.96或者更高版本时,需要使用升级命令;
Hbase命令提供了如下的选项;
echo "Usage: hbase [<options>] <command> [<args>]"
echo "Options:"
echo " --config DIR Configuration direction to use. Default: ./conf"
echo " --hosts HOSTS Override the list in 'regionservers' file"
echo ""
echo "Commands:"
echo "Some commands take arguments. Pass no args or -h for usage."
echo " shell Run the HBase shell"
echo " hbck Run the hbase 'fsck' tool"
echo " hlog Write-ahead-log analyzer"
echo " hfile Store file analyzer"
echo " zkcli Run the ZooKeeper shell"
echo " upgrade Upgrade hbase"
echo " master Run an HBase HMaster node"
echo " regionserver Run an HBase HRegionServer node"
echo " zookeeper Run a Zookeeper server"
echo " rest Run an HBase REST server"
echo " thrift Run the HBase Thrift server"
echo " thrift2 Run the HBase Thrift2 server"
echo " clean Run the HBase clean up script"
echo " classpath Dump hbase CLASSPATH"
echo " version Print the version"
echo " CLASSNAME Run the class named CLASSNAME"
其中“hbase upgrade”就是升级命令;
升级步骤:
1、根据低版本的配置(conf目录下),修改高版本的配置(conf), hbase的pid文件目录和数据目录都不
用修改,zk的配置都可以不更改,日志目录可以改变
2、拷贝必要的包到高版本hbase的lib目录下,例如:当前的hadoop核心包
3、修改环境变量的HBASE_HOME目录,如果环境变量中配置了HBASE LIB目录下的包,需要检查高版本是
否存在,进行相应更改
4、同步到集群的其他机器中
5、执行“hbase upgrade”更新命令,目的是更新当前hbase版本等内容
6、在主节点上执行”start-hbase.sh”命令
7、检查hbase是否启动成功
Hive 部分
Root用户登录后
启动命令:service hiveserver start
重启命令:service hiveserver restart
停止命令:service hiveserver stop
查看状态命令:service hiveserver status
以上命令是给远程调用时的服务;
直接在终端操作hive,以上服务可以不启动。
(资料素材和资料部分来自网络,供参考。
可复制、编制,期待你的好评与关注)。