系统环境:
CentOS release 6.3 (Final)
软件版本:
hadoop1.2.1
zk-3.4.4
hbase-0.94.12
主机规划:
集群中包括3个节点:hadoop01为Master,其余为Salve,节点之间局域网连接,可以相互ping通
IP地址 节点名 192.168.1.138 hadoop01 192.168.1.139 hadoop02 192.168.1.140 hadoop03
三个节点上均是CentOS6.3 x86_64系统,并且有一个相同的用户hadoop。hadoop01做为master配置NameNode和JobTracker的角色,负责总管分布式数据和分解任务的执行;另外两台配置DataNode和TaskTracker的角色,负责分布式数据存储以及任务的执行。安装目录统一为/usr/local下
二,准备工作,三台机器都需要做 ,将三台机器selinux,iptables停用。
1,安装jdk (jdk版本:jdk-7u25-linux-x64.rpm)
# ln -s jdk1.7.0_25 jdk 做软连接
# vim /etc/profile 配置java环境变量
1
2
3
4
5
6
7
8
9
export JAVA_HOME=/usr/java/jdk
export JAVA_BIN=/usr/java/jdk/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPAT
# source /etc/profile 让其java命令立即生效
2、做三台机器之间做双机互信,原因master通过远程启动datanode进程和tasktracker进程,如果不做双机互信,会导致每次启动集群服务都会需要密码
# vim /etc/hosts
1
2
3
4
5
192.168.1.138 hadoop01
192.168.1.139 hadoop02
192.168.1.140 hadoop03
将hosts文件分别复制到另外两台。
3、切换到hadoop用户,对其用做双机互信,先在三台机器先执行ssh-keygen生成公钥与私钥
[iyunv@hadoop01 ~]# ssh-copy-id -i hadoop02
[iyunv@hadoop01 ~]# ssh-copy-id -i hadoop03
[iyunv@hadoop02 ~]# ssh-copy-id -i hadoop01
[iyunv@hadoop02 ~]# ssh-copy-id -i hadoop03
[iyunv@hadoop03 ~]# ssh-copy-id -i hadoop01
[iyunv@hadoop03 ~]# ssh-copy-id -i hadoop02
ssh-copy-id: command not found 解决办法:
yum install openssh-clients -y
4、同步时间,三台机器启用ntpd服务,另外两台执行相同的操作
[iyunv@hadoop01 ~]# crontab -e
*/5 * * * * /usr/sbin/ntpdate ntp.api.bz &> /dev/null
三,配置master,也就hadoop01
[iyunv@hadoop01 ~]# tar xf hadoop-1.2.1.tar.gz -C /usr/local/
修改hadoop-env.sh
1
2
3
# export JAVA_HOME=/usr/lib/j2sdk1.5-sun
export JAVA_HOME=/usr/java/jdk
修改core-site.xml
1
2
3
4
5
6
7
8
9
10
hadoop.tmp.dir
/data/hadoop/tmp
fs.default.name
hdfs://hadoop01:9000
hadoop.tmp.dir属性用于定义Hadoop的临时目录,其默认为/tmp/hadoop-${username}。HDFS进程的许多目录默认都在此目录中,/hadoop/tmp目录,需要注意的是,要保证运行Hadoop进程的用户对其具有全部访问权限。
fs.default.name属性用于定义HDFS的名称节点和其默认的文件系统,其值是一个URI,即NameNode的RPC服务器监听的地址(可以是主机名)和端口(默认为8020)。其默认值为[url=]file:///[/url],即本地文件系统。
修改hdfs-site.xml文件
# vim conf/hdfs-site.xml
1
2
3
4
5
6
7
8
9
10
dfs.data.dir
/data/hadoop/data
dfs.replication
2
dfs.name.dir属性定义的HDFS元数据持久存储路径,默认为${hadoop.tmp.dir}/dfs/name
dfs.replication属性定义保存副本的数量,默认是保存3份,由于这里只有两台slave。所以设置2。
修改mapred-site.xml文件
# vim conf/mapred-site.xml
1
2
3
4
5
6
mapred.job.tracker
http://hadoop01:9001
编辑masters文件
masters用于指定,辅助名称节点(SecondaryNameNode)的主机名或主机地址
[hadoop@hadoop01 hadoop-1.2.1]$ vim conf/masters
hadoop01
编辑slaves文件,这个文件只需在master主机上编辑就行
用于指定各从服务器(TaskTracker或DataNode)的主机名或主机地址
hadoop02
hadoop03
在三台机器上分别创建两个目录:
# mkdir -p /hadoop/data
# mkdir -p /hadoop/tmp
配置slave:将配置的hadoop整个目录复制到hadoop02,hadoop03
# scp -rp /usr/local/hadoop-1.2.1 hadoop02:/usr/local/
# scp -rp /usr/local/hadoop-1.2.1 hadoop03:/usr/local/
四,启动集群:
1、格式化名称节点
与普通文件系统一样,HDFS文件系统必须要先格式化,创建元数据数据结构以后才能使用。
# bin/hadoop namenode -format
# bin/start-all.sh
# jps 查看进程是否起来。secondarynamenode,nomenode,jobtracker三个进程必须都有,才正常。
8549 SecondaryNameNode
8409 NameNode
8611 JobTracker
8986 Jps
或者这种方式查看集群是否正常
[hadoop@hadoop01 hadoop-1.2.1]$ bin/hadoop dfsadmin -report
Safe mode is ON
Configured Capacity: 37073182720 (34.53 GB)
Present Capacity: 32421658624 (30.2 GB)
DFS Remaining: 32421576704 (30.19 GB)
DFS Used: 81920 (80 KB)
DFS Used%: 0%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
-------------------------------------------------
Datanodes available: 2 (2 total, 0 dead)
Name: 192.168.0.33:50010
Decommission Status : Normal
Configured Capacity: 18536591360 (17.26 GB)
DFS Used: 40960 (40 KB)
Non DFS Used: 2325061632 (2.17 GB)
DFS Remaining: 16211488768(15.1 GB)
DFS Used%: 0%
DFS Remaining%: 87.46%
Last contact: Sat Aug 31 22:25:13 CST 2013
Name: 192.168.0.32:50010
Decommission Status : Normal
Configured Capacity: 18536591360 (17.26 GB)
DFS Used: 40960 (40 KB)
Non DFS Used: 2326462464 (2.17 GB)
DFS Remaining: 16210087936(15.1 GB)
DFS Used%: 0%
DFS Remaining%: 87.45%
Last contact: Sat Aug 31 22:25:12 CST 2013
测试集群:
# bin/hadoop jar hadoop-test-1.2.1.jar DFSCIOTest -write -nrFiles 10 -filesize 1000
# bin/hadoop jar hadoop-test-1.2.1.jar DFSCIOTest -read -nrFiles 10 -filesize 1000
hadoop默认监听的端口:
Hadoop进程监听的地址和端口
Hadoop启动时会运行两个服务器进程,一个为用于Hadoop各进程之间进行通信的RPC服务器,另一个是提供了便于管理员查看Hadoop集群各进程相关信息页面的HTTP服务器。
可用于定义各HTTP服务器的属性有如下几个:
dfs.http.address:NameNode的HTTP服务器地址和端口,默认为0.0.0.0:50070;
dfs.secondary.http.address:SecondaryNameNode的HTTP服务器地址和端口,默认为0.0.0.0:50090;
mapred.job.tracker.http.addrss:JobTracker的HTTP服务器地址和端口,默认为0.0.0.0:50030;
dfs.datanode.http.address:DataNode的HTTP服务器地址和端口,默认为0.0.0.0:50075;
mapred.task.tracker.http.address:TaskTracker的HTTP服务器地址和端口,默认为0.0.0.0:50060;上述的HTTP服务器均可以通过浏览器直接访问以获取对应进程的相关信息,访问路径为http://Server_IP:Port。如namenode的相关信息:
四,排错思路
1,是否是hadoop.tmp.dir,dfs.data.dir属性,如果定义在别的目录需要在集群中所有节点都创建,并让hadoop用户能够访问
2,查看进程对应的端口是否有在监听。在上面配置中将namenode的端口定义9000,jobtracker定义成9001
[hadoop@hadoop01 hadoop-1.2.1]$ netstat -tunlp |grep 9000
tcp 0 0 ::ffff:192.168.0.31:9000 :::* LISTEN 22709/java
[hadoop@hadoop01 hadoop-1.2.1]$ netstat -tunlp |grep 9001
tcp 0 0 ::ffff:192.168.0.31:9001 :::* LISTEN 22924/java
3,查看日志,哪个服务没起来就查看对应的日志。
4,查看集群中所有节点的时间是不是一致。
5,iptable与selinux是否阻止。
6,/etc/hosts是否正确。
五,添加节点,删除节点
添加节点
1.修改host
和普通的datanode一样。添加namenode的ip
2.修改namenode的配置文件conf/slaves
添加新增节点的ip或host
3.在新节点的机器上,启动服务
[hadoop@hadoop04 hadoop]# ./bin/hadoop-daemon.sh start datanode
[hadoop@hadoop04 hadoop]# ./bin/hadoop-daemon.sh start tasktracker
4.均衡block
[hadoop@hadoop04 hadoop]# ./bin/start-balancer.sh
1)如果不balance,那么cluster会把新的数据都存放在新的node上,这样会降低mapred的工作效率
2)设置平衡阈值,默认是10%,值越低各节点越平衡,但消耗时间也更长
[iyunv@slave-004 hadoop]# ./bin/start-balancer.sh -threshold 5
3)设置balance的带宽,默认只有1M/s
dfs.balance.bandwidthPerSec
1048576
Specifies the maximum amount of bandwidth that each datanode
can utilize for the balancing purpose in term of
the number of bytes per second.
注意:
1. 必须确保slave的firewall已关闭;
2. 确保新的slave的ip已经添加到master及其他slaves的/etc/hosts中,反之也要将master及其他slave的ip添加到新的slave的/etc/hosts中
删除节点
1.集群配置
修改conf/hdfs-site.xml文件
dfs.hosts.exclude
/data/soft/hadoop/conf/excludes
Names a file that contains a list of hosts that are
not permitted to connect to the namenode. The full pathname of the
file must be specified. If the value is empty, no hosts are
excluded.
2确定要下架的机器
dfs.hosts.exclude定义的文件内容为,每个需要下线的机器,一行一个。这个将阻止他们去连接Namenode。如:
haoop04
3.强制重新加载配置
[iyunv@master hadoop]# ./bin/hadoop dfsadmin -refreshNodes
它会在后台进行Block块的移动
4.关闭节点
等待刚刚的操作结束后,需要下架的机器就可以安全的关闭了。
[iyunv@master hadoop]# ./bin/ hadoop dfsadmin -report
可以查看到现在集群上连接的节点
正在执行Decommission,会显示:
Decommission Status : Decommission in progress
执行完毕后,会显示:
Decommission Status : Decommissioned
5.再次编辑excludes文件
一旦完成了机器下架,它们就可以从excludes文件移除了
登录要下架的机器,会发现DataNode进程没有了,但是TaskTracker依然存在,需要手工处理一下
六,安装zookeeper:
1,zookeeper概述:
ZooKeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以Standalone模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。
hadoop01为zookeeper1,hadoop02为zookeeper2,hadoop03为zookeeper3
2、下载zookeeper-3.4.4解压到/usr/local/下,并修改权限
# vim conf/zoo.cfg
1
2
3
4
5
6
dataDir=/hadoop/zookeeper
# the port at which the clients will connect
clientPort=2181
server.1=hadoop01:28888:38888
server.2=hadoop02:28888:38888
server.3=hadoop03:28888:38888
注解:
tickTime发送心跳时间间隔,单位毫秒
initlimit和sysnclimit,两者都是以ticktime的总数进行度量(上面的时间为10*2000=20s)。initLimit参数设定了允许所有跟随者与领导者进行连接并同步的时间,如果在设定的时间内内,半数以上的跟随者未能完成同步,领导者便会宣布放弃领导地位,然后进行另外一次领导 者选举。如果这种情况经常发生,通过查看日志中的记录发现,则表明设定的值太小。
syscLimit参数设定了允许一个跟随者与领导者进行同步的时间。如果在设定的时间内,一个跟随者未能完成同步,它将会自己重启,所有关联到这个跟随者的客户端将连接到另外一个跟随者。
datadir保存的zk中持久化的数据,zk中存在两种数据,一种用完即消失,一种需要持久存在,zk的日志也保存在这
# mkdir /hadoop/zookeeper/
# echo "1" > /hadoop/zookeerper/myid
hadoop02,hadoop03 相应的节点创建myid
在对应的节点上启动服务
[hadoop01 zookeeper-3.4.4]$ sh bin/zkServer.sh start
三个节点启动完之后,查看
[hadoop01 zookeeper-3.4.4]$ jps
1320 NameNode
2064 Jps
1549 JobTracker
1467 SecondaryNameNode
1996 QuorumPeerMain
[hadoop@hadoop01 zookeeper-3.4.4]$ sh bin/zkServer.sh status 查看当前节点是否是leader
[hadoop@hadoop01 zookeeper-3.4.4]$ sh bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.4/bin/../conf/zoo.cfg
Mode: follower 表示是跟从
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com