hbase 使用lzo_HBase 管理,性能调优

HBase 管理,性能调优

标签(空格分隔): HBase 性能优化 PERFORMANCE TUNING Hadoop

设置 Hadoop 来扩展磁盘 I/O

现代服务器通常有多个磁盘硬件来提供大存储能力。这些磁盘通常配置成 RAID 阵列,作为它们的出厂设置。这在很多情况下是有益的,但对 Hadoop 却不是。

Hadoop 的 slave 节点存储了 HDFS 数据块和 MapReduce 临时文件在它的本地磁盘。这些本地磁盘操作受益于使用多个独立的磁盘来扩展磁盘 I/O。

在这方面,我们将描述怎样通过使用多个磁盘设置 Hadoop 来扩展磁盘 I/O。

准备工作

我们假设你的每个 DataNode 节点都有多个磁盘。这些磁盘是 JBOD (简单磁盘捆绑)或 RAID0 配置。假设这些磁盘挂载在 /mnt/d0, /mnt/d1, …, /mnt/dn。并且用户在每个挂载点授予了 HDFS 写权限。

怎样做

为了设置 Hadoop 来扩展磁盘 I/O,遵照这些指示:

在每个 DataNode 节点,在每块磁盘上为 HDFS 创建目录来存储它的数据块:

hadoop$ mkdir -p /mnt/d0/dfs/data

hadoop$ mkdir -p /mnt/d1/dfs/data

hadoop$ mkdir -p /mnt/dn/dfs/data

加入以下代码到 HDFS 配置文件中(hdfs-site.xml):

dfs.data.dir

/mnt/d0/dfs/data,/mnt/d1/dfs/data,...,/mnt/dn/dfs/data

同步修改过的 hdfs-site.xml 到集群:

hadoop@master1$ for slave in `cat $HADOOP_HOME/conf/slaves`

do

rsync -avz $HADOOP_HOME/conf/ $slave:$HADOOP_HOME/conf/

done

重起 HDFS:

hadoop@master1$ $HADOOP_HOME/bin/stop-dfs.sh

hadoop@master1$ $HADOOP_HOME/bin/start-dfs.sh

它怎样工作

我建议 DataNode 节点为 JBOD 或是 RAID0,因为你不需要 RAID 冗余,因为 HDFS 通过使用节点间的副本确保了它的数据冗余。因此,当单个磁盘失败了,不会造成数据丢失。

选择哪一个,JBOD 或 RAID0?从理论上来说,使用 JBOD 配置会比 RAID 配置的性能更好。这是因为,在 RAID 配置中,在整个写操作完成之前,你不得不等待阵列中最慢的磁盘完成,这使得平均 I/O 时间等于最慢的磁盘 I/O 时间。JBOD 配置中,最快的磁盘中的操作独立于最慢的磁盘,这使得平均的 I/O 时间比最慢的快。尽管如此,企业级的 RAID 卡或许有很大的影响。在决定选择哪个之前,你或许想对你的 JBOD 和 RAID0 做下基准测试。

对于这两个 JBOD 和 RAID0 配置,你将把磁盘挂载在不同的路径。这里的关键点是设置 dfs.data.dirproperty 在每个磁盘上的所有目录的创建。dfs.data.dirproperty 指定了DataNode 应该存储它本地块在哪里。通过设置它来逗号分隔多个目录,DataNode 以 round robin 方法在所有磁盘上存储它的块。这会使得 Hadoop 高效的扩展磁盘 I/O 操作所有磁盘。

警告:不要在 dfs.data.dir property 值的目录路径之间留下空白,不然它或许不会按照期望那样工作。

你将需要同步这些改变到所有的集群中,并且重起 HDFS 以使它们生效。

不止这些

如果你运行了 MapReduce,MapReduce 存储它的临时文件在 TaskTracker 的本地文件系统,你或许也想设置 MapReduce 来扩展它的磁盘 I/O:

在每个 TaskTracker 节点,为 MapReduce 在每个磁盘上创建目录来存储它的中间数据文件:

hadoop$ mkdir -p /mnt/d0/mapred/local

hadoop$ mkdir -p /mnt/d1/mapred/local

hadoop$ mkdir -p /mnt/dn/mapred/local

把以下代码加入 MapReduce 的配置文件中(mapred-site.xml):

hadoop@master1$ vi $HADOOP_HOME/conf/mapred-site.xml

mapred.local.dir

/mnt/d0/mapred/local,/mnt/d1/mapred/local,...,/mnt/dn/mapred/local

同步变更的 mapred-site.xml 文件到集群中,并重起 MapReduce

MapReduce 在执行期间在 TaskTracker 的本地磁盘生成很多临时文件。像 HDFS,在不同的磁盘上设置多个目录有助于大大扩展 MapReduce 的磁盘 I/O。

使用网络拓扑脚本来使得 Hadoop 能机架感知

Hadoop 有“机架感知”的概念,管理者可以定义在集群中每个 DataNode 的机架位置。使得 Hadoop 能机架感知及其重要的,因为:

机架感知预防数据丢失

机架感知提升网络性能

在这方面,我们将描述怎样使得 Hadoop 可以机架感知以及为什么它那么重要。

准备工作

你需要知道你的每一个 slave 节点属于哪个机架。以启动 Hadoop 的用户登陆进 master 节点。

怎样做

以下步骤描述了怎样使得 Hadoop 能机架感知:

创建一个 topology.sh 脚本并把它存储在 Hadoop 的配置目录下。改变 topology.data 的路径,在第 3 行,加入你的环境变量:

hadoop@master1$ vi $HADOOP_HOME/conf/topology.sh

while [ $# -gt 0 ] ; do

nodeArg=$1

exec< /usr/local/hadoop/current/conf/topology.data

result=""

while read line ; do

ar=( $line )

if [ "${ar[0]}" = "$nodeArg" ] ; then

result="${ar[1]}"

fi

done

shift

if [ -z "$result" ] ; then

echo -n "/default/rack "

else

echo -n "$result "

fi

done

不要忘记设置这个脚本的可执行权限

hadoop@master1$ chmod +x $HADOOP_HOME/conf/topology.sh

创建一个 topology.data 文件,如以下片段中那样;改变 IP 地址和机架,加入你自己的环境变量:

hadoop@master1$ vi $HADOOP_HOME/conf/topology.data

10.161.30.108 /dc1/rack1

10.166.221.198 /dc1/rack2

10.160.19.149 /dc1/rack

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值