Hadoop集群中增加新节点 向一个正在运行的Hadoop集群中增加几个新的Nodes 1. 新节点上部署java/hadoop程序,配置相应的环境变量 2. 新节点上增加用户,从master上拷贝id_rsa.pub并配置authorized_keys 3. 新节点上设置host,需要有集群中各节点的host对应 4. 新节点上建立相关的目录,并修改属主 5. master的slaves文件中增加上相的节点,master上增加相应的host 6. 在新节点上启动datanode和tasktracker /opt/sohuhadoop/hadoop/bin/hadoop-daemon.sh start datanode 7. 进行block块的均衡 在hdfs-site.xml中增加设置balance的带宽,默认只有1M: <property> 运行以下命令: /opt/sohuhadoop/hadoop/bin/start-balancer.sh -threshold 3 均衡10个节点,移动400G数据,大概花费了3个小时 The cluster is balanced. Exiting…
Hadoop
1 Comment »
十二月 13th, 2010 利用Decommission从Hadoop集群中Remove节点
我们现有的Hadoop集群已经运行了一段时间了 由于集群中的服务器分布在2个不同的机房,受跨机房带宽的限制 集群中在2个机房之间的数据传输很慢 所以想把另一个机房的3台服务器从Hadoop集群中去掉 Hadoop提供了Decommission的特性,可以按照以下步骤来操作: 1. 在hadoop的conf目录下生成一个excludes的文件,写上需要remove的节点ip 一个节点一行,注意要写ip,不能写Hostname,如: 10.15.10.41 2. 在hdfs-site.xml中增加配置: <property> 3. 复制以上2个文件到集群各节点上 4. 执行hadoop dfsadmin -refreshNodes命令,它会在后台进行Block块的移动 从移出的Nodes上移动到其它的Nodes上面 5. 通过以下2种方式查看Decommission的状态: hadoop dfsadmin -report http://10.10.71.220:50070/dfsnodelist.jsp 正在执行Decommission,会显示: Decommission Status : Decommission in progress 执行完毕后,会显示: Decommission Status : Decommissioned
Hadoop
1 Comment »
十一月 19th, 2010 基于Hadoop的Hbase环境搭建
基于现有的Hadoop集群,来搭建Hbase的环境 整个过程还是比较简单的 1. 下载Hbase源码,并解压 cp hbase-0.20.6.tar.gz /opt/hadoop/ 2.修改hbase-env.sh,加入java环境,并修改log位置 export JAVA_HOME=/opt/java/jdk 3. 修改hbase-site.xml,配置hbase <property> 几个配置的说明: hbase.rootdir设置hbase在hdfs上的目录,主机名为hdfs的namenode节点所在的主机hbase.cluster.distributed设置为true,表明是完全分布式的hbase集群hbase.master设置hbase的master主机名和端口hbase.zookeeper.quorum设置zookeeper的主机,官方推荐设置为3,5,7比较好4. 编辑regionservers文件,设置regionservers的服务器,和hadoop的slaves一样即可 5. 启动Hbase /opt/sohuhadoop/hbase/bin/start-hbase.sh Hbase默认只有一个Master,我们可以也启动多个Master: /opt/sohuhadoop/hbase/bin/hbase-daemon.sh start master 不过,其它的Master并不会工作,只有当主Master down掉后 其它的Master才会选择接管Master的工作 Hbase也有一个简单的web界面,来查看其状态 http://10.10.71.1:60010/master.jsp http://10.10.71.1:60010/zk.jsp
Hadoop
No Comments »
十一月 18th, 2010 Hadoop集群的NameNode的备份
Hadoop集群中,NameNode节点存储着HDFS上所有文件和目录的元数据信息 如果NameNode挂了,也就意味着整个Hadoop集群也就完了 所以,NameNode节点的备份很重要,可以从以下2个方面来备份NameNode节点 1. 在hdfs-site.xml中,配置多个name的dir到不同的磁盘分区上: <property> 2. 在另外的一台服务器上配置Secondary NameNode:它是NameNode的一个备份 Secondary NameNode会定期合并fsimage和edits日志,将edits日志文件大小控制在一个限度下 合并的时机是由2个配置参数决定的: fs.checkpoint.period,指定连续两次检查点的最大时间间隔, 默认值是1小时。 Secondary NameNode的配置过程如下: 在conf/masters中指定第二名称节点的主机名 在core-site.xml中指定checkpoint的目录<property> 如果NameNode节点挂了,可以按照如下步骤来从Secondary NameNode来恢复: 在dfs.name.dir指定的位置建立一个空文件夹 从Secondary NameNode上把secondname的目录给scp到新的NameNode机器的fs.checkpoint.dir下 使用hadoop/bin/hadoop namenode -importCheckpoint来启动NameNode,主要不要执行format命令使用hadoop fsck /user命令检查文件Block的完整性 详细的Secondary NameNode细节可参考Hadoop官方文档: http://hadoop.apache.org/common/docs/r0.20.2/hdfs_user_guide.html#Secondary+NameNode
Hadoop
No Comments »
十一月 17th, 2010 惊天大悲剧-Hadoop的rmr和trash
这两天在操作Hadoop集群时,由于一个误操作,制作了一个天大的悲剧 不小心把Hadoop集群上的所有文件全部删除了,具体情况是这样的: 我用hadoop的超级帐户要建立一个目录,结果发现位置错了 也是,想使用rmr删掉那个目录,可是不小心把命令写成了 hadoop fs -rmr /user 于是,悲剧出现了,所有user目录下的所有目录和文件全都没有了 当时我就慌神了,赶紧从web查看50070的服务 眼看着DFS Used空间从100多G不停的减少 后来才反应过来,赶紧停掉namenode节点,然后上网google办法 后来,从secondname节点重新恢复了一个checkpoint 但绝大部分数据都已经丢失了,只恢复了一小部分数据,已经没啥用了 幸好,原始log我们在其它服务器上还保留的有,只能重新分析再入Hadoop了 总结了一下几点教训: 首先一定要控制好hadoop上各用户的权限,使各user只能操作自己的目录尽量少用hadoop的超级用户进行操作,可以减少误操作hadoop的rm和rmr命令,设计的太BT了,连一个确认提示都没有,直接就删除了。看到有人给官方提了这个建议,但人家回复说:已经有了trash机制了,所以不需要提示,真是无语….hadoop的trash功能:很遗憾,之前没有配置trash,所以就直接给删除了,经过这次误操作,赶紧配置上trash,并设置保留时间为7天。在core-site.xml中增加如下配置,表明rm后会在trash中保留多少分钟: <property> 很遗憾的是,hadoop的这个默认值是0,就是直接删除了,为什么要这么设计呢?郁闷…. 经过简单的测试,这个trash功能还是不错的,当rm后,它会move到当前文件夹下的.Trash目录下 如果你删除一个文件或目录多次,则hadoop会自动在name后加上数字序列号 这样,如果你误删除后,就可以有选择的恢复文件了 hadoop fs -mkdir /user/oplog/test
Hadoop
1 Comment »
九月 19th, 2010 hadoop中mapred.tasktracker.map.tasks.maximum的设置
目前,我们邮件的一部分log已经迁移到Hadoop集群上 并由Hive来执行相关的查询 hadoop中默认的mapred.tasktracker.map.tasks.maximum设置是2 也即:每一个tasktracker同时运行的map任务数为2 照此默认设置,查询80天某用户的操作日志,耗时5mins, 45sec 经过测试,发现将mapred.tasktracker.map.tasks.maximum设置为节点的cpu cores数目或者数目减1比较合适 此时的运行效率最高,大概花费3mins, 25sec 我们现在的机器都是8核的,所以最终配置如下: <property> 而对于mapred.map.tasks(每个job的map任务数)值,hadoop默认值也为2 可以在执行hive前,通过set mapred.map.tasks=24来设定 但由于使用hive,会操作多个input文件,所以hive默认会把map的任务数设置成输入的文件数目 即使你通过set设置了数目,也不起作用…
Hadoop
No Comments »
九月 14th, 2010 从集群外操作Hadoop和Hive
如果在集群里面,可以直接使用hadoop的fs shell来操作集群 往上面put/get文件,或者执行一些hive查询 但如果要在hadoop集群外面去操作hadoop和hive,那么可以有2个办法: 1. 写Java程序,调用hadoop提供的一些API去完成 2. 在需要操作的服务器上搭建一个hadoop的环境 目前,我们采用的是第2种办法,这种方式比较简单 只需要将hadoop master上的hadoop相关目录打个包 部署到对应的服务器上,并修改相应的环境变量和hosts就可以了 打包时,可以把一些无用的配置信息和脚本给去掉 但需要保留core-site.xml和hdfs-site.xm和mapred-site.xml这3个配置文件
Hadoop
No Comments »
九月 13th, 2010 Hadoop和Hive的权限问题
如果你的Hadoop集群,是公用的,可能有很多其它部门的文件都存放在上面 那么,就一定要考虑权限问题,给各种数据以不同的权限 Hadoop目前的权限,实现的比较简单,类似于Shell的权限,是通过操作用户名来控制的 它默认的超级用户就是你启动Hadoop时的用户 一般,我们所有的服务器都默认是用root来登录的 因为,安装Hadoop时一定要新建一个用户来安装,不要安装在root下 然后,对于不同的log,再新建不同的用户目录来存放,如:
这样,只有test这个用户才能操作/user/test目录,其它用户都无权操作 如果,你su pplog,然后执行
你将会看到一个错误提示: ls: could not get get listing for 'hdfs://zw-hadoop-master:9000/user/test' : org.apache.hadoop.security.AccessControlException: Permission denied: user=pplog, access=READ_EXECUTE, inode="test":test:test:rwx—— 对于Hive来说,可以这么来控制权限访问 为不同日志的MetaStore在Mysql建立不同的数据库为不同的用户建立单独的conf目录,如用户test的hive conf目录位于/opt/sohuhadoop/hive/conf/test下在单独的test目录下,修改hive-default.xml文件,配置相应的db启动单独的hiveserver实例,并监听不同的端口:HIVE_PORT=10020 nohup hive –config $HIVE_HOME/conf/test –service hiveserver &在JDBC中连接自己对应的端口,如10020上面的权限控制虽然有一定作用,但却是还很弱,如果其它人知道了你的用户名或者端口号 一样可以去删除你的文件,据说,将来Hadoop会对权限认证做一定改进,期待……
Hadoop
No Comments »
九月 2nd, 2010 搭建基于Eclipse的Hadoop测试环境
本机的环境如下: Eclipse 3.6 Hadoop-0.20.2 Hive-0.5.0-dev 1. 安装hadoop-0.20.2-eclipse-plugin的插件。注意:Hadoop目录中的\hadoop-0.20.2\contrib \eclipse-plugin\hadoop-0.20.2-eclipse-plugin.jar在Eclipse3.6下有问题,无法在 Hadoop Server上运行,可以从http://code.google.com/p/hadoop-eclipse-plugin/下载 2. 选择Map/Reduce视图:window -> open pers.. -> other.. -> map/reduce 3. 增加DFS Locations:点击Map/Reduce Locations—> New Hadoop Loaction,填写对应的host和port
4. 设置本机的Host:
5. 新建一个Map/Reduce Project,新建Mapper,Reducer,Driver类,注意,自动生成的代码是基于老版本的Hadoop,自己修改:
6. 在DriverTest上,点击Run As —> Run on Hadoop,选择对应的Hadoop Locaion即可 http://hi.baidu.com/eagoo/blog/item/4d8918b3b2a108b1d8335a10.html |