我进入这种奇怪的行为,我有我的主程序和分叉的孩子.它们是这样的管道(数字是文件描述符):
___parent___
| | ____child_____
| 0 stdin | | |
| 1 pipe1[1]----------. | 1 stdout |
| 2 pipe2[1]----------.\ | 2 stderr |
|____________| \`----------> 3 pipe1[0] |
`----------> 5 pipe2[0] |
|______________|
Run Code Online (Sandbox Code Playgroud)
所以父从stdin获取输入,但是将stdout和stderr重定向到两个管道.孩子关闭了它的标准输入并使用了管道的读取端.
然后我有一个杀死孩子的功能:
void killChild(){
printf("Killing %d\n", (int)childID);
fflush(stdout);
kill(childID, SIGKILL);
waitpid(childID, NULL, 0); // getting rid of the zombie
}
Run Code Online (Sandbox Code Playgroud)
孩子被成功杀死但问题是父母本身也被杀死了.我检查了孩子的PID,这是正确的.
那么为什么父母会死?
我需要通过Java API从远程桌面使用HDFS集群.一切正常,直到写访问.如果我正在尝试创建任何文件,我会收到访问权限异常.路径看起来很好,但异常表示我的远程桌面用户名,这当然不是我需要访问所需的HDFS目录.
问题是: - 有没有办法在Java API中使用"简单"身份验证来表示不同的用户名? - 您能否在Java API示例中更好地解释hadoop/HDFS中的身份验证/授权方案?
是的,我已经知道'whoami'在这种情况下可能会使用shell别名超载但我宁愿避免像这样的解决方案.此处的具体细节是我不喜欢通过SSH和脚本使用管道等一些技巧.我想使用Java API执行所有操作.先感谢您.
我很高兴连接到HDFS并列出我的主目录:
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://hadoop:8020");
conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
FileSystem fs = FileSystem.get(conf);
RemoteIterator<LocatedFileStatus> ri = fs.listFiles(fs.getHomeDirectory(), false);
while (ri.hasNext()) {
LocatedFileStatus lfs = ri.next();
log.debug(lfs.getPath().toString());
}
fs.close();
Run Code Online (Sandbox Code Playgroud)
我现在想要做的是以特定用户身份连接(而不是whois用户).有谁知道你如何指定你连接的用户?
我正在尝试运行Apache Hadoop 1.21,但是我遇到了这个异常:
Failed to set setXIncludeAware(true) for parser org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
org.apache.xerces.jaxp.DocumentBuilderFactoryImpl@2662e5cf:java.lang.UnsupportedOperationException
Run Code Online (Sandbox Code Playgroud)
完整堆栈跟踪:
13/10/17 17:22:52 ERROR conf.Configuration: Failed to set setXIncludeAware(true) for parser org.apache.xerces.jaxp.DocumentBuilderFactoryImpl@2662e5cf:java.lang.UnsupportedOperationException: setXIncludeAware is not supported on this JAXP implementation or earlier: class org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
java.lang.UnsupportedOperationException: setXIncludeAware is not supported on this JAXP implementation or earlier: class org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
at javax.xml.parsers.DocumentBuilderFactory.setXIncludeAware(DocumentBuilderFactory.java:589)
at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:1131)
at org.apache.hadoop.conf.Configuration.loadResources(Configuration.java:1107)
at org.apache.hadoop.conf.Configuration.getProps(Configuration.java:1053)
at org.apache.hadoop.conf.Configuration.get(Configuration.java:460)
at org.apache.hadoop.fs.FileSystem.getDefaultUri(FileSystem.java:132)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:124)
at main.JobExecutor.executeModelCreation(JobExecutor.java:223)
at main.JobExecutor.main(JobExecutor.java:256)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.hadoop.util.RunJar.main(RunJar.java:160)
Run Code Online (Sandbox Code Playgroud)
我已经找了近3天的解决方案,我找到了几个网站(比如这个:Hadoop"无法为解析器设置setXIncludeAware(true)"错误以及如何解决它),建议将xerces和xalan添加到maven依赖.还有其他网站,建议几乎相反 …
我需要对存储在分布式FS上的相当大的文件进行哈希处理.我能够以比整个文件更好的性能处理文件的部分,所以我希望能够计算部分的哈希值然后求和.
我正在考虑CRC64
作为散列算法,但我不知道如何使用其理论上的"线性函数"属性,因此我可以对文件的各个部分求和.有什么建议?我错过了什么?
附加说明我为什么看CRC64
:
CRC32
implementation(zlib
),其中包括对部分CRC进行求和的方法,但我想要更广泛的东西.8个字节对我来说很好看.我想请求帮助.我安装了插件并成功添加了SonarQube服务器.我升级到4.1.2版.我使用IntelliJ IDEA 13.0.2.我也成功地联系了项目并出现了检查警告.但是当我解决问题时,状态不会更新.
我还通过名称'SonarQube issues'进行检查.然而,在运行检查后,警告也在那里,代码被修复了.在我看来同步失败了.有什么想法,请问什么todo?
我有点困惑.
如何让TestNG报告测试错误?
// ...
@DataProvider(name = "foo")
public Object[][] provideData () {
throw new SomeRuntimeException("Some error occurred. The test configuration "
+ "is somehow incorrect.");
}
Run Code Online (Sandbox Code Playgroud)
这只会导致测试跳过.该异常甚至没有记录.将它移动到构造函数只会记录异常,但这还不够......
我想要一个很大的错误消息.
目前,使用专用(自我)测试方法完成了至少显示一些测试失败的工作......
无论如何,很高兴知道testNG对错误的定义是什么样的.
谢谢你的任何提示!
我刚刚起床CDH 5.4
并安装了zookeeper.之前我曾多次成功使用过zkCli.这次命令行启动在到达提示符之前停止
Welcome to ZooKeeper!
JLine support is disabled
2015-05-04 18:18:33,936 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@975] - Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
2015-05-04 18:18:33,952 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@852] - Socket connection established to localhost/127.0.0.1:2181, initiating session
2015-05-04 18:18:33,985 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1235] - Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x34d12349d0a15cf, negotiated timeout = 30000
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
Run Code Online (Sandbox Code Playgroud)
我知道通常的打印输出是启用了JLine支持
是什么让它陷入困境?我没有看到任何方法来改变这个Cloudera管理器配置页面.
如果我有两个byte[]
数组,是否有一个内置函数来比较它们ala C memcmp()
?
单元测试涉及失败的代码路径的最佳方法是什么malloc()
?在大多数情况下,它可能并不重要,因为你正在做类似的事情
thingy *my_thingy = malloc(sizeof(thingy));
if (my_thingy == NULL) {
fprintf(stderr, "We're so screwed!\n");
exit(EXIT_FAILURE);
}
Run Code Online (Sandbox Code Playgroud)
但在某些情况下,除了死亡之外你还有其他选择,因为你已经为缓存或其他任何东西分配了一些额外的东西,你可以收回那些记忆.
但是,在那些您可以尝试从失败malloc()
中恢复的情况下,您在代码路径中执行的操作非常棘手并且容易出错,这使得测试变得尤为重要.你是怎么做到这一点的?