Hadoop运行mapreduce实例时,抛出错误 All datanodes xxx.xxx.xxx.xxx:xxx are bad. Aborting…

本文详细介绍了在使用Hadoop运行MapReduce实例时遇到的错误,即所有数据节点出现问题并导致程序终止。通过检查和调整Linux机器上的文件打开数目限制,最终成功解决了问题。解决方案包括使用ulimit命令查找默认值,修改/ect/security/limit.conf文件以增加限制,并确保所有datanode进行相应修改。

Hadoop运行mapreduce实例时,抛出错误 All datanodes xxx.xxx.xxx.xxx:xxx are bad. Aborting…

 

java.io.IOException: All datanodes xxx.xxx.xxx.xxx:xxx are bad. Aborting…

at org.apache.hadoop.dfs.DFSClient$DFSOutputStream.processDatanodeError(DFSClient.java:2158)

at org.apache.hadoop.dfs.DFSClient$DFSOutputStream.access$1400(DFSClient.java:1735)

at org.apache.hadoop.dfs.DFSClient$DFSOutputStream$DataStreamer.run(DFSClient.java:1889)

java.io.IOException: Could not get block locations. Aborting…

at org.apache.hadoop.dfs.DFSClient$DFSOutputStream.processDatanodeError(DFSClient.java:2143)

at org.apache.hadoop.dfs.DFSClient$DFSOutputStream.access$1400(DFSClient.java:1735)

at org.apache.hadoop.dfs.DFSClient$DFSOutputStream$DataStreamer.run(DFSClient.java:1889)

经查明,问题原因是linux机器打开了过多的文件导致。

用命令ulimit -n可以发现linux默认的文件打开数目为1024

修改/ect/security/limit.conf,增加hadoop soft 65535
再重新运行程序(最好所有的datanode都修改),问题解决

 

非常感谢淘宝团队:http://rdc.taobao.com/blog/dw/archives/245

### C++ 构造函数静态成员变量的赋值 在C++中,静态成员变量属于整个类而非某个特定的对象实例。因此,在构造函数内部无法直接对静态成员变量进行赋值操作[^1]。这是因为静态成员变量的生命期独立于任何对象实例,并且它们必须在类外部显式初始化。 如果希望实现某种逻辑来间接影响静态成员变量的值,则可以在构造函数中调用其他方法或者更新该静态成员变量的状态。以下是具体解释: #### 静态成员变量的初始化位置 静态成员变量需要在类定义之外单独完成初始化工作。例如: ```cpp class Example { public: static int counter; }; // 类外初始化静态成员变量 int Example::counter = 0; ``` 上述代码展示了如何在类外初始化静态成员变量 `counter` 的过程[^2]。 #### 使用构造函数修改静态成员变量 虽然不能直接通过构造函数初始化静态成员变量,但是可以通过构造函数中的逻辑改变其值。比如每次创建新对象时增加计数器的值: ```cpp #include <iostream> using namespace std; class CounterExample { public: CounterExample() { ++objectCount; // 每次创建对象时自增 } static void showObjectCount() { cout << "Total objects created: " << objectCount << endl; } private: static int objectCount; // 声明静态成员变量 }; // 定义并初始化静态成员变量 int CounterExample::objectCount = 0; int main() { CounterExample obj1, obj2, obj3; CounterExample::showObjectCount(); // 输出总对象数量 return 0; } ``` 在这个例子中,每当有新的 `CounterExample` 对象被创建时,都会执行一次 `++objectCount` 来更新静态成员变量 `objectCount` 的值。 需要注意的是,这种方式并不是真正意义上的“通过构造函数赋值”,而是利用构造函数内的语句去调整已经提前初始化好的静态成员变量状态。 #### 关键点总结 - **静态成员变量必须在类外初始化**。 - **构造函数不可以用来初始化静态成员变量**,但可以用于更改已存在的静态成员变量值。 ```cpp #include <iostream> class TestClass { public: TestClass() { value += 10; // 修改静态成员变量value的值 } static int getValue() { return value; } private: static int value; // 声明静态成员变量 }; // 初始化静态成员变量 int TestClass::value = 5; int main(){ TestClass t1,t2; std::cout<<TestClass::getValue()<<std::endl; // 输出最终的结果应该是25 return 0; } ``` 此程序片段进一步验证了以上结论:尽管我们尝试经由构造函数设置初始数值,实际上仍需依赖先前设定的基础值来进行运算处理[^3]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值