火龙果软件HDFS安装和管理.docx
《火龙果软件HDFS安装和管理.docx》由会员分享,可在线阅读,更多相关《火龙果软件HDFS安装和管理.docx(33页珍藏版)》请在冰点文库上搜索。
火龙果软件HDFS安装和管理
HadoopHDFS安装和管理
1.HDFS安装
1.1.环境准备
由于相对hdfs的客户端存在相对路径问题,参见《HadoopHDFS开发参考》,我们修改了hadoop-0.18.1的源码并进行了重新编译,代码为forlink-hadoop.tar.gz。
HDFS中,节点分为Namenode和Datanode,其中Namenode只有一个(可以通过《HadoopHDFS系统双机热备方案》配置两台,但同时只能有一台提供服务),Datanode可以有多台。
主机
IP地址
配置
ost2(Namenode的主节点)
eth0:
192.168.188.202
eth1:
10.0.0.202(HA心跳使用地址)
eth0:
0:
192.168.188.201(虚拟IP)
容量:
80G
接口标准:
IDE
转速:
7200rpm
缓存容量:
2M
平均寻道时间:
9ms
传输标准:
ATA133
ost3(Namenode的从节点)
eth0:
192.168.188.203
eth1:
10.0.0.203(HA心跳使用地址)
eth0:
0:
192.168.188.201(虚拟IP)
容量:
80G
接口标准:
IDE
转速:
7200rpm
缓存容量:
2M
平均寻道时间:
9ms
传输标准:
ATA133
ost4(Datanode)
eth0:
192.168.188.204
容量:
80G
接口标准:
IDE
转速:
7200rpm
缓存容量:
2M
平均寻道时间:
9ms
传输标准:
ATA133
1、修改主机名
在所有节点都要执行此操作,在202上:
vi/etc/sysconfig/network
NETWORKING=yes
HOSTNAME=ost2
在203上为
HOSTNAME=ost3
在204上为
HOSTNAME=ost4
2、创建hdfs用户
Hadoop要求所有机器上hadoop的部署目录结构要相同,并且都有一个相同的用户名的帐户。
在所有节点上创建hdfs用户:
用户名hdfs,口令hdfs,主目录是/home/hdfs。
3、添加节点到/etc/hosts(在所有节点上执行此操作,其中192.168.188.201是虚拟IP)
127.0.0.1localhost.localdomainlocalhost
192.168.188.201ostvip
192.168.188.203ost3
192.168.188.202ost2
192.168.188.204ost4
10.0.0.202ost2
10.0.0.203ost3
可以在ost2修改,然后拷贝到其他节点(需root权限)
scp/etc/hostsost3:
/etc/hosts
scp/etc/hostsost4:
/etc/hosts
1.2.HDFS部署(ost2上)
1、以hdfs用户登录,在主目录下创建子目录hdfsinstall
2、在hdfsinstall目录下解压缩文件,将解压到hadoop-0.18.1目录
tarxvzfforlink-hadoop.tar.gz
3、创建链接
ln-shadoop-0.18.1hadoop
4、创建配置目录
mkdir/home/hdfs/hdfsinstall/hadoop-config
5、将/home/hdfs/hdfsinstall/hadoop/conf/目录中的文件拷贝到hadoop-config目录中
6、指定环境变量$HADOOP_CONF_DIR
在/home/hdfs/.bash_profile中添加
HADOOP_CONF_DIR=/home/hdfs/hdfsinstall/hadoop-config/
exportHADOOP_CONF_DIR
7、下载jdk-1_5_x-rc-linux-i586.bin。
8、运行
./jdk-1_5_x-rc-linux-i586.bin
安装完毕,JDK安装在/home/hdfs/hdfsinstall/jdk1.5.0_16目录下
9、创建链接:
ln–sjdk1.5.0_16jdk
10、设置环境变量(写入hdfs用户的.bash_profile中)
JAVA_HOME=/home/hdfs/hdfsinstall/jdk
exportJAVA_HOME
PATH=$JAVA_HOME/bin:
$JAVA_HOME/jre/bin:
$PATH
exportPATH
CLASSPATH=$JAVA_HOME/lib:
$JAVA_HOME/jre/lib
exportCLASSPATH
11、创建子目录filesystem
cd/home/hdfs/hdfsinstall
mkdirfilesystem
1.3.Hadoop配置
cd$HADOOP_CONF_DIR,进入/home/hdfs/hdfsinstall/hadoop-config目录
1、masters文件(这里指定虚拟ip作为名字节点,指定SecondaryNamenode)
192.168.188.201
2、slaves文件(指定数据节点)
192.168.188.204
3、修改hadoop-env.sh
exportJAVA_HOME=/home/hdfs/hdfsinstall/jdk
4、hadoop-site.xml
在hadoop-site.xml里面定义我们需要的项,其值会覆盖hadoop-default.xml中的默认值:
xmlversion="1.0"?
>
xml-stylesheettype="text/xsl"href="configuration.xsl"?
>
--Putsite-specificpropertyoverridesinthisfile.-->
fs.default.name
hdfs:
//192.168.188.201:
9000
namenode的配置,机器名加端口
--map/reduceproperties-->
mapred.job.tracker
hdfs:
//192.168.188.201:
9001
JobTracker的配置,机器名加端口
hadoop.tmp.dir
/mnt/drbd/hdfs/tmp
Hadoop的默认临时路径,这里设置在双机的共享位置
dfs.name.dir
/mnt/drbd/hdfs/name
存储名字节点信息的位置,这里设置在双机的共享位置
dfs.data.dir
/home/hdfs/hdfsinstall/filesystem/data
存储文件系统数据的位置,在每个数据节点上。
dfs.replication
2
数据需要备份的数量,默认是3
dfs.permissions.supergroup
hdfs
liang
super-users,可以添加多个用户
2、修改hadoop-env.sh
exportJAVA_HOME=/home/hdfs/hdfsinstall/jdk
1.4.创建目录(ost2)
1root执行
chmod777/mnt/drbd
2创建hdfs目录(hdfs用户)
mkdir/mnt/drbd/hdfs
3创建临时目录(hdfs用户)
mkdir/mnt/drbd/hdfs/tmp
4创建名字节点元数据目录
mkdir/mnt/drbd/hdfs/name(hdfs用户)
5创建数据节点目录(所有节点上)(hdfs用户)
mkdir/home/hdfs/hdfsinstall/filesystem/data
1.5.数据节点存活性和副本配置
每个数据节点周期性地向名字节点发送心跳信号。
网络割裂可能导致一部分数据节点跟名字节点失去联系。
名字节点通过心跳信号的缺失来检测这一情况,并将这些近期不再发送心跳信号数据节点标记为宕机,不会再将新的IO请求发给它们。
任何存储在宕机数据节点上的数据将不再有效。
数据节点的宕机可能会引起一些数据块的副本系数低于指定值,名字节点不断地检测这些需要复制的数据块,一旦发现就启动复制操作。
在下列情况下,可能需要重新复制:
某个数据节点节点失效,某个副本遭到损坏,数据节点上的硬盘错误,或者文件的副本系数增大。
副本数默认配置为3,即每个文件在三个节点上保存副本,文件的副本数配置在hadoop-site.xml中:
dfs.replication
2
数据需要备份的数量,默认是3
如果把副本数配置为1,当数据节点发生故障后,该数据节点上保存的数据将丢失。
如果副本数配置为2,某个数据节点发生故障并不会影响数据可用性,但如果希望继续保存两个拷贝,需要执行bin/start-balancer.sh来实现平衡,可以把这个脚本定时自动执行。
1.6.拷贝配置到数据节点
将hadoop的整体环境从namenode拷贝到数据节点上去,这里是ost4
scp-r/home/hdfs/hdfsinstall/ost4:
/home/hdfs/
1.7.日志配置
1名字节点日志
Hadoop中,名字节点会产生hadoop-hdfs-namenode-ost2.log和hadoop-hdfs-secondarynamenode-ost2.log日志,其中ost2为节点名,hdfs为超级用户名。
名字节点的日志由运行在ost2上的进程写入。
由于名字节点采用了ha方式部署,因此需要把名字节点的日志保存在共享位置。
即对于ost2,修改hadoop-env.sh,把日志保存在drbd盘上:
exportHADOOP_LOG_DIR=/mnt/drbd/hdfs/logs
备注:
由于ost2和ost3采用了heartbeat实现HA部署,要求两台机器有不同的主机名,而hdfs根据主机名创建日志,因此在设备切换时,会产生不同的日志,如hadoop-hdfs-namenode-ost2.log和hadoop-hdfs-namenode-ost3.log,但不影响系统正常运行。
2数据节点日志
数据节点会产生hadoop-hdfs-datanode-ost4.log,其中ost4为节点名,hdfs为超级用户名。
数据节点的日志由运行在不同数据节点上的进程各自写入,即每个数据节点写自己的日志。
对于数据节点ost4:
cd/home/hdfs/hdfsinstall
mkdirhadoop_datanode_logs
修改hadoop-env.sh原有配置,默认日志位置在/home/hdfs/hdfsinstall/hadoop/logs。
修改为:
exportHADOOP_LOG_DIR=/home/hdfs/hdfsinstall/hadoop_datanode_logs
1.8.SSH设置
在Hadoop启动以后,Namenode是通过SSH(SecureShell)来启动和停止各个节点上的各种守护进程的,这就需要在节点之间执行指令的时候是不需要输入密码的方式,故我们需要配置SSH使用无密码公钥认证的方式。
首先要保证每台机器上都装了SSH服务器,且都正常启动。
实际中用的都是OpenSSH。
ost2是主节点,它需要主动发起SSH连接到ost4,对于SSH服务来说,ost2就是SSH客户端,而ost4则是SSH服务端,因此在ost4上需要确定sshd服务已经启动。
简单的说,在ost2上需要生成一个密钥对,即一个私钥,一个公钥。
将公钥拷贝到ost4上,这样,比如当ost2向ost4发起ssh连接的时候,ost4上就会生成一个随机数并用ost2的公钥对这个随机数进行加密,并发送给ost2;ost2收到这个加密的数以后用私钥进行解密,并将解密后的数发送回ost3,ost4确认解密的数无误后就允许ost2进行连接了。
这就完成了一次公钥认证过程。
1创建密钥
1)首先在ost2上生成密钥对:
[ost2]$ssh-keygen-trsa
2)询问其保存路径时直接回车采用默认路径。
3)提示要为生成的密钥输入passphrase的时候,直接回车,也就是将其设定为空密码。
4)生成的密钥对id_rsa,id_rsa.pub,默认存储在/home/hdfs/.ssh目录下。
2分发公钥
将id_rsa.pub的内容复制到每个机器(也包括本机)的/home/dbrg/.ssh/authorized_keys文件中。
如果机器上已经有authorized_keys这个文件,就在文件末尾加上id_rsa.pub中的内容,如果没有authorized_keys这个文件,直接cp或者scp。
对于ost2:
cpid_rsa.pubauthorized_keys
对于ost4:
mkdir.ssh
chmod755.ssh
在ost2上执行scpauthorized_keysost4:
/home/hdfs/.ssh/
对于ost3:
mkdir.ssh
chmod755.ssh
在ost2上执行scpauthorized_keysost3:
/home/hdfs/.ssh/
此处的scp就是通过ssh进行远程copy,此处需要输入远程主机的密码,即ost3机器上hdfs帐户的密码,当然,也可以用其他方法将authorized_keys文件拷贝到其他机器上
在ost4上执行:
chmod644authorized_keys
3测试(只能ost2向ost4发起连接,ost4向ost2发起需要另外配置)
由ost2向ost4发起ssh连接。
sshost4
如果ssh配置好了,就会出现以下提示信息
Theauthenticityofhost[ost3]can'tbeestablished.
Keyfingerprintis10245f:
a0:
0b:
65:
d3:
82:
df:
ab:
44:
62:
6d:
98:
9c:
fe:
e9:
52.
Areyousureyouwanttocontinueconnecting(yes/no)?
OpenSSH告诉你它不知道这台主机,因为是第一次登录这台主机。
键入“yes”。
这将把这台主机的“识别标记”加到“~/.ssh/know_hosts”文件中。
第二次访问这台主机的时候就不会再显示这条提示信息了。
4SSH无密码访问
Openssh版本应该一致,例如openssh1.3.6p1和OpenSSH_3.9p1是无法实现无密码访问的。
支持无密码访问还需要修改配置文件/etc/ssh/sshd_config,这里是在ost4
RSAAuthenticationyes
PubkeyAuthenticationyes
AuthorizedKeysFile.ssh/authorized_keys
然后在ost4重启sshd
/etc/rc.d/init.d/sshdrestart
1.9.HDFS操作
1格式化Hadoop
启动之前,我们先要格式化namenode,先进入/home/hdfs/hdfsinstall/hadoop目录,执行下面的命令
bin/hadoopnamenode-format
如果不成功,就去HADOOP_LOG_DIR目录下去查看日志文件。
2启动hadoop
在bin/下面有很多启动脚本,可以根据自己的需要来启动。
*start-all.sh启动所有的Hadoop守护。
包括namenode,datanode,jobtracker,tasktrack
*stop-all.sh停止所有的Hadoop
*start-mapred.sh启动Map/Reduce守护。
包括Jobtracker和Tasktrack
*stop-mapred.sh停止Map/Reduce守护
*start-dfs.sh启动HadoopDFS守护.Namenode和Datanode
*stop-dfs.sh停止DFS守护
在这里,简单启动DFS:
bin/start-dfs.sh
3停止hadoop
bin/stop-dfs.sh
或者
bin/stop-all.sh
4建立/删除目录
bin/hadoopdfs-mkdirtestdir
bin/hadoopdfs-rmrtestdir
在HDFS中建立一个名为testdir的目录
5复制文件
bin/hadoopdfs-put/home/hdfs/hdfsinstall/hadoop/hadoop-0.18.1-tools.jartestdir/hadoop-0.18.1-tools.jar
把本地文件large.zip拷贝到HDFS的根目录下,文件名为testfile.zip
6查看现有文件
bin/hadoopdfs-ls
bin/hadoopdfs-lstestdir
7查看当前文件系统状态
bin/hadoopdfsadmin-report
2.数据节点管理
HDFS包含两种角色:
数据节点(datanode)和名字节点(namenode),名字节点只有一个(目前采用HA方式部署),数据节点最多支持2000个。
2.1.添加数据节点
这里新添加的数据节点是ost5:
192.168.188.205。
添加步骤:
1)修改名字节点上slaves文件,添加新节点。
2)将hadoop的整体环境从名字节点拷贝到数据节点上去。
3)重新启动名字节点。
4)新创建的文件会自动把块分配到新的节点。
5)旧文件需要手工来平衡,执行脚本bin/start-balancer.sh拷贝块实现平衡。
2.1.1.环境准备
1、修改主机名(在205上)
vi/etc/sysconfig/network
NETWORKING=yes
HOSTNAME=ost5
2、创建hdfs用户(在205上)
Hadoop要求所有机器上hadoop的部署目录结构要相同,并且都有一个相同的用户名的帐户。
在所有节点上创建hdfs用户:
用户名hdfs,口令hdfs,主目录是/home/hdfs。
3、添加节点到/etc/hosts(在ost2上修改,拷贝到ost5)
127.0.0.1localhost.localdomainlocalhost
192.168.188.201ostvip
192.168.188.203ost3
192.168.188.202ost2
192.168.188.204ost4
10.0.0.202ost2
10.0.0.203ost3
192.168.188.205ost5
scp/etc/hostsost5:
/etc/hosts
2.1.2.Hadoop配置
1、slaves文件(增加数据节点,在ost2上)
cd$HADOOP_CONF_DIR,进入/home/hdfs/hdfsinstall/hadoop-config目录,修改slaves文件
192.168.188.204
192.168.188.205
2、SSH配置
1)在ost5上执行:
mkdir/home/hdfs/.ssh
chmod755.ssh
2)在ost5上配置无密码SSH访问,修改/etc/ssh/sshd_config
RSAAuthenticationyes
PubkeyAuthenticationyes
AuthorizedKeysFile.ssh/authorized_keys
3)在ost5重启sshd
/etc/rc.d/init.d/sshdrestart
4)在ost2上执行scpauthorized_keysost5:
/home/hdfs/.ssh/
5)在ost5上执行:
chmod644authorized_keys
6)由ost2向ost5发起ssh连接(hdfs用户)。
sshost5
如果ssh配置好了,就会出现以下提示信息
Theauthenticityofhost[ost3]can'tbeestablished.
Keyfingerprintis10245f:
a0:
0b:
65:
d3:
82:
df:
ab:
44:
62:
6d:
98:
9c:
fe:
e9:
52.
Areyousureyouwanttocontinueconnecting(yes/no)?
键入“yes”。
这将把这台主机的“识别标记”加到“~/.ssh/know_hosts”文件中。
第二次访问这台主机的时候就不会再显示这条提示信息了。
3、将hadoop的整体环境从ost2拷贝到ost5上去(hdfs用户)
scp-r/home/hdfs/hdfsinstall/ost5:
/home/hdfs/
4、日志配置(在ost5上)
cd/home/hdfs/hdfsinstall
mkdirhadoop_datanode_logs
修改hadoop-env.sh原有配置,默认日志位置在${HADOOP_HOME}/logs。
修改为:
exportHADOOP_LOG_DIR=/home/hdfs/hdfsinstall/hadoop_datanode_logs
5、配置环境变量(在ost5上)
修改/home/