Hadoop1.2中配置伪分布式的实例_java

1、设置ssh

安装ssh相关软件包:

复制代码 代码如下:

sudo apt-get install openssh-client openssh-server

然后使用下面两个命令之一启动/关闭sshd:

复制代码 代码如下:

sudo /etc/init.d/ssh start|stop
sudo service ssh start|stop

若成功启动sshd,我们能看到如下类似结果:

复制代码 代码如下:

$ ps -e | grep ssh
 2766 ?        00:00:00 ssh-agent
10558 ?        00:00:00 sshd

这时候,如果运行如下ssh登录本机的命令,会提示输入密码:

复制代码 代码如下:

ssh localhost

现在我们要做的就是让它不需要输入密码:

复制代码 代码如下:

$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa  #一个空密码的SSH密钥
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

这样的话就行了。如果仍不凑效,可能是密钥文件的权限设置不当。

2、配置hadoop

将hadoop-1.2.1解压到~/下,同时在~/下建立目录hadoop-env,继续在hadoop-env下建立如下的目录结构:

├── dfs
│   ├── checkpoint1
│   ├── data1
│   ├── data2
│   └── name1
└── test
    └── input
配置文件hadoop-1.2.1/conf/core-site.xml:

复制代码 代码如下:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://localhost:9000</value>
    <final>true</final>
  </property>
</configuration>

fs.default.name来指定HDFS的uri,如果value中没有提供端口,默认为8020。

配置文件hadoop-1.2.1/conf/hdfs-site.xml:

复制代码 代码如下:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
  <property>
    <name>dfs.name.dir</name>
    <value>~/hadoop-env/dfs/name1</value>
    <final>true</final>
  </property>
  <property>
    <name>dfs.data.dir</name>
    <value>~/hadoop-env/dfs/data1,~/hadoop-env/dfs/data2</value>
    <final>true</final>
  </property>
  <property>
    <name>fs.checkpoint.dir</name>
    <value>~/hadoop-env/dfs/checkpoint1</value>
    <final>true</final>
  </property>
</configuration>

dfs.name.dir指定namenode存储元数据的目录,可以指定多个目录,这些目录要用逗号分开;dfs.data.dir指定datanode存放数据的目录,可以指定多个目录;fs.checkpoint.dir指定辅助namenode存放检查点的目录。

配置文件hadoop-1.2.1/conf/mapred-site.xml:

复制代码 代码如下:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
  <property>
    <name>mapred.job.tracker</name>
    <value>localhost:9001</value>
    <final>true</final>
  </property>
</configuration>

3、测试

先格式化HDFS:

复制代码 代码如下:

./hadoop-1.2.1/bin/hadoop namenode -format

启动HDFS和MapReduce进程:

复制代码 代码如下:

$ ./hadoop-1.2.1/bin/start-dfs.sh
$ ./hadoop-1.2.1/bin/start-mapred.sh

启动时候如果报错,例如localhost: Error: JAVA_HOME is not set.,需要在./hadoop-1.2.1/conf/hadoop-env.sh文件中export JAVA_HOME,例如:

export JAVA_HOME=~/jdk1.7.0_25
如何检查是否成功启动了: 第一种方法是使用jps命令(Java Virtual Machine Process Status Tool),应该有如下类似输出:

复制代码 代码如下:

$ jps
13592 DataNode
13728 SecondaryNameNode
13837 JobTracker
12864 NameNode
13955 TaskTracker
16069 Jps

第二种方法是浏览器登录http://localhost:50030查看jobtracker,http://localhost:50070查看namenode。如果在使用翻墙软件,那么在访问时可能会报错,最简单的解决方法是关掉翻墙软件。 还有一种方法就是查看日志文件。

现在我们在~/hadoop-env/test/input目录下建立两个文件:

复制代码 代码如下:

$ echo "hello world" > test1.txt
$ echo "hi,world" > test2.txt

把这两个文件导入HDFS:

复制代码 代码如下:

./hadoop-1.2.1/bin/hadoop dfs -put hadoop-env/test/input/  output/

查看:

复制代码 代码如下:

$ ./hadoop-1.2.1/bin/hadoop dfs -ls /
Found 2 items
drwxr-xr-x   - user supergroup          0 2013-10-22 22:07 /test
drwxr-xr-x   - user supergroup          0 2013-10-22 21:58 /tmp

$ ./hadoop-1.2.1/bin/hadoop dfs -ls /test
Found 2 items
-rw-r--r--   3 user supergroup         12 2013-10-22 22:07 /test/test1.txt
-rw-r--r--   3 user supergroup          9 2013-10-22 22:07 /test/test2.txt

OK,配置完成。

注:本文使用的系统是linux mint 15 64bit,hadoop使用的是1.2.1版本。

时间: 2024-08-03 14:16:49

Hadoop1.2中配置伪分布式的实例_java的相关文章

windows配置hadoop-1.1.0的伪分布式环境(续)

windows配置hadoop-1.1.0的伪分布式环境(续) 博客分类: bigdata windowshadoop 在前一篇文章中,介绍了一写常见问题的解决方法. 但是,当我重装系统,再次按照前面一篇文章( http://winseclone.iteye.com/blog/1734737 ) 安装cygwin和hadoop-1时,发现伪分布式环境使用mapred时,总是报错.(忘了,但是好像当时没有遇到过这种情况.就当是安装win8送给自己的礼物吧!). 怀疑了很多东西,配置有问题,重新自定

java从字符串中提取数字的简单实例_java

随便给你一个含有数字的字符串,比如: String s="eert343dfg56756dtry66fggg89dfgf"; 那我们如何把其中的数字提取出来呢?大致有以下几种方法,正则表达式,集合类,还有就是String类提供的方法. 1 String类提供的方法: package 测试练习; import Java.util.*; public class get_StringNum { /** *2016.10.25 */ public static void main(Strin

Log4j定时打印日志及添加模块名配置的Java代码实例_java

配置间隔时间,定时打印日志 接到个需求,通过log4j定时打印日志,需求描述如下:需要能够定时打印日志,时间间隔可配.说到定时,首先想到了DailyRollingFileAppender类,各种定时,根据datePattern,这个可以参考类SimpleDateFormat类,常见的一些定时设置如下: '.'yyyy-MM: 每月  '.'yyyy-ww: 每周   '.'yyyy-MM-dd: 每天  '.'yyyy-MM-dd-a: 每天两次  '.'yyyy-MM-dd-HH: 每小时 

举例讲解Java设计模式编程中模板方法模式的运用实例_java

模板方法模式定义为: 在一个方法中定义了一个算法的骨架或者步骤,而将一些步骤延迟到子类中去实现.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某一些步骤. 模板方法在基类中定义了一个操作的流程顺序,能够保证该步骤按序进行,有一些步骤的具体实现在基类中已经声明,而将一些变化的步骤的具体实现交给了子类去实现,从而就达到了延迟一些步骤到子类中,模板方法一个最大的好处就是能够设定一个业务流程能够按照一定严格的顺序执行,控制了整个算法的执行步骤. 这个方法将算法定义成一组步骤,其中凡是想让

Java的JDBC中Statement与CallableStatement对象实例_java

JDBC Statement对象实例以下是利用以下三种查询以及打开和关闭说明的例子: boolean execute(String SQL) : 返回一个布尔值true,如果ResultSet对象可以被检索,否则返回false.使用这个方法来执行SQL DDL语句,或当需要使用真正的动态SQL. int executeUpdate(String SQL) : 返回受影响的SQL语句执行的行数.使用此方法来执行,而希望得到一些受影响的行的SQL语句 - 例如,INSERT,UPDATE或DELET

Java中的MessageFormat.format用法实例_java

MessageFormat本身与语言环境无关,而与用户提供给MessageFormat的模式和用于已插入参数的子格式模式有关,以生成适用于不同语言环境的消息. MessageFormat模式(主要部分): 复制代码 代码如下: FormatElement:          { ArgumentIndex }:是从0开始的入参位置索引.          { ArgumentIndex , FormatType }          { ArgumentIndex , FormatType ,

java中使用DES加密解密实例_java

在前面介绍了一些加密解密类的使用,这里综合起来做一个简单的测试,代码如下: MainActivity: 复制代码 代码如下: package com.home.testdes; import android.os.Bundle;import android.util.Log;import android.app.Activity; public class MainActivity extends Activity {  @Override protected void onCreate(Bun

java类中使用Jfreechart的简单实例_java

package com.chart.test; 复制代码 代码如下: import java.awt.BasicStroke;import java.awt.Color;import java.awt.Font;import java.io.File;import java.io.IOException;import java.io.PrintWriter; import javax.servlet.http.HttpSession; import oracle.jrockit.jfr.open

java中url汉字编码互相转换实例_java

Java代码如下: 复制代码 代码如下: package com.gjob.common;public class URLtoUTF8 {    //转换为%E4%BD%A0形式    public static String toUtf8String(String s) {        StringBuffer sb = new StringBuffer();        for (int i = 0; i < s.length(); i++) {            char c =