用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
Hadoop主从节点分解:
主节点包括名称节点、从属名称节点和 jobtracker 守护进程(即所谓的主守护进程)以及管理
集群所用的实用程序和浏览器。从节点包括 tasktracker 和数据节点(从属守护进程)。两种设
置的不同之处在于,主节点包括提供 Hadoop 集群管理和协调的守护进程,而从节点包括实现
Hadoop 文件系统(HDFS)存储功能和 MapReduce 功能(数据处理功能)的守护进程。
每个守护进程在 Hadoop 框架中的作用。namenode 是 Hadoop 中的主服务器,它管理文件系
统名称空间和对集群中存储的文件的访问。还有一个 s econdary namenode,它不是
namenode 的冗余守护进程,而是提供周期检查点和清理任务。在每个 Hadoop 集群中可以找
到一个 namenode 和一个 secondary namenode。
datanode 管理连接到节点的存储(一个集群中可以有多个节点)。每个存储数据的节点运行一
个 datanode 守护进程。
每个集群有一个 jobtracker,它负责调度 datanode 上的工作。每个 datanode 有一个
tasktracker,它们执行实际工作。jobtracker 和 tasktracker 采用主-从形式,jobtracker 跨
datanode 分发工作,而 tasktracker 执行任务。jobtracker 还检查请求的工作,如果一个
datanode 由于某种原因失败,jobtracker 会重新调度以前的任务。
二 实验环境 rhel6.3 selinux and iptables disabled, sshd enabledHadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
Hadoop主从节点分解:
主节点包括名称节点、从属名称节点和 jobtracker 守护进程(即所谓的主守护进程)以及管理
集群所用的实用程序和浏览器。从节点包括 tasktracker 和数据节点(从属守护进程)。两种设
置的不同之处在于,主节点包括提供 Hadoop 集群管理和协调的守护进程,而从节点包括实现
Hadoop 文件系统(HDFS)存储功能和 MapReduce 功能(数据处理功能)的守护进程。
每个守护进程在 Hadoop 框架中的作用。namenode 是 Hadoop 中的主服务器,它管理文件系
统名称空间和对集群中存储的文件的访问。还有一个 s econdary namenode,它不是
namenode 的冗余守护进程,而是提供周期检查点和清理任务。在每个 Hadoop 集群中可以找
到一个 namenode 和一个 secondary namenode。
datanode 管理连接到节点的存储(一个集群中可以有多个节点)。每个存储数据的节点运行一
个 datanode 守护进程。
每个集群有一个 jobtracker,它负责调度 datanode 上的工作。每个 datanode 有一个
tasktracker,它们执行实际工作。jobtracker 和 tasktracker 采用主-从形式,jobtracker 跨
datanode 分发工作,而 tasktracker 执行任务。jobtracker 还检查请求的工作,如果一个
datanode 由于某种原因失败,jobtracker 会重新调度以前的任务。
主机:172.25.254.2 master
172.25.254.3 slave
172.25.254.4 slave
三 实验配置
首先在master主机上装上jdk环境
sh jdk-6u32-linux-x64.bin 必须是1.6以上版本
然后新建hadoop用户
useradd -u 1000 hadoop 为三台机子上都创建此用户 指定uid是为了后面的配置方便
echo westos | passwd --stdin hadoop
mv jdk1.6.0_32 /home/hadoop
cd /home/hadoop
chown hadoop.hadoop jdk1.6.0_32/
su -hadoop
mv hadoop-1.2.1.tar.gz /home/hadoop
tar zxf hadoop-1.2.1.tar.gz
最终就是要修改如下
ln -s jdk1.6.0_32 java 方便后面管理
cd /home/hadoop/hadoop-1.2.1/conf
vim hadoop-env.sh
export JAVA_HOME=/home/hadoop/java 环境变量路径
cd /home/hadoop/hadoop-1.2.1
mkdir input
cp conf/* input/
cd conf/
先用自己做测试,即是masternode 又是slavenode
vim core-site.xml
vim hdfs-site.xml
vim mapred-site.xml
ssh-keygen 一路回车
ssh-copy-id 172.25.254.2
vim masters
172.25.254.2
vim slaves172.25.254.2
172.25.254.2
格式化一个新的分布式文件系统:
bin/hadoop namenode -format
bin/start-all.sh 启动 Hadoop 守护进程
bin/stop-all.sh 关闭 Hadoop 守护进程
bin/hadoop fs -put input/ test 往test中存放一些测试数据
time bin/hadoop jar hadoop-examples-1.2.1.jar grep test output 'dfs[a-z.]+'
bin/hadoop namenode -format
bin/start-all.sh 启动 Hadoop 守护进程
bin/stop-all.sh 关闭 Hadoop 守护进程
bin/hadoop fs -put input/ test 往test中存放一些测试数据
运行发行版提供的示例程序:
time bin/hadoop jar hadoop-examples-1.2.1.jar grep test output 'dfs[a-z.]+'
然后在浏览器里就可以查看了
接下来做多节点的操作
首先关闭master上的hadoop
将 hdfs-site.xml 文将中的 1 改为2
vim slaves
172.25.254.3
172.25.254.4
为了方便起见,在master上面用nfs文件将那些配置文件共享过去
yum install -y nfs-utils
/home/hadoop *(rw,anonuid=1000,anongid=1000)
/etc/init.d/rpcbind start
/etc/init.d/nfs start
然后在3 和4上
yum install -y nfs-utils
showmount -e 172.25.254.2 如果有资源证明正常
useradd hadoop
echo westos | passwd --stdin
mount 172.25.254.2:/home/hadoop/ /home/hadoop/
然后再master上关闭hadoop,格式化,重启
bin/hadoop dfsadmin -report 查看信息
在master上在线添加节点 (与上面添加3,4差不多,可由上面的图进行对比)
1. 在新增节点上安装 jdk,并创建相同的 hadoop 用户,uid 等保持一致
2. 在 conf/slaves 文件中添加新增节点的 ip
3. 同步 master 上 hadoop 所有数据到新增节点上,路径保持一致
4. 在新增节点上启动服务:
$ bin/hadoop-daemon.sh start datanode
$ bin/hadoop-daemon.sh start tasktracker
5. 均衡数据:
$ bin/start-balancer.sh
1)如果不执行均衡,那么 cluster 会把新的数据都存放在新的 datanode 上,这样会降低 mapred
的工作效率
2)设置平衡阈值,默认是 10%,值越低各节点越平衡,但消耗时间也更长
$ bin/start-balancer.sh -threshold 5
hadoop 在线删除 datanode 节点:
由上可知 datanode 为两个 172.25.254.3 和 172.25.254.4
现在我们在线去除节点4
1. 在 master 上修改 conf/mapred-site.xml
dfs.hosts.exclude
/home/hadoop/hadoop-1.2.1/conf/datanode-excludes
2. 创建 datanode-excludes 文件,并添加需要删除的主机,一行一个
172.25.254.4
3.此操作会在后台迁移数据,等此节点的状态显示为 Decommissioned,就可以安全关闭了。
这时候172.25.254.4就如下图
Hadoop 在线删除 tasktracker 节点:
/etc/init.d/nfs start
然后在3 和4上
yum install -y nfs-utils
showmount -e 172.25.254.2 如果有资源证明正常
useradd hadoop
echo westos | passwd --stdin
mount 172.25.254.2:/home/hadoop/ /home/hadoop/
然后再master上关闭hadoop,格式化,重启
bin/hadoop dfsadmin -report 查看信息
在master上在线添加节点 (与上面添加3,4差不多,可由上面的图进行对比)
1. 在新增节点上安装 jdk,并创建相同的 hadoop 用户,uid 等保持一致
2. 在 conf/slaves 文件中添加新增节点的 ip
3. 同步 master 上 hadoop 所有数据到新增节点上,路径保持一致
4. 在新增节点上启动服务:
$ bin/hadoop-daemon.sh start datanode
$ bin/hadoop-daemon.sh start tasktracker
5. 均衡数据:
$ bin/start-balancer.sh
1)如果不执行均衡,那么 cluster 会把新的数据都存放在新的 datanode 上,这样会降低 mapred
的工作效率
2)设置平衡阈值,默认是 10%,值越低各节点越平衡,但消耗时间也更长
$ bin/start-balancer.sh -threshold 5
hadoop 在线删除 datanode 节点:
由上可知 datanode 为两个 172.25.254.3 和 172.25.254.4
现在我们在线去除节点4
1. 在 master 上修改 conf/mapred-site.xml
dfs.hosts.exclude
/home/hadoop/hadoop-1.2.1/conf/datanode-excludes
2. 创建 datanode-excludes 文件,并添加需要删除的主机,一行一个
172.25.254.4
3.此操作会在后台迁移数据,等此节点的状态显示为 Decommissioned,就可以安全关闭了。
这时候172.25.254.4就如下图
Hadoop 在线删除 tasktracker 节点:
1. 在 master 上修改 conf/mapred-site.xml
mapred.hosts.exclude
/home/hadoop/hadoop-1.2.1/conf/tasktracker-excludes
2. 创建 tasktracker-excludes 文件,并添加需要删除的主机名,一行一个
server51.example.com
3. 在 master 上在线刷新节点
$ bin/hadoop mradmin -refreshNodes
4. 登录 jobtracker 的网络接口,进行查看。
mapred.hosts.exclude
/home/hadoop/hadoop-1.2.1/conf/tasktracker-excludes
2. 创建 tasktracker-excludes 文件,并添加需要删除的主机名,一行一个
server51.example.com
3. 在 master 上在线刷新节点
$ bin/hadoop mradmin -refreshNodes
4. 登录 jobtracker 的网络接口,进行查看。