cloudera 作为一家专业的大数据解决方案公司,基于 apache hadoop 推出了自己的 hadoop 版本,致力于打造自己的大数据生态圈。cloudera 版本的 hadoop 无论是从稳定性和易用性上来说都要比 apache 开源的出色不少,因此越来越多的公司选择了 cloudera 开源的 hadoop 或者采购 cloudera 的商业大数据解决方案。
今天咱们就来看看如何手动安装 cloudera hadoop,体验新一代的hadoop大数据平台。(PS:当然了你也可以选择使用它们家提供的管理软件来安装、部署,这不在本文的讨论范畴。)
本文选择的是 cdh 4.7,该版本的下载请看这里:
http://archive.cloudera.com/cdh4/cdh/4/
cdh 5 下载请见:
http://archive.cloudera.com/cdh5/cdh/5/
192.168.1.111 host01 NameNode、ResourceManager
192.168.1.112 host02 SecondaryNameNode、DataNode、NodeManager
192.168.1.113 host03 DataNode、NodeManager
cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=host01
PS:
如果你的 hosts 已经做了映射,可以不必修改。
上面的方案是永久生效的,但需要重启后生效。如果想临时生效,可以执行 hostname urname
192.168.1.111 host01
192.168.1.112 host02
192.168.1.113 host03
步骤及注意事项请参见:http://my.oschina.net/leejun2005/blog/285795
PS: host01 也需要对自己做免密码登录,如果有防火墙也请关闭:service iptables stop
fs.defaultFS指定NameNode文件系统,开启回收站功能,fs.trash.interval 单位为分钟,0 表示关闭回收站。
vi hadoop-2.0.0-cdh4.7.0/etc/hadoop/core-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!--fs.default.name for MRV1 ,fs.defaultFS for MRV2(yarn) --> <property> <name>fs.defaultFS</name> <!--这个地方的值要和hdfs-site.xml文件中的dfs.federation.nameservices一致--> <value>hdfs://host01</value> </property> <property> <name>fs.trash.interval</name> <value>0</value> </property> <property> <name>fs.trash.checkpoint.interval</name> <value>10080</value> </property> <!-- web ui 页面,想通过application id 查看作业详情或者 hdfs 路径,报错没有权限: --> <!-- 你需要修改 value 值为正确的hadoop属主用户 --> <property> <name>hadoop.http.staticuser.user</name> <value>root</value> </property> </configuration>
该文件主要设置数据副本保存份数,以及namenode、datanode数据保存路径以及http-address。
dfs.namenode.name.dir指定NameNode存储meta和editlog的目录,
dfs.datanode.data.dir指定DataNode存储blocks的目录,
dfs.namenode.secondary.http-address指定Secondary NameNode地址。
开启WebHDFS。
vi hadoop-2.0.0-cdh4.7.0/etc/hadoop/hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/storm/soft/hadoopData/hadoop-${user.name}</value> </property> <property> <name>dfs.namenode.http-address</name> <value>host01:50070</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>host02:50090</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>
vi hadoop-2.0.0-cdh4.7.0/etc/hadoop-mapreduce1-secure/masters
host01
host02
vi hadoop-2.0.0-cdh4.7.0/etc/hadoop/slaves
host02
host03
配置使用yarn计算框架,以及jobhistory的地址。
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>mapreduce.shuffle.port</name> <value>8017</value> </property> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>host01:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>host01:19888</value> </property> </configuration>
主要配置resourcemanager地址以及yarn.application.classpath
(这个路径很重要,要不然集成hive时候会提示找不到class)
注意:如果你用的是 CDH 5,那么 yarn.nodemanager.aux-services 的属性值应该改为 mapreduce_shuffle
否则 nodemanager 会抛异常:
2013-10-29 11:32:21,523 FATAL org.apache.hadoop.yarn.server.nodemanager.NodeManager: Error starting NodeManager java.lang.IllegalArgumentException: The ServiceName: mapreduce.shuffle set in yarn.nodemanager.aux-services is invalid.The valid service name should only contain a-zA-Z0-9_ and can not start with numbers
<?xml version="1.0"?> <configuration> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>host01:8031</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>host01:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>host01:8030</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>host01:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>host01:8088</value> </property> <property> <description>Classpath for typical applications.</description> <name>yarn.application.classpath</name> <value>$HADOOP_CONF_DIR,$HADOOP_COMMON_HOME/share/hadoop/common/*, $HADOOP_COMMON_HOME/share/hadoop/common/lib/*, $HADOOP_HDFS_HOME/share/hadoop/hdfs/*,$HADOOP_HDFS_HOME/share/hadoop/hdfs/lib/*, $YARN_HOME/share/hadoop/yarn/*,$YARN_HOME/share/hadoop/yarn/lib/*, $YARN_HOME/share/hadoop/mapreduce/*,$YARN_HOME/share/hadoop/mapreduce/lib/*</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce.shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.nodemanager.local-dirs</name> <value>/home/storm/soft/hadoopData/local</value> </property> <property> <name>yarn.nodemanager.log-dirs</name> <value>/home/storm/soft/hadoopData/logs</value> </property> <property> <description>Where to aggregate logs</description> <name>yarn.nodemanager.remote-app-log-dir</name> <value>/home/storm/soft/hadoopData/logs</value> </property> <property> <name>yarn.app.mapreduce.am.staging-dir</name> <value>/home/storm/soft/hadoopData/users</value> </property> </configuration>
vi hadoop-env.sh 和 yarn-env.sh 添加:
export JAVA_HOME=/opt/soft/jdk1.7.0_55
否则启动 start-dfs.sh 会报:Error: JAVA_HOME is not set and could not be found.
修改.bashrc环境变量,并将其同步到其他几台机器,并且最后需要 source .bashrc 或重登录。
在 .bashrc 的末尾插入以下变量,其中的具体路径根据你自己的环境去修改,请不要生搬硬套:
#-----------------------------hadoop ENV--------------------------------- export LANG=zh_CN.utf8 export JAVA_HOME=/opt/soft/jdk1.7.0_55 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JRE_HOME/lib export HADOOP_HOME=/home/storm/soft/hadoop-2.0.0-cdh4.7.0 export HADOOP_MAPRED_HOME=${HADOOP_HOME} export HADOOP_COMMON_HOME=${HADOOP_HOME} export HADOOP_HDFS_HOME=${HADOOP_HOME} export YARN_HOME=${HADOOP_HOME} export HADOOP_YARN_HOME=${HADOOP_HOME} export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop export HDFS_CONF_DIR=${HADOOP_HOME}/etc/hadoop export YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoop export PATH=$CLASSPATH:$HADOOP_HOME:.:$PATH:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin:$HIVE_HOME/bin alias hd="cd ~/soft/hadoop-2.0.0-cdh4.7.0" #-----------------------------hadoop ENV---------------------------------
至此,整个安装过程完毕。
第一次启动hadoop需要先格式化NameNode,该操作只做一次。当修改了配置文件中路径等核心属性时,需要重新格式化
cd hadoop-2.0.0-cdh4.7.0/sbin
hadoop namenode -format
在 host01 上启动hdfs:
start-dfs.sh
在 host01 上启动mapreduce:
start-yarn.sh
在 host01 上启动historyserver:
mr-jobhistory-daemon.sh start historyserver
PS:或者直接一起来:start-all.sh
不过脚本会提示你该脚本已被废弃,建议你按上述步骤一步步的来。
查看MapReduce
http://host01:8088/cluster
查看节点
http://host01:8042/node
检查集群进程
storm@host01 192.168.1.111 11:10:58 ~/soft/hadoop-2.0.0-cdh4.7.0/etc/hadoop > jps 2678 NameNode 2983 ResourceManager 8419 Jps 3446 JobHistoryServer storm@host01 192.168.1.111 11:15:37 ~/soft/hadoop-2.0.0-cdh4.7.0/etc/hadoop > storm@host02 192.168.1.112 11:15:53 ~/soft/hadoop-2.0.0-cdh4.7.0/sbin > jps 9443 Jps 5218 DataNode 5537 NodeManager 5377 SecondaryNameNode storm@host02 192.168.1.112 11:21:28 ~/soft/hadoop-2.0.0-cdh4.7.0/sbin >
你可用自带的 example 测试或者看这里:
http://my.oschina.net/leejun2005/blog/83058
(1)问题:DataNode 节点只有 DataNode 进程起来了,却不见 NodeManager 进程
查看节点上的相应日志报错:
2014-07-01 11:43:19,674 ERROR org.apache.hadoop.yarn.service.CompositeService: Error starting services org.apache.hadoop.yarn.server.nodemanager.containermanager.ContainerManagerImpl org.jboss.netty.channel.ChannelException: Failed to bind to: 0.0.0.0/0.0.0.0:8080
很明显属于端口占用问题,关键是 8080 端口可能已经被 storm、hbase、tomcat、jetty 等应用占用了(netstat -tlnp|grep 8080),如何做到不修改前面的应用端口而修改 NodeManager 的侦听端口呢?如果你仔细看过 2.6.2 小节就知道 mapreduce.shuffle.port 是正解。
这里我要留一个问题:为什么是这个属性?这个属性和上面的报错有什么关系呢?如果你了解 mapreduce 的原理与架构相信这个问题不难回答。
(2)datanode无法启动的问题,报错如下:
2013-06-08 17:57:27,519 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for block pool Block pool BP-770817654-172.17.50.119-1370685416301 (storage id DS-803461661-172.17.50.119-50010-1370681848198) service to localhost/127.0.0.1:9000 java.io.IOException: Incompatible clusterIDs in /usr/hadoop/tmp/dfs/data: namenode clusterID = CID-cd47cf1e-0f81-41b0-97df-7407db9f1fa5; datanode clusterID = CID-0462092f-2740-40a4-bf96-246be2efc49f at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:390) at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:190) at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:218) at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:851) at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:822) at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:279) at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:218) at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:661) at java.lang.Thread.run(Thread.java:619)
通过在网上查找资料得知:每次namenode format会重新创建一个namenodeId, 而tmp/dfs/data下包含了上次format下的id, namenode format清空了namenode下的数据, 但是没有晴空datanode下的数据,导致启动时失败,所要做的就是每次fotmat前,清空tmp一下 的所有目录.
结果:删除/usr/hadoop/tmp下的所有内容即可。
http://www.cnblogs.com/agilework/archive/2013/06/08/3127286.html
Port 8080 In YARN http://qnalist.com/questions/107490/port-8080-in-yarn
Cloudera Documentation http://www.cloudera.com/content/support/en/documentation.html
手动安装Hadoop Cloudera CDH4.2版本 http://hao3721.iteye.com/blog/1914088
手动安装cloudera cdh4.2 hadoop + hbase + hive(一) http://blog.csdn.net/qiaochao911/article/details/8915976
Hadoop YARN安装部署初探 http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-install/
Hadoop MapReduce Next Generation - Cluster Setup
http://archive-primary.cloudera.com/cdh4/cdh/4/hadoop/hadoop-project-dist/hadoop-common/ClusterSetup.html
Ports Used by Components of CDH 5
http://www.cloudera.com/content/cloudera/en/documentation/core/latest/topics/cdh_ig_ports_cdh5.html