分享

搭建HDFS集群方法

starrycheng 发表于 2013-10-25 10:43:59 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 7 9599
下面是我搭建集群时写的步骤,参考了网上的一些信息,修改了一些地方,按照我写的方法现在我搭建的集群是1台Namenode和3台Datanode,方法里只是举例了1台Namenode和1台Datanode,要添加Datanode可以按照同样的步骤做。我用的版本是0.18.3,有点老了,0.19.x的步骤可能是一样的,0.20.x配置文件变了,可能改的地方稍多,大家看下,欢迎提。




前期:
(1)安装sun的
JDK
sudo apt-get install sun-java6-jdk,如果你不确定是不是已经安装过了JDK,可以用命令:java -version来看看。
如果说,java version不是sun的,或者是说java不是内部命令,那么就需要安装了。
(2)配置JDK环境变量
JDK
一般默认安装到/usr/lib/jvm/java-6-sun下面,包括可执行程序以及类库都在这下面,可以用cd /usr/lib/jvm/java-6-sun命令查看一下。
配置路径,一个是/etc/environment文件,一个是~/.bashrc文件,分别是这样的:
/etc/environment
文件:
CLASSPATH=/usr/lib/jvm/java-6-sun/lib
JAVA_HOME=/usr/lib/jvm/java-6-sun
~/.bashrc
的最末行加上
export JAVA_HOME=/usr/lib/jvm/java-6-sun
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=.:$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
(3)安装SSH Server用以下命令来安装:
sudo apt-get install ssh
sudo apt-get install rsync
如果出现版本不一样的,先将已经装载的server或client卸载,然后重装。
(4)免密码ssh配置
生成密钥,命令如下:
sudo ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
sudo cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
配置完成后,执行ssh localhsot,确认每台机器都可以使用
ssh
(5)在所有机器修改 /etc/hosts文件
192.168.XXX.XXX
namenode
//192.168.66.101
xuwq-1
192.168.XXX.XXX
datanode
//192.168.66.107
cis
注:这一步最少的操作是保证Namenode上/etc/hosts中有所有Datanode的信息,而Datanode的/etc/hosts中只需要自己的信息和Namenode的信息就可以了。
(6)将namenode服务器上的authorized_keys的内容加到datanode台机器的authorized_keys文件中。让namenode可以不需要密码访问datanode服务器
sudo scp authorized_keys XXX:/home/XXX/.ssh/
// cis:/home/xuwq/.ssh/
或者直接用移动介质拷贝
ssh XXX
// ssh cis
确认namenode可以免密码访问每台
datanode
安装配置HDFS系统:
(1)配置Hadoop环境变量
在/etc/environment文件尾添加:
HADOOP_HOME=/home/xuwq/hadoop-0.18.3
HADOOP_CONF_DIR=$HADOOP_HOME/conf
HADOOP_LOG_DIR=/home/xuwq/hadoop-0.18.3/log
在~/.bashrc文件尾添加
:
HADOOP_HOME=/home/xuwq/hadoop-0.18.3 #hadoop的主目录
export HADOOP_HOME
HADOOP_CONF_DIR=$HADOOP_HOME/conf
#hadoop的配置文件目录
export HADOOP_CONF_DIR
HADOOP_LOG_DIR=/home/xuwq/hadoop-0.18.3/log
#
存放运行日志目录
export HADOOP_LOG_DIR
export PATH=$PATH:$HADOOP_HOME/bin
//这一句可以由下面一句替代,将JDK和Hadoop的路径写在一起
export PATH=.:$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME/bin
修改完毕后需要重启。
(2)修改hadoop的conf/masters和conf/slaves文件
conf/masters
内容为namenode名,
xuwq-1
conf/slaves
内容为datanode名,cis
(3)修改conf/hadoop-env.sh文件
添加jdk路径
export JAVA_HOME=/usr/lib/jvm/java-6-sun
(4)修改conf/hadoop-site.xml
fs.default.name
//namenode的配置,机器名加端口
hdfs://XXX:54310/
//hdfs://xuwq-1:54310
mapred.job.tracker
//JobTracker的配置,机器名加端口
hdfs://XXX:54311
//hdfs://xuwq-1:54310
dfs.replication
//数据备份的数量,默认是3
1
//这里是1台namenode,1台datanode,所以value=1,建议value值小于等于datanode的数量

(5)将hadoop的整体环境拷贝到datanode上面去
// datanode = cis
scp -r /home/XXX/hadoop-0.18.3 XXX:/home/XXX/hadoop-0.18.3
//scp -r /home/xuwq-1/hadoop-0.18.3 cis://home/xuwq/hadoop-0.18.3
(6)启动集群
先要格式化namenode, 执行
hadoop namenode -format
然后启动hdfs文件系统,执行start-all.sh,启动后可以用jps查看进程
conf/masters
文件里的机器运行的进程有
NameNode, SecondaryNameNode, JobTracker
conf/slaves文件里的机器运行的进程有DataNode, TaskTracker
(7)停止集群
stop-all.sh
例子
:
例1:
#
先将待测的文件放到本地文件系统的/home/test-in目录
$ mkdir test-in
$ cd test-in
$ echo "hello world bye world cdh" >file1.txt
$ echo "hello hadoop goodbye hadoop" >file2.txt
#
将本地文件系统上的 /home/test-in 目录拷到 HDFS 的根目录上,目录名改为
input
$ hadoop fs –put test-in input
#查看执行结果:
$ hadoop jar hadoop-0.19.1/hadoop-0.19.1-examples.jar wordcount input output
# 将文件从 HDFS 拷到本地文件系统中再查看:
$ hadoop fs -get output output
$ cat output/*
#
也可以直接查看
$ hadoop fs -cat output/*
例2:(文档中例)
将输入文件拷贝到分布式文件系统:
$ hadoop fs -put hadoop-0.18.3/conf input
运行发行版提供的示例程序:
$ hadoop jar hadoop-0.18.3/hadoop-*-examples.jar grep input output 'dfs[a-z.]+'
查看输出文件:
将输出文件从分布式文件系统拷贝到本地文件系统查看:
$ hadoop fs -get output output
$ cat output/*
或者
在分布式文件系统上查看输出文件:
$ hadoop fs -cat output/*
注意:
(1)所有机器的机器名必须不同,但是要保证每台机器上均有一位相同的用户
(2)可能会遇到HADOOP-1212的
bug
org.apache.hadoop.dfs.DataNode: java.io.IOException: Incompatible namespaceIDs in the logs of a datanode..............
原因如下:
hadoop
格式化时重新创建namenodeID而在datanode的tmp/dfs/data中包含上次format留下的ID,格式化清空namenode的数据但是保留了datanode的数据
解决方案是这样的:
(1) stop-all.sh
停止所有进程;
(2
)删除filesystem/data这个文件夹;
// 默认为tmp/dfs/data
(3)hadoop namenode –format重新格式化namenode;
(4)
重新启动

本帖被以下淘专辑推荐:

已有(7)人评论

跳转到指定楼层
mexiang 发表于 2013-10-25 10:43:59
回复 1# appletreer
    笑脸的地方估计是编码的,我是直接粘过来的,结合上下文意会下吧。 ^_^
回复

使用道具 举报

easthome001 发表于 2013-10-25 10:43:59
多谢楼主分享啊。
有个想请教一下,我也建立了一个4个机器的分布式环境,一个master,三个slave。我在自己的master主机上建立了一个普通用户(用户名:hadoop)。并完成了免密码ssh配置。此时,我在master主机上用hadoop用户,可以免密码ssh访问其它的slave主机,但是不能实现ssh localhost免密码访问自己。当我在master主机上换成root用户时,就可以ssh localhost免密码访问自己了。
楼主遇到过这样的情况吗吗?
回复

使用道具 举报

yunjisuanxue 发表于 2013-10-25 10:43:59
学习一下,过两天也试着搭一下
回复

使用道具 举报

poptang4 发表于 2013-10-25 10:43:59
谢谢楼主分享 不知道虚拟机可以不啊
回复

使用道具 举报

xiaolongwu1987 发表于 2013-10-25 10:43:59
"

有三种情况:
1. ssh localhost
error: connection refused at port 22
solution:
use root user to edit /etc/ssh/sshd_conf add:
ListenAddress 0.0.0.0:22
and
/etc/init.d/sshd restart
2. ssh localhost
error: Permission denied (publickey,gssapi-with-mic)
solution:
disable gssapi in /etc/ssh/sshd_conf:
GSSAPIAuthentication no
and
/etc/init.d/sshd restart
3. ssh localhost
error: Permission denied (publickey)
when view /var/log/secure
Authentication refused: bad ownership or modes for file /home/adwiser/.ssh/authorized_keys
solution:
Check there permissions on the ~/.ssh directory should be 700,
and the authorized_keys file should be 600
so execute shell:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
回复

使用道具 举报

AlexFeng 发表于 2015-6-2 18:01:26
先学习一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条