玩转Hadoop的几个小数独技巧视频教程

hadoop使用过程中的一些小技巧
1.在Eclipse下的hadoop mapred调试
对于小数据量的调试,可以再本机下载并安装cywin,之后将cywin的bin目录添加到系统的Path环境变量中,将hadoop的core包添加到classpath中。此时就可以在Eclipse下调试你的mapred程序,这时hadoop是在local模式下运行的,如果把hadoop的源代码关联进来,你还可以在他的内部处理中设置断点。
2. master重启出问题
之前使用hadoop过程中遇到过几次由于任务执行过程中,某些slave宕机了,然后重启集群,master起不来,一直处在safe mode。查看原因是他一直在试图恢复大量的中间文件,但是此时这些文件已经不存在了。对于这种情况,可以删去他的redo日志,使集群能够快速的启动,当然,弊端是这些中间文件将被忽略。删除的办法是修改设置中的hadoop.tmp.dir的路径下的dfs/name/current/edits文件。
没有更多推荐了,玩转大数据-如何搭建hadoop集群 - 简书
玩转大数据-如何搭建hadoop集群
看到题目有没有一种高大上的感觉?
毛线,当前是个人、是个公司都在说自己搞大数据,每天没有几个PB的数据入库,每天没有几个TB的分析数据产出敢说自己是大数据?
乘着大数据噱头之风,我们还是要看一下大数据所运用的工具对于我们是否有用,小编之前写项目时一直青睐于mysql,进来发现新的项目mysql已经无法适应,我们目前日数据产生量在10W级别时,mysql的查询速度和稳定性的确出现了问题,借鉴当前分布式数据库的经验,我们决定采用Hbase集群,Hadoop作为hbase的基础,被提到首要位置做研究。
我们首先看看hadoop的发展历史和主要架构:
Hadoop历史
雏形开始于2002年的Apache的Nutch,Nutch是一个开源Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。
随后在2003年Google发表了一篇技术学术论文谷歌文件系统(GFS)。GFS也就是google File System,google公司为了存储海量搜索数据而设计的专用文件系统。
2004年Nutch创始人Doug Cutting基于Google的GFS论文实现了分布式文件存储系统名为NDFS。
2004年Google又发表了一篇技术学术论文MapReduce。MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行分析运算。
2005年Doug Cutting又基于MapReduce,在Nutch搜索引擎实现了该功能。
2006年,Yahoo雇用了Doug Cutting,Doug Cutting将NDFS和MapReduce升级命名为Hadoop,Yahoo开建了一个独立的团队给Goug Cutting专门研究发展Hadoop。
不得不说Google和Yahoo对Hadoop的贡献功不可没。
Hadoop核心
Hadoop的核心就是HDFS和MapReduce,而两者只是理论基础,不是具体可使用的高级应用,Hadoop旗下有很多经典子项目,比如HBase、Hive等,这些都是基于HDFS和MapReduce发展出来的。要想了解Hadoop,就必须知道HDFS和MapReduce是什么。
HDFS(Hadoop Distributed File System,Hadoop分布式文件系统),它是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,适合那些有着超大数据集(large data set)的应用程序。
HDFS的设计特点是:
1、大数据文件,非常适合上T级别的大文件或者一堆大数据文件的存储,如果文件只有几个G甚至更小就没啥意思了。
2、文件分块存储,HDFS会将一个完整的大文件平均分块存储到不同计算器上,它的意义在于读取文件时可以同时从多个主机取不同区块的文件,多主机读取比单主机读取效率要高得多得都。
3、流式数据访问,一次写入多次读写,这种模式跟传统文件不同,它不支持动态改变文件内容,而是要求让文件一次写入就不做变化,要变化也只能在文件末添加内容。
4、廉价硬件,HDFS可以应用在普通PC机上,这种机制能够让给一些公司用几十台廉价的计算机就可以撑起一个大数据集群。
5、硬件故障,HDFS认为所有计算机都可能会出问题,为了防止某个主机失效读取不到该主机的块文件,它将同一个文件块副本分配到其它某几个主机上,如果其中一台主机失效,可以迅速找另一块副本取文件。
HDFS的关键元素:
Block:将一个文件进行分块,通常是64M。
NameNode:保存整个文件系统的目录信息、文件信息及分块信息,这是由唯一一台主机专门保存,当然这台主机如果出错,NameNode就失效了。在Hadoop2.*开始支持activity-standy模式----如果主NameNode失效,启动备用主机运行NameNode。
DataNode:分布在廉价的计算机上,用于存储Block块文件。
通俗说MapReduce是一套从海量·源数据提取分析元素最后返回结果集的编程模型,将文件分布式存储到硬盘是第一步,而从海量数据中提取分析我们需要的内容就是MapReduce做的事了。
下面以一个计算海量数据最大值为例:一个银行有上亿储户,银行希望找到存储金额最高的金额是多少,按照传统的计算方式,我们会这样:
Long moneys[] ...
Long max = 0L;
for(int i=0;i&moneys.i++){
if(moneys[i]&max){
max = moneys[i];
如果计算的数组长度少的话,这样实现是不会有问题的,还是面对海量数据的时候就会有问题。
MapReduce会这样做:首先数字是分布存储在不同块中的,以某几个块为一个Map,计算出Map中最大的值,然后将每个Map中的最大值做Reduce操作,Reduce再取最大值给用户。
MapReduce的基本原理就是:将大的数据分析分成小块逐个分析,最后再将提取出来的数据汇总分析,最终获得我们想要的内容。当然怎么分块分析,怎么做Reduce操作非常复杂,Hadoop已经提供了数据分析的实现,我们只需要编写简单的需求命令即可达成我们想要的数据。
hadoop框架
Hadoop使用主/从(Master/Slave)架构,主要角色有NameNode,DataNode,secondary NameNode,JobTracker,TaskTracker组成。
其中NameNode,secondary NameNode,JobTracker运行在Master节点上,DataNode和TaskTracker运行在Slave节点上。
1,NameNode
NameNode是HDFS的守护程序,负责记录文件是如何分割成数据块的,以及这些数据块被存储到哪些数据节点上。它的功能是对内存及I/O进行集中管理。
2,DataNode
集群中每个从服务器都运行一个DataNode后台程序,后台程序负责把HDFS数据块读写到本地文件系统。需要读写数据时,由NameNode告诉客户端去哪个DataNode进行具体的读写操作。
3,Secondary NameNode
Secondary NameNode是一个用来监控HDFS状态的辅助后台程序,如果NameNode发生问题,可以使用Secondary NameNode作为备用的NameNode。
4,JobTracker
JobTracker后台程序用来连接应用程序与Hadoop,用户应用提交到集群后,由JobTracker决定哪个文件处理哪个task执行,一旦某个task失败,JobTracker会自动开启这个task。
5,TaskTracker
TaskTracker负责存储数据的DataNode相结合,位于从节点,负责各自的task。
hadoop搭建方法:
我们接下来就看一下hadoop 2.6全分布安装是怎么完成的:
环境:centos 6.6 + hadoop2.6
虚拟机:(vmware fusion 7.0.0)
虚拟机hostname
master / 192.168.187.102
slave01 / 192.168.187.103
slave02 / 192.168.187.104
注:前三个步骤都是准备工作,如果已经完成,可直接进入步骤四
步骤一: 先在3台虚拟机上,设置hostname及修改hosts文件
1.1 先正确设置各虚拟机的hostname
sudo vi /etc/sysconfig/network
将HOSTNAME=后的内容,改成想要的机器名
1.2 修改hosts文件
sudo vi /etc/hosts
192.168.187.102 master
192.168.187.103 slave01
192.168.187.104 slave02
这样,就不用记IP了
这一步完成后,最好重启一次系统,以便生效。然后可以用ping master(或slave01、slave02)试下,正常的话,应该能ping通
注:hostname不要命名为“xxx.01,xxx.02”之类以“.数字”结尾,否则到最后hadoop的NameNode服务将启动失败。
步骤二:在3台虚拟机上安装jdk
yum install java
注:hadoop是java写的,jdk是必须的。上述命令,会安装openjdk最基本的运行时,没有源码和javac等其它工具。如果要安装javac等编译工具及源码
yum install java-1.7.0-openjdk-devel
yum install java-1.7.0-openjdk-src
另外openjdk安装后,不会默许设置JAVA_HOME环境变量,要查看安装后的目录,可以用命令
sudo update-alternatives --config java 看到
默认jre目录为:/usr/lib/java/jvm/jre-1.7.0-openjdk.x86_64
如要设置环境变量,可用命令 sudo vi /etc/profile
在最后添加
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.75.x86_64
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/jre/lib/dt.jar:$JAVA_HOME/jre/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
注:如果不喜欢openjdk,想安装oracle官方的jdk,可按下面步骤操作
a) rpm -qa | grep java
即:查看当前已经安装的跟java相关的包,如果显示有openjdk在其中
b) yum -y remove java
一般这样就会卸载干净,执行完以后,再运行 a)中的rpm -qa | grep java看看,如果还有残留,可运行
rpm -e --nodeps tzdata-java-2015a-1.el6.noarch (最后的部分为要删除的包名,即刚才查出来的结果)
重新安装sun jdk,先从官网下载安装文件
a) 上传rpm安装文件到虚拟机,参考下面的命令
scp jdk-7u51-linux-x64.rpm root@master:/home/hadoop/
b) 到虚拟机上,执行安装
rpm -ivh jdk-7u51-linux-x64.rpm
c) 然后修改环境变量 sudo vi /etc/profile,在最后加下面三行
export JAVA_HOME=/usr/java/jdk1.7.0_51
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
保存退出,然后输入 source /etc/profile 以便让新环境变量生效
注:如果机器上之前用 yum install hadoop之类的命令安装过低版本的hadoop,也必须先卸载干净
步骤三:在3台虚拟机上创建专门用户hadoop
useradd hadoop (创建用户)
passwd hadoop (设置密码,为简单起见,3台机器上的hadoop密码最好设置成一样,比如hadoop123)
为了方便,建议将hadoop加入root用户组,操作方法:
先以root身份登录,然后输入
usermod -g root hadoop ,执行完后hadoop即归属于root组了,可以再输入
id hadoop 查看输出验证一下,如果看到类似下面的输出:
uid=502(hadoop) gid=0(root) 组=0(root)
就表示OK了
步骤四:配置ssh免密码登录
hadoop工作时,各节点要相互通讯,正常情况下linux之间通讯要提供用户名、密码(目的是保证通讯安全),如果需要人工干预输入密码,显然不方便,做这一步的目的,是让各节点能自动通过安全认证,不影响正常通讯。
4.1 先在master上,生成公钥、私钥对
以hadoop身份登录到系统
cd (进入个人主目录,默认为/home/hadoop)
ssh-keygen -t rsa -P '' (注:最后是二个单引号)
即:以rsa算法,生成公钥、私钥对,-P ''表示空密码。该命令运行完后,会在个人主目录下生成.ssh目录,里面会有二个文件id_rsa(私钥) ,id_rsa.pub(公钥)
4.2 导入公钥
cat .ssh/id_rsa.pub && .ssh/authorized_keys
执行完以后,可以在本机上测试下,用ssh连接自己,即:ssh localhost (或ssh master),如果不幸还是提示要输入密码,说明还没起作用,还有一个关键的操作
chmod 600 .ssh/authorized_keys (修改文件权限,否则不起作用)
然后再测试下 ssh localhost ,如果不需要输入密码,就连接成功,表示ok,一台机器已经搞定了。
4.3 在其它机器上生成公钥、密钥,并将公钥文件复制到master
a) 以hadoop身份登录其它二台机器 slave01、slave02,执行 ssh-keygen -t rsa -P '' 生成公钥、密钥
b) 然后用scp命令,把公钥文件发放给master(即:刚才已经搞定的那台机器)
slave01上:
scp .ssh/id_ hadoop@master:/home/hadoop/id_rsa_
slave02上:
scp .ssh/id_ hadoop@master:/home/hadoop/id_rsa_
这二行执行完后,回到master中,查看下/home/hadoop目录,应该有二个新文件id_rsa_01.pub、id_rsa_02.pub,然后在master上,导入这二个公钥
cat id_rsa_01.pub && .ssh/authorized_keys
cat id_rsa_02.pub && .ssh/authorized_keys
这样,master这台机器上,就有所有3台机器的公钥了。
4.4 将master上的“最全”公钥,复制到其它机器
a) 继续保持在master上,
scp .ssh/authorized_keys hadoop@slave01:/home/hadoop/.ssh/authorized_keys
scp .ssh/authorized_keys hadoop@slave02:/home/hadoop/.ssh/authorized_keys
b) 修改其它机器上authorized_keys文件的权限
slave01以及slave02机器上,均执行命令
chmod 600 .ssh/authorized_keys
在每个虚拟机上,均用 ssh 其它机器的hostname 验证下,如果能正常无密码连接成功,表示ok
小结:该步骤非常重要,主要思路是在各节点上生成公钥、私钥,然后将公钥发放其它所有节点。RSA算法是非对称加密算法,仅公布“公钥”,只要私钥不外泄,还是不能解密的,所以安全性依然有保障。
如果本步骤失败,根据我个人经验,多半是权限问题,请检查hadoop是否具有足够权限,建议将hadoop加入sudoers列表及root用户组。另外,这里也整理了一些SSH免密码设置失败的原因,请移步 ssh 免密码设置失败原因总结
步骤五:上传并解压hadoop2.6
a)在本机上,用scp命令上传hadoop2.6到master
scp hadoop-2.6.0.tar.gz hadoop@master:/home/hadoop/
b) 以hadoop身份登录到master,运行以下命令解压
tar -zxvf hadoop-2.6.0.tar.gz
步骤六:修改配置
一共有7个文件要修改:
$HADOOP_HOME/etc/hadoop/hadoop-env.sh
$HADOOP_HOME/etc/hadoop/yarn-env.sh
$HADOOP_HOME/etc/hadoop/core-site.xml
$HADOOP_HOME/etc/hadoop/hdfs-site.xml
$HADOOP_HOME/etc/hadoop/mapred-site.xml
$HADOOP_HOME/etc/hadoop/yarn-site.xml
$HADOOP_HOME/etc/hadoop/slaves
其中$HADOOP_HOME表示hadoop根目录,本文中默认为/home/hadoop/hadoop-2.6.0
a) hadoop-env.sh 、yarn-env.sh
这二个文件主要是修改JAVA_HOME后的目录,改成实际本机jdk所在目录位置
vi etc/hadoop/hadoop-env.sh (及 vi etc/hadoop/yarn-env.sh)
找到下面这行的位置,改成(jdk目录位置,大家根据实际情况修改)
export JAVA_HOME=/usr/java/jdk1.7.0_51
另外 hadoop-env.sh中 , 建议加上这句:
export HADOOP_PREFIX=/home/hadoop/hadoop-2.6.0
b) core-site.xml 参考下面的内容修改:
1 &?xml version="1.0" encoding="UTF-8"?&
2 &?xml-stylesheet type="text/xsl" href="configuration.xsl"?&
3 &configuration&
&property&
&name&fs.defaultFS&/name&
&value&&/value&
&/property&
&property&
&name&hadoop.tmp.dir&/name&
&value&/home/hadoop/tmp&/value&
&/property&
12 &/configuration&
注:/home/hadoop/tmp 目录如不存在,则先mkdir手动创建
core-site.xml的完整参数请参考
c) hdfs-site.xml
1 &?xml version="1.0" encoding="UTF-8"?&
2 &?xml-stylesheet type="text/xsl" href="configuration.xsl"?&
3 &configuration&
&property&
&name&dfs.datanode.ipc.address&/name&
&value&0.0.0.0:50020&/value&
&/property&
&property&
&name&dfs.datanode.http.address&/name&
&value&0.0.0.0:50075&/value&
&/property&
&property&
&name&dfs.replication&/name&
&value&2&/value&
&/property&
16 &/configuration&
注:dfs.replication表示数据副本数,一般不大于datanode的节点数。
hdfs-site.xml的完整参数请参考
d) mapred-site.xml
1 &?xml version="1.0"?&
2 &?xml-stylesheet type="text/xsl" href="configuration.xsl"?&
3 &configuration&
&property&
&name&mapreduce.framework.name&/name&
&value&yarn&/value&
&/property&
8 &/configuration&
mapred-site.xml的完整参数请参考
e)yarn-site.xml
1 &?xml version="1.0"?&
2 &configuration&
&property&
&name&yarn.nodemanager.aux-services&/name&
&value&mapreduce_shuffle&/value&
&/property&
7 &/configuration&
yarn-site.xml的完整参数请参考
另外,hadoop 1.x与2.x相比, 1.x中的很多参数已经被标识为过时,具体可参考
最后一个文件slaves暂时不管(可以先用mv slaves slaves.bak 将它改名),上述配置弄好后,就可以在master上启用 NameNode测试了,方法:
$HADOOP_HOME/bin/hdfs namenode –format 先格式化
15/02/12 21:29:53 INFO namenode.FSImage: Allocated new BlockPoolId: BP-.168.187.102-4
15/02/12 21:29:53 INFO common.Storage: Storage directory /home/hadoop/tmp/dfs/name has been successfullyformatted.
等看到这个时,表示格式化ok
$HADOOP_HOME/sbin/start-dfs.sh
启动完成后,输入jps查看进程,如果看到以下二个进程:
5161 SecondaryNameNode
4989 NameNode
表示master节点基本ok了
再输入$HADOOP_HOME/sbin/start-yarn.sh ,完成后,再输入jps查看进程
5161 SecondaryNameNode
5320 ResourceManager
4989 NameNode
如果看到这3个进程,表示yarn也ok了
f) 修改slaves
如果刚才用mv slaves slaves.bak对该文件重命名过,先运行 mv slaves.bak slaves 把名字改回来,再
vi slaves 编辑该文件,输入
保存退出,最后运行
$HADOOP_HOME/sbin/stop-dfs.sh
$HADOOP_HOME/sbin/stop-yarn.sh
停掉刚才启动的服务
步骤七:将master上的hadoop目录复制到slave01,slave02
仍然保持在master机器上
cd 先进入主目录
scp -r hadoop-2.6.0 hadoop@slave01:/home/hadoop/
scp -r hadoop-2.6.0 hadoop@slave02:/home/hadoop/
注:slave01、slave02上的hadoop临时目录(tmp)及数据目录(data),仍然要先手动创建。
步骤八:验证
master节点上,重新启动
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
顺利的话,master节点上有几下3个进程:
7482 ResourceManager
7335 SecondaryNameNode
7159 NameNode
slave01、slave02上有几下2个进程:
2296 DataNode
2398 NodeManager
同时可浏览:
另外也可以通过 bin/hdfs dfsadmin -report 查看hdfs的状态报告
其它注意事项:
a) master(即:namenode节点)若要重新格式化,请先清空各datanode上的data目录(最好连tmp目录也一起清空),否则格式化完成后,启动dfs时,datanode会启动失败
b) 如果觉得master机器上只运行namenode比较浪费,想把master也当成一个datanode,直接在slaves文件里,添加一行master即可
c) 为了方便操作,可修改/etc/profile,把hadoop所需的lib目录,先加到CLASSPATH环境变量中,同时把hadoop/bin,hadoop/sbin目录也加入到PATH变量中,可参考下面的内容:
export HADOOP_HOME=/home/hadoop/hadoop-2.6.0
export JAVA_HOME=/usr/java/jdk1.7.0_51
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$HADOOP_HOME/share/hadoop/common/hadoop-common-2.6.0.jar:$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.6.0.jar:$HADOOP_HOME/share/hadoop/common/lib/commons-cli-1.2.jar
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
1 目的将hadoop 2.7.1 安装到 166、167、168 三台机器上2 提供环境练习环境192.168.0.166 master 192.168.0.167 slave01 192.168.0.168 slave02 user:hadoop passwd: had...
经过一系列的前期环境准备,现在可以开始Hadoop的安装了,在这里去apache官网下载2.7.3的版本http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz 不...
(搭建集群部分借鉴了kiwenlau/hadoop-cluster-docker中的内容,不过那里的基础环境是Ubuntu,本人这里是用的CentOS7,因此也糟了不少坑!) 目录索引 一、编辑Hadoop运行环境中的配置文件二、使用Dockerfile制作Hadoop的镜...
参考文献[1]http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/ClusterSetup.html[2]http://www.linuxidc.com/Linux/...
简述 hadoop 集群一共有4种部署模式,详见《hadoop 生态圈介绍》。HA联邦模式解决了单纯HA模式的性能瓶颈(主要指Namenode、ResourceManager),将整个HA集群划分为两个以上的集群,不同的集群之间通过Federation进行连接,使得HA集群...
去了泰国 只待在清迈
手表是我们生活中必不可少的工具之一,很多人都有佩戴手表出行的习惯。而手表中,最有价值的还是机械手表。机械手表在使用中要比石英手表更加小心,尤其是机械表的机芯。今天鼎盛就为大家介绍一下机械表机芯如何保养吧! 正常佩戴避免震动 有适当的活动量,才能使其持续上条,正常运行(在佩戴...
大雨过后,有个人刷地出站了,哦,不是,是出线了,哦,不是,是出现了。 他说他叫王小健, 啊,跟王自健什么关系?小号?小小号? 啊,我想到了失恋三十三天。 “喂喂“,他吸引我的注意力,“我还自带能量呢。” 啥?能量? 像儿时看的电视剧 霹雳贝贝 那样? 拖着链子,引着闪电。。...
好久不见,就像深宅里的幽灵 没有一星半点的声息 来时,却是浩浩荡荡 那辗转而过的一寸寸街角 每一粒沙子儿都是风中的梳头娘 我们一边品尝着四方而来的“土”特产 在摇曳的花香中 努力挣扎着,挣扎着…… 那是一双双星星般的眼睛 毫不遮掩的泪水 活泼的、深沉的、忧郁的、哀怨的…… ...
我深知,我这只虚假、肿胀的气球,至今未被戳破,尚一脸淡定混迹于平和者的队伍,并非完全来自内心的爱和中庸。罢了,只是无知和怯懦。 常狐疑,愤怒乃至游走于极端,是缘于见到太多光鲜鲜背后的垢尘,拍案而起。还是太过于稚嫩,以至不喑世事,受到一点刺激,立马跳将起来。幸运的是,着(著)...Hadoop管理员的十个最佳实践
1. 选择Cloudera CDH部署你的Cluster
大多数管理员都是从Apache Hadoop开始学习。笔者最开始也使用Apache版本Hadoop进行开发和部署工作,但接触到Cloudera CDH后,我发现它可以使管理员的工作更简单,不仅可以获得最新的特性和Bug修复,有时也会带来令人惊喜的性能改善。
CDH为什么更好?笔者罗列了以下几点:
CDH基于稳定版Apache Hadoop,并应用了最新Bug修复或者Feature的Patch。Cloudera常年坚持季度发行Update版本,年度发行Release版本,更新速度比Apache官方快,而且在实际使用过程中CDH表现无比稳定,并没有引入新的问题。
Cloudera官方网站上安装、升级文档详细,省去Google时间。 CDH支持Yum/Apt包,Tar包,RPM包,Cloudera Manager四种方式安装,总有一款适合您。官方网站推荐Yum/Apt方式安装,笔者体会其好处如下:
联网安装、升级,非常方便。当然你也可以下载rpm包到本地,使用Local Yum方式安装。 自动下载依赖软件包,比如要安装Hive,则会级联下载、安装Hadoop。 Hadoop生态系统包自动匹配,不需要你寻找与当前Hadoop匹配的Hbase,Flume,Hive等软件,Yum/Apt会根据当前安装Hadoop版本自动寻找匹配版本的软件包,并保证兼容性。
自动创建相关目录并软链到合适的地方(如conf和logs等目录);自动创建hdfs, mapred用户,hdfs用户是HDFS的最高权限用户,mapred用户则负责mapreduce执行过程中相关目录的权限。
推荐指数:★★★
推荐理由:获取最新特性和最新Bug修复;安装维护方便,节省运维时间。
2. Hadoop集群配置与管理
安装和维护Hadoop集群涉及大量的管理工作,包括软件安装,设备管理(crontab、iptables等)、配置分发等。
对于小型集群软件分发和节点管理可以使用PDSH这款软件,它可以通过免密钥的SSH将文件分发到目标服务器,以及为一组目标设备发送命令并获得反馈。如果是大型集群或者硬件配置差别很大的集群,推荐使用puppet这样的工具帮助你维护配置文件,或者通过Cloudera Manager以GUI的方式的管理集群(注意:Clodera Manager不是开源软件,免费版最多支持50个节点)。
推荐指数:★★★
推荐理由:提高运维效率
3. 开启SecondaryNameNode
SecondaryNameNode(下称SNN)的主要功能是工作是帮助NameNode(下称NN)合并编辑日志,然后将合并后的镜像文件copy回NN,以减少NN重启时合并编辑日志所需的时间。SNN不是NN的热备,但是通过以下步骤可以实现将SNN切换为NN的目的。首先,SNN节点上导入从NN Copy过来的镜像文件,然后修改SNN机器名和IP与NN一致,最后重启集群。
特别注意的是SNN的内存配置要与NN一致,因为合并编辑日志的工作需要将metadata加载到内存完成。另外,不仅仅是SNN,任何保存NN镜像的节点都可以通过上面步骤变为NN,只是SNN更适合罢了。
推荐指数:★★★
推荐理由:减少NN重启导致集群服务中断时间;NN节点故障后,SNN充当NN角色
4. 使用Ganglia和Nagios监控你的集群
当运行一个大型mapreduce 作业时,我们通常非常关心该作业对TaskTracker(下称TT)CPU、内存、磁盘,以及整个网络的带宽情况,这时候就需要Ganglia这个工具为我们生成相关图表来诊断、分析问题。
Ganglia可以监控集群状态,但当你的服务器down机或者某个TT挂掉,它却无法通知到你,这时我们可以使用Nagios这款告警软件,它可以配置邮件告警和短息告警。通过编写plugins,可以实现自己的监控功能。我们的集群目前做了如下监控:
NameNode、JobTracker内存 DataNode和TaskTracker运行状态 NFS服务状态 磁盘使用情况 服务器负载状态 推荐指数:★★★
推荐理由:Ganglia可以帮你记录集群状态,方便诊断问题;Nagios可以再遇到问题时第一时间通知你。
5. 设置好内存至关重要
Hadoop集群安装完毕后,第一件事就是修改bin/hadoop-evn.sh文件设置内存。主流节点内存配置为32GB,典型场景内存设置如下
NN: 15-25 GB
DN:1-4 GB
TT:1-2 GB,Child VM 1-2 GB
集群的使用场景不同相关设置也有不同,如果集群有大量小文件,则要求NN内存至少要20GB,DN内存至少2GB。
推荐指数:★★★★★
推荐理由:几个组件中NN对内存最为敏感,它有单点问题,直接影响到集群的可用性;JT同样是单点,如果JT内存溢出则所有MapReduce Job都无法正常执行。
6. 管理员玩转MapReduce
Hadoop原生MapReduce需要Java语言编写,但是不会Java也没问题,通过Hadoop streaming框架管理员可以使用Python,Shell,Perl等语言进行MapReduce开发,但更简单的办法是安装和使用Hive或者Pig。
推荐指数:★★★
推荐理由:减少运维时间,快速响应各种ad-hot需求和故障诊断。
7. NameNode HA
前面已经说过,NN是整个集群可能出现的单点故障。
Hadoop通过在hdfs.site.xml文件的dfs.name.dir属性指定保持的metadata路径,如果希望保持到多个路径,可以使用逗号分割配置多个路径。
&property&
&name&dfs.name.dir&/name&
&value&/data/cache1/dfs/nn,/data/cache2/dfs/nn&/value&
&/property&
Hadoop官方推荐配置为metadata配置多个path,其中包含一个NFS的路径。但根据笔者一次集群严重故障经验,即使这样,还是导致了所有镜像文件损坏,包括SNN上的镜像文件,所以定期备份一个可用的副本还是很有必要的。
推荐指数:★★★★★
推荐理由:Cloudera3uX和Apache1.0的NN单点问题是大家最头痛问题之一,多些准备,少许痛苦。
8. 使用firewall阻止坏人进入
Hadoop的安全控制非常简单,只包含简单的权限,即只根据客户端用户名,决定使用权限。它的设计原则是:“避免好人做错事,但不阻止坏人做坏事”。
如果你知道某台NN的IP和端口,则可以很轻松获取HDFS目录结构,并通过修改本机机器用户名伪装成HDFS文件所属owner,对该文件进行删除操作。
通过配置kerberos,可以实现身份验证。但很多管理员使用更简单有效的办法——通过防火墙对访问IP进行控制。
推荐指数:★★★★★
推荐理由:安全无小事,防范于未然。
9. 开启垃圾箱(trash)功能
我曾经犯下一个错误,在我加班非常累,大脑稍有混乱的时候,不小心删除执行了一个命令“hadoop fs -rmr /xxx/xxx”,没有删除提示,几TB的数据,一下子就没有了。简直让我崩溃,后悔莫及。这时你多希望有个时间机器可以让HDFS恢复到删除前的状态。
trash功能就是这个时间机器, 它默认是关闭的,开启后,被你删除的数据将会mv到操作用户目录的".Trash"文件夹,可以配置超过多长时间,系统自动删除过期数据。这样一来,当操作失误的时候,可以把数据mv回来。开启垃圾箱步骤如下:
vi core-site.xml ,添加下面配置,value单位为分钟。
&property&
&name&fs.trash.interval&/name&
&value&1440&/value&
&/property&
笔者 在CDH3u4下不用重启Namenode就可以生效。开启垃圾箱后,如果希望文件直接被删除,可以在使用删除命令时添加“–skipTrash” 参数,如下:
hadoop fs –rm –skipTrash /xxxx
推荐指数:★★★★★
推荐理由:想要时间机器吗?
10. 去社区寻找帮助
Hadoop是一个非常优秀的开源项目,但它仍存有很多尚未解决的问题,诸如,NN,JT单点问题,JT挂死问题,Block在小文件下汇报效率低下等问题。此时可以通过如下渠道找到可以帮助你的人,笔者几次集群严重故障都是通过Cloudera公司的google user group直接获得几位 committer的帮助。通常前一天提问,第二天就会有反馈。下面是两个能够帮助的你的社区,当然你也可以帮助其他人:
Hadoop-Impala优化十大指导原则和最佳实践
Hadoop:CCAH及CCA系列认证
Hadoop渐进七:Hadoop管理工具
hadoop 2.6中管理界面
hadoop_4 : Hadoop的管理
Hadoop——管理配置(集群间切换)。
Hadoop的状态监视和管理工具(较详细版)
Hadoop的资源管理——Yarn初探
hadoop集群管理——配置文件
没有更多推荐了,
(window.slotbydup=window.slotbydup || []).push({
id: '5865575',
container: s,
size: '300,250',
display: 'inlay-fix'

我要回帖

更多关于 做数独的技巧 的文章

 

随机推荐