Hadoop问题拾零

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

hadoop的文件系统叫做hdfs就是hadoop分布式分布式文件系统的中文简写。这个系统是对google的gfs的开源实现。下面来回答问题。
首先是节点故障
google在他们那篇gfs的论文中说google在使用gfs曾说过google在使用gfs时遇到过各种各样的问题主要有应用程序bug、操作系统的bug、人为失误甚至还有硬盘、内存、连接器、网络以及电源失效。在一个大型的系统中硬盘内存等等组件的老化过度使用因为数据读写非常频繁等问题也是不容忽视的。hadoop的hdfs是需要考虑这些问题的。
然后是备份恢复的处理
可以先搭建一个只有3台datanode的小集群设置数据备份为2。首先清空已有数据然后在其中一台datanode上上传数据默认时hadoop是会在上传数据的datanode存入一个数据备份的。然后在down掉这台datanode这样你就少了一个数据备份之后你在另一台机器上读取数据这时你可以查看剩下的两台datanode中的dfs文件夹也就是你存储hdfs数据的文件夹打开其中block开头的文件看这时应该就可以看到两台机器都有备份了。
根据gfs的论文hadoop应该在数据被再次使用时进行检查如果发现少了一个备份会进行数据恢复工作。另一个事情是机器空闲时会在后台监测数据备份情况。也就是说数据恢复是自动这也是hadoop的强大之处嘛。
至于namenode的恢复

没有处理过类似的问题不过猜想和secondary namenode 有关应该是将secondary namenode 存储的数据copy到namenode上或是直接将secondary namenode 变成namenode 。
至于节点问题

down的节点经过恢复后可以直接链接进入hadoop集群而不用重新启动集群。命令是bin/hadoop-daemon.sh start datanode
--------------------------------------------------------------------------------------------------------

备注

1系统默认的分块大小是64M所以存储文件的时候如果单一文件大于64M就会被HDFS系统进行相应的划分这个64M是可以通过HDFS的配置文件进行配置的配置成你认为适合你应用的大小。
20.21版不稳定且不提供支持现在学的话找0.20版本的学吧。

3HDFS not found可能是由于你的HADOOP_HOME没有设置
执行如下命令后再hdfs namenode -format
export HADOOP_HOME="你的hadoop安装路径"

http://hadoop.apache.org/common/releases.html
3成功在windows下配置了hadoop,启动成功后,利用./hadoop fs -ls / 只查出一项正常新建hadoop系统就是这样的。原因是没有创建目录也没上传文件。
用这个命令试试./hadoop fs -lsr /
创建目录./hadoop fs -mkdir testdir
上传./hadoop fs -put resfile testdir

4hadoop配置不成功你可以通过两种方式查看
        a、netstat -tnp看下你的9000端口是否开启了。
        b、通过web-ui的浏览器方式输入:http:master:50030/就可以看到真正起动的节点数了。
5建议组合hadoop-0.20.2-cdh3u0+cdh3u0的其他套件这是生产线版本官方修改版是现在最稳定的hadoop-0.20.x 与 hbase-0.20.x组合如需单独配置zookeeper集群可以参考官方文档进行配置
------------------------------------------------------------------------------------------
6Hbase连不上zookeeper。

我给你一个连接代码看看吧要保证机器IP是对的。
Configuration conf = HBaseConfiguration.create();

        conf.set("hbase.zookeeper.quorum", ip);

        conf.set("hbase.zookeeper.property.clientPort", port);

        conf.set("hbase.master", master);
然后再用HTable table = new HTable(conf,"表名");来获得 HTable句柄。

如果还是不行要在zookeeper机器上用netstat -pan|grep 2181看看这个端口上的zookeeper是不是正常同为Hadoop出身的Hypertable和Hbase分别倾向于C和JavaHbase本身并没有开放面向C的API但是可以通过Thrift实现Hbase已经发布了ThriftAPI用以Hbase与C程序之间的交互

7关于hadoop编程的一个小问题
hadoop任务运行时hadoop将输入目录分割成行传递给mappper的标准输入mapper进而对输入进行处理。将输入目录下所有文件处理完毕时hadoop就会使此任务完成进而停止工作。而且输入目录好像都是任务运行之前就已经确定不会改变。如果我想往hadoop的输入目录中不断添加文件让hadoop不停地运行如果输入目录的所有文件都已经处理完毕并不完成任务而是等待新文件的到来。该怎么办
这个在现有Hadoop中是无法实现的。
在目录定下的时候目录下的文件已经信息已经被读入hadoop中输入已经确定了mapreduce跑完当前所有文件hadoop依然会等待输入但可以想象怎么给hadoop信号让他停止运行。

在我的程序中服务器一直等待用户的命令并根据命令作相应的处理。那么这个服务器端如果用hadoop来实现分布式编程呢我现在只能想到服务器接收到一定命令或等待一定时间后启动一次mapreduce来处理当前阶段接收到的命令。然后服务器继续接收命令放在另一个目录下待新目录下的命令达到一定数量或过了一定时间后再次启动mapreduce来处理这阶段接收到的命令。如此反复下去。
但这样不停的启动mapreduce似乎开销巨大啊    
 回答mapreduce只是被抽象成一种简单模型如果按照你这个处理那是需要在前面增加一步如你所说。所以脚本启动是必不可少关于开销巨大的问题如果你使用mapreduce就无需要考虑这个了使用上mapreduce的都是大数据集的工作启动mapreduce相比这个可以忽略不计。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Hadoop