JVM内存不足?
解决措施:增大对运行程序的内存配置即可
-Xms是设置内存初始化的大小(如下面的256m)
-Xmx是设置最大能够使用内存的大小(如下面的1024m, 最好不要超过物理内存)
Java heap space,这明显是运行时内存不足的原因,和上述(2)操作 一样,我们只需要修改HDFS的配置文件mapred-site.xml即可,从而增大运行时的内存。
具体操作:修改配置文件mapred-site.xml增大内存
<property>
<name>mapred.child.java.opts</name>
<value>-Xmx800m</value>
</property>
(4)在linux中运行hadoop时,有的时候DataNode或者NameNode进程启动不起来?
常见的解决措施:
①检查所有节点的防火墙是否关闭
②
简述HDFS是否处于安全模式
③在/etc/hosts文件中检查Ip地址与主机名的映射关系
④对HDFS中的数据在linux中进行备份,然后删除所有节点的logs文件和tmp文件,之后对NameNode进 行格式化
(5)之前在eclipse当中编程的时候,本来希望打包运行程序,因为jar包方式的运行速度快于eclipse当中运行的速度,因为在eclipse当中运行程序本身就需要解析主机名与IP地址的映射关系等等,但是由于当时只能从windows当中导入数据,所以只能在eclipse当中运行 程序,现在找到了从HDFS当中导入数据的方式:利用FileSystem这个api即可.
部分代码展示:
public ArrayList<Instance> arr1 = new ArrayList<Instance>(); //用于存放70%中的正的数据集
public ArrayList<Instance> arr2 = new ArrayList<Instance>(); //用于存放70%中的负的数据集
protected void setup(Context context)throws IOException, InterruptedException
{
//进行资源的初始化工作,将70%的训练样本放到容器当中
FileSystem fileSystem = null;
try
{
fileSystem = FileSystem.get(new URI("hdfs://hadoop80:9000/"), new Configuration());
} catch (Exception e){}
FSDataInputStream fr0 = fileSystem.open(new Path("hdfs://hadoop80:9000/poker70z.txt"));
BufferedReader fr1 = new BufferedReader(new InputStreamReader(fr0));
String str = fr1.readLine();
while(str!=null)
{
Instance instancez = new Instance(str);
arr1.add(instancez);
str = fr1.readLine();
}
FSDataInputStream fr00 = fileSystem.open(new Path("hdfs://hadoop80:9000/poker70f.txt"));
BufferedReader fr2 = new BufferedReader(new InputStreamReader(fr00));
String str2 = fr2.readLine();
while(str2!=null)
{
Instance instancef = new Instance(str2);
arr2.add(instancef);
str2 = fr2.readLine();
}
}</span></strong></span>
(6)之前在eclipse当中编写程序的时候,如果输出路径事先存在,通过fileSystem这个api可以将其给删掉,但是程序打成jar包之后,这个api还起作用吗?
答案:fileSystem这个api在shell下运行jar包的时候,仍是起作用的,可以将事先存在的输出路径进行删除。
(7)之前在eclipse当中编写程序的时候,我们可以通过println这个命令对重要的数据进行输出以供核实,但是当我们在shell下jar包的方式运行程序的时候,println是失效的,此时我们该怎么做?
解决方法:利用counter计数器替代println的功能
<span style="font-size:14px;"><strong><span style="font-size:14px;"> protected void cleanup(Context context)throws IOException, InterruptedException
{
Counter counter = context.getCounter("num", "arr3.size");
counter.setValue(arr3.size());
for(int i=0;i<arr3.size();i++)
{
context.write(new Text(arr3.get(i)),NullWritable.get());
}
}</span></strong></span>
(8)MapReduce中任务的运行情况总结。 ①任务job并不会随着客户端的关闭而停止运行,除非ctrl + c
②hadoop job -list 命令可以查看正在运行的job
③hadoop job -kill 任务号可以杀死正在运行的job
2016年5月12日14:05:02