HADOOP-0.20.203.003.0分布式集群配置
硬件环境 1. 虚拟机VMWare Workstation
2. 两台机器均安装ubuntu11,采用桥接模式,需要两个物理ip地址,下面用192.168.1.100
和192.168.1.101代替,NAT模式无法实现ubuntu内ping通主机
3. java jdk1.6.0_31
4. namenode:192.168.1.100 namenode
datanode:192.168.1.101 datanode
注意: 三台机器dns 和 默认网关必须一致。登陆密码一致最好。而且务必三台机器互相ping通主机,即主机名和ip解析正确。若ping不通,修改/etc/hosts文件,使用sudo vi /etc/hosts命令,设置如下(namenode):
192.168.1.100 namenode
192.168.1.101 datanode
Datanode(datanode)的设置为:
192.168.1.100 namenode
192.168.1.101 datanode
本集群将namenode和 jobtracker 设置成一台机器 即namenode。
在Hadoop中,主机名不要包含下划线“_”,但可以有横线“-”。否则启动hadoop时报错:ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: java.io.IOException: Incomplete HDFS URI, no host: hdfs://namenode:9000 Incomplete HDFS URI
使用hostname命令查看主机名,修改主机名:
主机名存放在/etc/hostname文件中,编辑hostname文件,在文件中输入新的主机名并保存该文件即可。注销重新登录。
本集群在Root用户下安装
配置ssh
安装ssh:sudo apt-get install openssh-server openssh-client,若以安装,继续以下步骤
开启命令:service ssh restart。必须配置SSH使用无密码公钥来进行免密码登陆各个节点。本集群设置如下:
在namenode节点上根目录下执行:
[root@namenode root]$ssh-keygen –t rsa
一路回车,遇到y/n 选择y。即在默认目录下/root/.ssh/生成
id_rsa 和 id_rsa.pub 2个文件,第一个为私钥,第二个为公钥。
[root@namenode root]$cd .ssh
进入.ssh目录下,将id_rsa.pub 复制给authorized_keys文件,并给予权限。
[root@namenode root]$cp id_rsa.pub authorized_keys
[root@namenode root]$chmod 644 authorized_keys
测试 ssh localhost 和ssh namenode,若成功,则可免密码登陆,退出命令exit。注意务必要exit,否则多层嵌套,会晕。
在datanode上根目录下 建立 .ssh文件夹 并给予权限
[root@datanode root]$mkdir .ssh
[root@datanode root]$chmod 755 .ssh [root@datanode root]$cd .ssh
然后将namenode中的公钥远程复制给datanode,需要密码(yes,密码)
[root@namenode .ssh]$scp authorized_keys 并且进入datanode给予权限:
[root@datanode .ssh]$chmod 644 authorized_keys
下面可以通过SSH命令试试是否可以无密码登陆。最好先重新启动下命令:
[root@namenode root]$service sshd restart
[root@namenode root]$ssh datanode
如果可以无密码登陆,即成功!
各datanode免密码登陆namenode
将各个datanode上的id_rsa.pub追加到namenode的authorized_keys
在所有datanode上依次执行如下命令:
scp id_rsa.pub namenode:/root/.ssh/datanodeip地址.id_rsa.pub
ssh namenode
如果可以无密码登陆,即成功!exit退出。
Ssh主机名时,错误:Agent admitted failure to sign using the key. 解決办法: 应用 ssh-add 指令將私钥加进来
ssh-add .ssh/id_rsa
出现ssh localhost死活都无法免密码登陆,检查各级目录文件的权限,注意root目录权限
chmod 755 . (或者更严格)
chmod 755 .ssh
chmod 644 .ssh/authorized_keys
JDK安装
本集群安装jdk1.6.0_31版本,以下的配置所有节点均相同。安装在usr/java下
1. 通过授权、安装命令安装jdk
[root@namenode /usr/java ]$chmod +x jdk-6u31-linux-rpm.bin
[root@namenode /usr/java]$./jdk-6u31-linux-rpm.bin
2. 配置jdk文件,在/etc/profile 中配置 环境变量 如下:
export JAVA_HOME=”/usr/java/jdk1.6.0_31”
export PATH=”$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:”
export CLASSPATH=”$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib”
3 测试。
Java –version
出现jdk版本信息,即安装成功。若不成功 检查配置是否正确 Hadoop安装
本集群安装hadoop-0.20.203.0版本,安装hadoop
[root@namenode root]$ tar –zvxf hadoop-0.20.203.0.tar.gz
1. 配置/root/hadoop-0.20.203.0/conf/hadoop-env.sh
配置JAVA_HOME 和 HADOOP_HOME 两个路径。
export JAVA_HOME=”/usr/java/jdk1.6.0_31”
export HADOOP_HOME=”/root/hadoop-0.20.203.0”
2. 配置如下五个文件:conf文件夹下
①core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://namenode:9000</value>//我们使用端口号9000 </property>
<property>
<name>hadoop.tmp.dir</name>
<value>/root/tmp</value>
</property>
</configuration>
② hdfs-site.xml
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/root/hdfs/name</value>
<final>true</final>
</property>
<property>
<name>dfs.data.dir</name>
<value>/root/hdfs/data</value>
<final>true</final>
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>/root/hdfs/namesecondary</value>
<final>true</final>
</property>
<property>
<name>dfs.replication</name>//若datanode数目小于3,不能配置为3,否则报错 <value>1</value>
</property>
</configuration>
③mapred-site.xml
<name>mapred.job.tracker</name>//jobtracker ip地址,我们使用端口号9001 <value>namenode:9001</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/root/mapred/local</value>
<final>true</final>
</property>
<property>
<name>mapred.system.dir</name>
<value>/tmp/hadoop/mapred/system</value>
<final>true</final>
</property>
<property>
<name>mapred.tasktracker.map.tasks.maximum</name>
#每个datanode上并行的map最大值
<value>2</value>
<final>true</final>
</property>
<property>
<name>mapred.tasktracker.reduce.tasks.maximum</name>
#每个datanode上并行的reduce最大值
<value>2</value>
<final>true</final>
</property>
<property>
<name>mapred.child.java.opts</name>
<value>-Xmx200m</value>
</property>
</configuration>
④ 配置masters
192.168.1.100//namenodeip
⑤ 配置slavers
192.168.1.101//datanodeip
3. 复制hadoop文件夹到其他节点
[root@namenode root]$scp –r hadoop-0.20.203.0 datanode:/root
4. 基本命令
①格式化namenode中的hdfs文件系统
[root@namenode root]$cd hadoop-0.20.203.0
[root@namenode hadoop-0.20.203.0]$bin/hadoop namenode –format ②启动
[root@namenode hadoop-0.20.203.0]$bin/start-all.sh
可在logs中查看日志信息。 若启动过程中需要密码登陆,则ssh安装配置有问题。
若启动datanode报错:Unrecognized option: -jvm
修改bin/hadoop 文件,将-jvm server,改为-server
可以登录namenode:50070 查看namenode状态
可以登录namenode:50030 查看jobtracker状态。
③关闭
[root@namenode hadoop-0.20.203.0]$bin/stop-all.sh
④查看节点
[root@namenode hadoop-0.20.203.0]$bin/hadoop dfsadmin –report
第二篇:hadoop部署总结
采用双namenode节点,多datanode节点配置。
在新版本HDFS的配置中,所有节点的配置文件都是统一的(除ssh部分),不用单独配置NameNode和DataNode。
假设我们有三台服务器,主机名分别为fenbu01、fenbu02、fenbu03
fenbu01为namenode节点,fenbu02为datanode节点,fenbu03待用
1、更改各节点hosts文件
vi /etc/hosts
127.0.0.0 localhost localhost
172.xx.xx.10 fenbu01 fenbu01
172.xx.xx.11 fenbu02 fenbu02
172.xx.xx.12 fenbu03 fenbu03
2、创建dbrg用户
useradd -u 500 -g 500 -p 123456 -d /home/dbrg dbrg
在/home/dbrg/下创建hadoopinstall目录
mkdir /home/dbrg/hadoopinstall
3、解压hadoop包
下载地址 /dyn/closer.cgi/hadoop/common/
ftp hadoop到/home/dbrg/hadoopinstall
gzip -d hadoop-0.23.1.tar.gz
tar -xvf hadoop-0.23.1.tar
ln -s hadoop-0.23.1 hadoop
mkdir /home/dbrg/hadoopinstall/hadoop-config
4、SSH配置
在namenode节点上对dbrg用户创建公钥(datanode节点无需操作此步骤)
su dbrg
$ssh-keygen -t rsa
这个命令将为fenbu01上的用户dbrg生成其密钥对,询问其保存路径时直接回车采用默认路径,
当提示要为生成的密钥输入passphrase的时候,直接回车,也就是将其设定为空密码。 $cp id_rsa.pub authorized_keys
$chmod 644 authorized_keys
$scp authorized_keys fenbu02:/home/dbrg/.ssh/
目录结构应该是这样的
[dbrg@fenbu01 .ssh]$ ls -la
drwx------ 2 dbrg dbrg 4096 04-01 15:30 .
drwx------ 5 dbrg dbrg 4096 04-01 15:37 ..
-rw-r--r-- 1 dbrg dbrg 394 04-01 15:32 authorized_keys
-rw------- 1 dbrg dbrg 1675 04-01 15:24 id_rsa
-rw-r--r-- 1 dbrg dbrg 394 04-01 15:24 id_rsa.pub
-rw-r--r-- 1 dbrg dbrg 1192 04-01 15:34 known_hosts
root权限下修改文件/etc/ssh/sshd_config
#去除密码认证
PubkeyAuthentication yes
PasswordAuthentication no
AuthorizedKeyFile .ssh/authorized_keys
service sshd restart
这时候namenode ssh无法直接登陆了,换用xmanager
然后到datanode节点操作
scp到datanode节点的文件记得赋予权限
保证authorized_keys只对其所有者有读写权限,其他人不允许有写的权限,否则SSH是不会工作的。
$chmod 644 authorized_keys
5、配置集群环境
在vi /home/dbrg/.bashrc文件内添加
#hadoop 0.23 required settings
export HADOOP_DEV_HOME=/home/dbrg/hadoopinstall/hadoop #设置你hadoop的路径,需要修改一下
export HADOOP_MAPRED_HOME=${HADOOP_DEV_HOME}
export HADOOP_COMMON_HOME=${HADOOP_DEV_HOME}
export HADOOP_HDFS_HOME=${HADOOP_DEV_HOME}
export YARN_HOME=${HADOOP_DEV_HOME}
export HADOOP_CONF_DIR=/opt/dbrg/hdfs/conf #conf目录也可以按照Hadoop-0.20.*版本的特点设置在${HADOOP_DEV_HOME}/conf文件夹下。
export HDFS_CONF_DIR==/opt/dbrg/hdfs/conf #可单独设置路径
export YARN_CONF_DIR=${HADOOP_DEV_HOME}/conf #可单独设置路径
cd /opt
mkdir dbrg
cd dbrg
mkdir hdfs
cd hdfs
mkdir conf
然后进入hadoop
cd /home/dbrg/hadoopinstall/hadoop
mkdir conf
cp share/hadoop/common/templates/conf/* /home/dbrg/hadoopinstall/hadoop/conf/
cp share/hadoop/common/templates/conf/* /opt/dbrg/hdfs/conf
6、JAVA环境配置
先查看下java的版本情况,要求jdk1.6以上。
#rpm -qa|grep java
如果有安装就会出现安装的jdk的相关信息,太低的java(系统自带)要删除
yum remove java
下载jdk1.6.bin,安装下 /javase/downloads/
vi /etc/profile -------打开profile文件
vi /home/dbrg/.bash_profile
假设jdk的安装目录为:/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre
然后在文件的末尾加上以下三句话
export JAVA_HOME=/usr/java/jdk1.6.0_31/
export
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin
7、配置hadoop内部环境
1)修改dbrg用户的/home/dbrg/hadoopinstall/hadoop/conf/hadoop-env.sh中的JAVA_HOME路径
export JAVA_HOME=/usr/java/jdk1.6.0_31/
export
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin
2)修改/home/dbrg/hadoopinstall/hadoop/conf/core-site.xml
<?xml version="1.0"?>
<configuration>
<property>
<name>fs.trash.interval</name>
<value>360</value>
<description>Number of minutes between trash checkpoints.
</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/dbrg/hadoop</value>
<description>A base for other temporary directories.</description>
</property>
请注意在多个NameNode情况下,core-site.xml不需要设置fs.defaultFS,只需在下面hdfs-site.xml设置对应内容即可。
3)/home/dbrg/hadoopinstall/hadoop/conf/hdfs-site.xml
重新建立/home/dbrg/hadoopinstall/hadoop/conf/hdfs-site.xml
<?xml version="1.0"?>
<configuration>
<property>
<name> dfs.namenode.name.dir</name>
<value>/opt/dbrg/hdfs/name</value>
</property>
<property>
<name>dfs.namenode.edits.dir</name>
<value>/opt/dbrg/hdfs/edits</value>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>/opt/dbrg/hdfs/checkpoint</value>
</property>
<property>
<name>dfs.namenode.checkpoint.edits.dir</name>
<value>/opt/dbrg/hdfs/checkpoint_edits</value>
</property>
<property>
<name> dfs.datanode.data.dir</name>
<value>/opt/dbrg/hdfs/data</value> </property>
<property>
<name>dfs.federation.nameservices</name> <value>ns1,ns2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns1</name> <value>fenbu01:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.ns1</name> <value>fenbu01:50070</value>
</property>
mkdir /opt/dbrg/hdfs/name
mkdir /opt/dbrg/hdfs/edits
mkdir /opt/dbrg/hdfs/checkpoint
mkdir /opt/dbrg/hdfs/checkpoint_edits mkdir /opt/dbrg/hadoop
然后全部chmod 777
4)说明datanode节点
vi /home/dbrg/hadoopinstall/hadoop/conf/slaves fenbu02
同步conf
cp /home/dbrg/hadoopinstall/hadoop/conf/* /opt/dbrg/hdfs/conf/
mkdir /dbrg
chmod 777 /dbrg
有一点注意事项:
把slaves跟这个hadoop-env都移动到/etc/hadoop里面去
8、启动HDFS Federation
1)执行Format
/home/dbrg/hadoopinstall/hadoop/bin/hdfs namenode -format -clusterid hadoop
重新格式化namenode,注意:格式化之前必须删除namenode及datanode上的name、data、tmp文件,防止格式化造成的namespaceID不一致,不过格式化后hdfs上的数据会丢失。
2)启动sbin/start-dfs.sh
/home/dbrg/hadoopinstall/hadoop/sbin/start-dfs.sh
ssh到各个节点上,使用jps命令查看对应的NameNode或者DataNode Daemon是否启动。
9、查看UI界面
浏览器中键入:
http://fenbu01:50070