Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2468659
  • 博文数量: 392
  • 博客积分: 7040
  • 博客等级: 少将
  • 技术积分: 4138
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-17 13:03
个人简介

范德萨发而为

文章分类

全部博文(392)

文章存档

2017年(5)

2016年(19)

2015年(34)

2014年(14)

2013年(47)

2012年(40)

2011年(51)

2010年(137)

2009年(45)

分类: 服务器与存储

2010-03-02 21:32:30

搭建环境:
fedora9(NameNode, JobTracker) + RedHat(DataNode, TaskTracker),即把NameNode和JobTracker安装在一个机器上(因为这是我自己的机器,便于管理,其他机器都是实验室的)

1.安装Java开发环境
yum list | egrep "^java" 一下,把java相关的都装上吧,少了不如多了好。安装完之后写个Java程序测试一下,确保开发环境是否可以使用。

2.修改所有机器的主机名
修改/etc/hosts文件
修改/etc/sysconfig/network文件
fefora9主机名为master,其他两个机器为c156,c157

3.配置SSH无密码登录,参照下面的过程
A为本地主机(即用于控制其他主机的机器) ;
B为远程主机(即被控制的机器Server), 假如ip为172.24.253.2 ;
A和B的系统都是Linux

在A上的命令:
# ssh-keygen -t rsa (连续三次回车,即在本地生成了公钥和私钥,不设置密码)
# ssh root@172.24.253.2 "mkdir .ssh;chmod 0700 .ssh" (需要输入密码)
# scp ~/.ssh/id_rsa.pub root@172.24.253.2:.ssh/id_rsa.pub (需要输入密码)

在B上的命令:
# touch /root/.ssh/authorized_keys2 (如果已经存在这个文件, 跳过这条)
# cat /root/.ssh/id_rsa.pub  >;>; /root/.ssh/authorized_keys2 (将id_rsa.pub的内容追加到 authorized_keys2 中)

回到A机器:
# ssh root@172.24.253.2 (不需要密码, 登录成功)

如果能保护好自己的私钥, 这种方法相对在shell上输入密码, 要安全一些

#########################################################################

深入一点点:

从表面上简单的理解一下登录的过程,
首先 ssh-keygen -t rsa 命令生成了一个密钥和一个公钥, 而且密钥可以设置自己的密码
可以把密钥理解成一把钥匙, 公钥理解成这把钥匙对应的锁头,
把锁头(公钥)放到想要控制的server上, 锁住server, 只有拥有钥匙(密钥)的人, 才能打开锁头, 进入server并控制
而对于拥有这把钥匙的人, 必需得知道钥匙本身的密码,才能使用这把钥匙 (除非这把钥匙没设置密码), 这样就可以防止钥匙被了配了(私钥被人复制)

当然, 这种例子只是方便理解罢了,
拥有root密码的人当然是不会被锁住的, 而且不一定只有一把锁(公钥), 但如果任何一把锁, 被人用其对应的钥匙(私钥)打开了, server就可以被那个人控制了
所以说, 只要你曾经知道server的root密码, 并将有root身份的公钥放到上面, 就可以用这个公钥对应的私钥"打开" server, 再以root的身分登录, 即使现在root密码已经更改!

如果想控制n个机器, 那就需要n对钥匙(密钥和公钥), ssh-keygen 命令可以随意更改钥匙对的名字, 比如:
[root@wwy .ssh]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_rsa_192.168.102.12
......

这样私钥和公钥的名字分别就是:
id_rsa_192.168.102.12 和 id_rsa_192.168.102.12.pub
然后将 id_rsa_192.168.102.12.pub 文件的内容, 追加到sever的 ~/.ssh/authorized_keys2 文件中,

最后, 在本地用ssh命令的 -i 参数指定本地密钥, 并登录:
# ssh -i /root/.ssh/id_rsa_192.168.102.12 192.168.102.12

如果密钥设置了密码, 就用密钥的密码登录, 没设密码, 就直接登录进去了

scp也是一样的
如:
scp -i /root/.ssh/id_rsa  ./xxx 192.168.102.158:/home/wwy/bak


下面这个写得更加详细

集群搭建的SSH设置

master:

[fan@fan001 ~]$ ssh-keygen -t rsa

[fan@fan001 ~]$ ssh fan@fan002 "mkdir .ssh ; chmod 0700 .ssh"     (重复)

[fan@fan001 ~]$ scp ~/.ssh/id_rsa.pub fan@fan002:.ssh/id_rsa.pub     (重复)

[fan@fan001 ~]$ cd .ssh

[fan@fan001 .ssh]$ cp id_rsa.pub authorized_keys

[fan@fan001 .ssh]$ chmod 600 authorized_keys

 

slave:

[fan@fan002 ~]$ touch .ssh/authorized_keys

[fan@fan002 ~]$ cd .ssh

[fan@fan002 .ssh]$ cat id_rsa.pub  >> authorized_keys

[fan@fan001 .ssh]$ chmod 600 authorized_keys

 

OK,完成免密码ssh设置



如果所有机器都可以实现无密码登录,进入下一步

4.配置文件修改,1.20的配置文件有多个,网上找到的教程几乎都是1.20之前的,按照它的步骤,把配置文件的内容分到1.20的各个配置文件中就行

修改conf/hadoop-env.sh,添加jdk支持

export JAVA_HOME=/usr/java/jre1.6.0_02 这是我的fedora和redhat上的java_home目录



//这是core-site.xml文件

   fs.default.name//你的namenode的配置,机器名加端口

   hdfs://192.168.146.161:54310/

//这是mapred-site.xml文件

   mapred.job.tracker//你的JobTracker的配置,机器名加端口

   hdfs://192.168.123.4:54311/

 

      dfs.name.dir//这是hdfs-site.xml文件

      /home/hadoop/hadoopInstall/name //NameNode持久存储名字空间及事务日志的本地文件系统路径。(slave上删除)

  

   //这是hdfs-site.xml文件

     dfs.data.dir //DataNode存放块数据的本地文件系统路径,逗号分割的列表。(master上删除)

     /home/hadoop/hadoopInstall/data

  

//这是hdfs-site.xml文件

   dfs.replication//数据需要备份的数量,默认是三,这项可以删掉,默认3个备份

   1

    hadoop.tmp.dir //Hadoop的默认临时路径,这个最好配置,如果在新增节点或者其他情况下莫名其妙的DataNode启动不了,就删除此文件中的tmp目录即可。不 过如果删除了NameNode机器的此目录,那么就需要重新执行NameNode格式化的命令。

    /home/hadoop/hadoop_tmp/

//这个我删掉了

   mapred.child.java.opts//java虚拟机的一些参数可以参照配置

   -Xmx512m

//这个我也没有修改

  dfs.block.size//block的大小,单位字节,后面会提到用处,必须是512的倍数,因为采用crc作文件完整性校验,默认配置512是checksum的最小单元。

  5120000

  The default block size for new files.


五、启动Hadoop

 

1、伪分布式的启动:

格式化一个新的分布式文件系统:

$ bin/hadoop namenode -format

 

启动Hadoop守护进程:

$ bin/start-all.sh

 

Hadoop守护进程的日志写入到 ${HADOOP_LOG_DIR} 目录 (默认是${HADOOP_HOME}/logs).

2、启动Hadoop

启动Hadoop集群需要启动HDFS集群和Map/Reduce集群。

 

Ø  格式化一个新的分布式文件系统:

$ bin/hadoop namenode -format

 

Ø  在分配的NameNode上,运行下面的命令启动HDFS

$ bin/start-dfs.sh

bin/start-dfs.sh脚本会参照NameNode${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动DataNode守护进程。

 

Ø  在分配的JobTracker上,运行下面的命令启动Map/Reduce

$ bin/start-mapred.sh

bin/start-mapred.sh脚本会参照JobTracker${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动TaskTracker守护进程。

 

停止Hadoop

Ø  在分配的NameNode上,执行下面的命令停止HDFS

$ bin/stop-dfs.sh

bin/stop-dfs.sh脚本会参照NameNode${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止DataNode守护进程。

 

Ø  在分配的JobTracker上,运行下面的命令停止Map/Reduce

$ bin/stop-mapred.sh

bin/stop-mapred.sh脚本会参照JobTracker${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上停止TaskTracker守护进程。



阅读(1736) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~