在 HDFS 的上下文中,我们有 Namenode 和 Datanode,说 Namenode 存储文件系统命名空间是什么意思?
另外,我们为 datanode 指定的目录(在 hdfs-core.xml 中)是唯一可以存储数据的地方,还是可以指定任何其他目录来保存数据?
我有一个大文本文件(~3GB)。在创建它时,我犯了一个错误,只有第一行的前几个(不是全部)字符是错误的。第一行中的其余字符是正确的。所有其他行也是正确的。我的,很简单,问题是:
如何删除这么大文件的前 n 个字符?我不想删除整个第一行,只删除前 n 个字符。我的要求是:
我试过 sed,但它替换了第一行并复制了所有其余的行……也许我可以使用“退出”选项?当然,我可以再次创建文件,而不会犯那个错误......
在Mapreduce中,我们说映射器产生的输出称为中间数据.
中间数据是否也被复制?
中间数据是暂时的吗?
中间数据何时被删除?是自动删除还是我们需要明确删除它?
new.txt文件可以肯定; 我不知道为什么当我试图进入hdfs目录时,它说文件不存在.
deepak@deepak:/$ cd $HOME/fs
deepak@deepak:~/fs$ ls
new.txt
deepak@deepak:~/fs$ cat new.txt
an apple a day keeps the doctor away
deepak@deepak:~/fs$ hadoop fs -cp $HOME/fs/new.txt $HOME/hdfs
cp: File does not exist: /home/deepak/fs/new.txt
deepak@deepak:~/fs$
Run Code Online (Sandbox Code Playgroud)
PS:我已经创建了一个名为hdfs的目录:
deepak@deepak:~/fs$ hadoop fs -mkdir $HOME/hdfs
mkdir: cannot create directory /home/deepak/hdfs: File exists
Run Code Online (Sandbox Code Playgroud) 我正在 Eclipse 上加密和解密字符串。我正在使用以下功能:
private final static String ALGORITHM = "AES";
public static String cipher(String secretKey, String data) throws Exception {
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec spec = new PBEKeySpec(secretKey.toCharArray(), secretKey.getBytes(), 128, 256);
SecretKey tmp = factory.generateSecret(spec);
SecretKey key = new SecretKeySpec(tmp.getEncoded(), ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, key);
return toHex(cipher.doFinal(data.getBytes()));
}
public static String decipher(String secretKey, String data) throws Exception {
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec spec = new PBEKeySpec(secretKey.toCharArray(), secretKey.getBytes(), 128, 256);
SecretKey tmp = factory.generateSecret(spec);
SecretKey key = …Run Code Online (Sandbox Code Playgroud) 我有Windows 7,Java 8,Maven和Eclipse.我创建了一个Maven项目和使用几乎一模一样的代码在这里.
这只是一个简单的"字数统计"样本.我尝试从Eclipse启动"驱动程序"程序,我提供命令行参数(输入文件和输出目录)并获得以下错误:
Exception in thread "main" java.lang.NullPointerException at
java.lang.ProcessBuilder.start(ProcessBuilder.java:1012) at
org.apache.hadoop.util.Shell.runCommand(Shell.java:404) at
org.apache.hadoop.util.Shell.run(Shell.java:379) at
org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:589) at
org.apache.hadoop.util.Shell.execCommand(Shell.java:678) at
org.apache.hadoop.util.Shell.execCommand(Shell.java:661) at
org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:639) at
org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:435) at
org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:277) at
org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:125) at
org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:344) at
org.apache.hadoop.mapreduce.Job$10.run(Job.java:1268) at
org.apache.hadoop.mapreduce.Job$10.run(Job.java:1265) at
java.security.AccessController.doPrivileged(Native Method) at
javax.security.auth.Subject.doAs(Subject.java:422) at
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491) at
org.apache.hadoop.mapreduce.Job.submit(Job.java:1265) at
org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1286) at
misc.projects.hadoop.exercises.WordCountDriverApp.main(WordCountDriverApp.java:29)
Run Code Online (Sandbox Code Playgroud)
失败的行(WordCountDriverApp.java:29)包含启动作业的命令:
job.waitForCompletion(true)
我想让它工作,因此我想了解一些事情:
我是否必须提供任何hdfs-site.xml,yarn-site.xml,...所有这一切,如果我只想要本地模式(没有任何集群)?我现在没有这些XML配置文件.据我所知,本地模式的默认值都可以,也许我错了.
在Windows下完全可以(无论是启动任何Hadoop任务)还是整个Hadoop都只有Linux?
PS:Hadoop依赖关系如下:
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.2.0</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud) 我编写了以下随机数生成器shell脚本:
for i in $(seq 1 $1) #for as many times, as the first argument ($1) defines...
do
echo "$i $((RANDOM%$2))" #print the current iteration number and a random number in [0, $2)
done
Run Code Online (Sandbox Code Playgroud)
我这样运行:
./generator.sh 1000000000 101 > data.txt
Run Code Online (Sandbox Code Playgroud)
在[0,100]中生成1行ID和随机数的行,并将该数据存储在文件中data.txt.
我想要的输出是:
1 39
2 95
3 61
4 27
5 85
6 44
7 49
8 75
9 52
10 66
...
Run Code Online (Sandbox Code Playgroud)
它适用于少量行,但对于1B,我得到以下OOM错误:
./generator.sh:xrealloc:../bash/subst.c:5179:无法分配18446744071562067968字节(分配4299137024字节)
我程序的哪一部分会产生错误?我怎么能data.txt逐行写文件?我试过更换echo线路:
echo "$i $((RANDOM%$2))" >> $3
Run Code Online (Sandbox Code Playgroud)
3美元data.txt,但我认为没有区别.
我正在运行Map Reduce Program.但是我得到了类似的输出,即使我只使用mapper或者使用mapper和reducer运行它.
在此之后它永远不会完成.它挂在那里.
我不知道为什么reducer在mapper完成100%之前就开始了?什么可能是潜在的问题?
输出:
Map 10% Reduce 0%
Map 19% Reduce 0%
Map 21% Reduce 0%
Map 39% Reduce 0%
Map 49% Reduce 0%
Map 63% Reduce 0%
Map 67% Reduce 0%
Map 68% Reduce 0%
Map 68% Reduce 22%
Map 69% Reduce 22%
Run Code Online (Sandbox Code Playgroud)
这是一个映射器代码:
public class EntityCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
static String total_record="";
@Override
protected void map(LongWritable baseAddress, Text line, Context context)
throws IOException, InterruptedException {
Text entity=new Text();
IntWritable one=new IntWritable(1);
total_record=total_record.concat(line.toString());
String[] …Run Code Online (Sandbox Code Playgroud) 我在Hadoop MapReduce中几乎没有基本问题.
在MapReduce中是否有保证排序的地方?
我已经用C++了解它,但Java对我来说更具挑战性.这就是我所拥有的.我只想让它有4行3列初始化为1-12并将其打印到屏幕上.我的错误对你来说是否明显?谢谢!
我得到13个错误:(
包括line9:twoDArray [] []不是声明,; 预期的,非法的表达开始,每次都是几次.
我试过的代码:
import java.util.*;
class twoDimensional array
{ public static void main(String args[])
{
int[][] twoDArray = new int[4][3];
twoDArray[][]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
System.out.print(twoDArray.toString);
}
}
Run Code Online (Sandbox Code Playgroud)