你好,游客 登录 注册 搜索
背景:
阅读新闻

Hadoop学习4--安装Hadoop

[日期:2015-10-26] 来源:博客园精华区  作者: [字体: ]

首先献上Hadoop下载地址:

http://apache.fayea.com/hadoop/core/

选择相应版本,点一下,直接进行http下载了。

对原来写的一篇文章,相当不满意,过于粗糙了,于是删除重新再来。言归正传:

题前说明:

我一共三台机器,机器名分别是:

master

slave1

slave2

登录名统一是:master

我先在master机器上执行以下操作:

一、解压缩

这里需要说明下,根据网上的教程,解压缩后,把文件copy到/usr/目录下。在master机器启动的时候,一直提示,对于slave1和slave2机器操作无权限,类似于下面的提示:

slave2: /usr/hadoop/sbin/hadoop-daemon.sh: line 178: /usr/hadoop/logs/hadoop-master-datanode-slave2.out: Permission denied

个人分析,/usr目录的所有者是root,而我安装hadoop的账户是master(ps:这个名字起的有点糟糕,和主机器名重了),这样,尽管里面的hadoop目录的所有者是master,也访问失败。于是我把hadoop目录整个移到了~/work文件夹下(work是自己建的目录)。所以,个人建议,还是把工作目录建在个人目录下,比较不容易出现权限类的问题,当然,仅仅针对我这种linux新手来说的。

tip:

解压缩命令:tar -zxvf hadoop-2.7.0.tar.gz

解压出来的文件是hadoop-2.7.0

copy命令:cp -r hadoop-2.7.0 ~/work/hadoop 这里直接重命名为hadoop

二、创建工作文件夹

一共三个,我建在了~/master/hadoop/这个文件夹下,便于管理:

附命令:

cd ~/master/hadoop

mkdir tmp

mkdir -p dfs/name

cd dfs

mkdir data

三、重头戏,配置

从教程里看到一共有以下7个文件,目前还不了解他们的作用,后续补充:

~/work/hadoop/etc/hadoop/hadoop-env.sh

~/work/hadoop/etc/hadoop/yarn-env.sh

~/work/hadoop/etc/hadoop/slaves

~/work/hadoop/etc/hadoop/core-site.xml

~/work/hadoop/etc/hadoop/hdfs-site.xml

~/work/hadoop/etc/hadoop/mapred-site.xml

~/work/hadoop/etc/hadoop/yarn-site.xml

逐个解决:

1、vi ~/work/hadoop/etc/hadoop/hadoop-env.sh

查找JAVA_HOME,命令是 /export JAVA_HOME和?export JAVA_HOME一个向下查找,一个向上查找。

找到后,把值改为你的jdk的安装目录,我的在系列文章第二篇里讲过。路径是:/usr/lib/jvm/jdk1.8.0_60

需要注意的是,这个配置不用加引号,完整状态是这样:export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_60

2、vi ~/work/hadoop/etc/hadoop/yarn-env.sh

配置内容同1,略。

3、vi ~/work/hadoop/etc/hadoop/slaves

把作为datanode的机器名加上,我这里是两台机器:

slave1

slave2

4、vi ~/work/hadoop/etc/hadoop/core-site.xml

这里要吐槽一下,gedit命令不能用,这个vi编辑好累。

1 <configuration>
 2        <property>
 3                 <name>fs.defaultFS</name>
 4                 <value>hdfs://master:8020</value>
 5        </property>
 6        <property>
 7                 <name>io.file.buffer.size</name>
 8                 <value>131072</value>
 9         </property>
10        <property>
11                <name>hadoop.tmp.dir</name>
12                <value>file:/home/master/hadoop/tmp</value>
13                <description>Abase for other temporary   directories.</description>
14        </property>
15         <property>
16                <name>hadoop.proxyuser.master.hosts</name>
17                <value>*</value>
18        </property>
19        <property>
20                <name>hadoop.proxyuser.master.groups</name>
21                <value>*</value>
22        </property>
23 </configuration>

View Code

tip:

1)第三个节点value,是我在上面步骤二创建的目录之一,/home/master/hadoop/tmp

2)第四、五节点,name里,有我登录用户名master,你使用自己的名字替换即可。

5、vi ~/work/hadoop/etc/hadoop/hdfs-site.xml

1 <configuration>
 2        <property>
 3                 <name>dfs.namenode.secondary.http-address</name>
 4                <value>master:9001</value>
 5        </property>
 6      <property>
 7              <name>dfs.namenode.name.dir</name>
 8              <value>file:/home/master/hadoop/dfs/name</value>
 9        </property>
10       <property>
11               <name>dfs.datanode.data.dir</name>
12               <value>file:/home/master/hadoop/dfs/data</value>
13        </property>
14        <property>
15                <name>dfs.replication</name>
16                <value>3</value>
17         </property>
18         <property>
19                  <name>dfs.webhdfs.enabled</name>
20                   <value>true</value>
21          </property>
22 </configuration>

View Code

tip:

1)第二、三个节点里的value值,是在步骤二创建的另外两个工作目录

2)还有个节点value值是3,代表目前我搭建的是由三台机器组成的集群。

6、vi ~/work/hadoop/etc/hadoop/mapred-site.xml

1 <configuration>
 2           <property>                                                                  <name>mapreduce.framework.name</name>
 3                 <value>yarn</value>
 4            </property>
 5           <property>
 6                   <name>mapreduce.jobhistory.address</name>
 7                   <value>master:10020</value>
 8           </property>
 9           <property>
10                 <name>mapreduce.jobhistory.webapp.address</name>
11                 <value>master:19888</value>
12        </property>
13 </configuration>

View Code

没有什么可说的,copy自网络,且不需要修改。

7、vi ~/work/hadoop/etc/hadoop/yarn-site.xml

1 <configuration>
 2         <property>
 3                <name>yarn.nodemanager.aux-services</name>
 4                <value>mapreduce_shuffle</value>
 5         </property>
 6         <property>                                                                
 7 <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
 8                <value>org.apache.hadoop.mapred.ShuffleHandler</value>
 9         </property>
10         <property>
11                <name>yarn.resourcemanager.address</name>
12                <value>master:8032</value>
13        </property>
14        <property>
15                <name>yarn.resourcemanager.scheduler.address</name>
16                <value>master:8030</value>
17        </property>
18        <property>
19             <name>yarn.resourcemanager.resource-tracker.address</name>
20              <value>master:8031</value>
21       </property>
22       <property>
23               <name>yarn.resourcemanager.admin.address</name>
24                <value>master:8033</value>
25        </property>
26        <property>
27                      <name>yarn.resourcemanager.webapp.address</name>
28                <value>master:8088</value>
29        </property>
30 </configuration>

View Code

Ctrl+C+V即可。

至此,主要配置工作已经完成,如果说,其他机器还要重复步骤一到步骤三,相信会直接崩溃,想想吧,大公司那几千台的机器。

幸好,咱们有跨机器拷贝方案:

scp ~/work/hadoop master@slave1:~/work/

scp ~/work/hadoop master@slave2:~/work/

两个命令搞定,是不是很简单?

后续我们在修改各种配置文件的时候,都可以考虑使用这个命令。

四、接下来要逐台机器配置环境变量,也就是PATH

vi /etc/enviroment (这个单词太长,记不住,只要输入到en的时候按Tab,就会自动补全了)

在打开的编辑器中,PATH值结尾处,加上如下内容:

/home/master/work/hadoop/bin:/home/master/work/hadoop/sbin

再提醒一句,是每台机器都执行,貌似还可以用这个方式来做这个工作:

PATH=“$PATH”:/home/master/work/hadoop/bin:/home/master/work/hadoop/sbin

五、收获的季节来了,开始验证:

tip:以下步骤只需要在mater机器执行。

1、格式化文件系统hdfs:这个相信Hadoop实战这本书误导了每一个新手:

原命令是:bin/Hadoop NameNode -format

执行直接报错:

Error: Could not find or load main class NameNode

其实就是大小写没处理好,如下命令正确:

bin/hadoop namenode -format

2、启动:/bin/start-all.sh

如果你真按这个命令来,那就中招了。

吐槽一下,是我买的这本书太老呢还是Hadoop变化太快?

现在,大部分命令都在/sbin里面,崩溃不?

所以,要在这个目录下执行启动命令:

sbin/star-all.sh

执行这个命令,会提醒过时还是什么的,那么也可以按他建议的来执行,无伤大雅:

sbin/start-dfs.sh

3、检查是否成功

看着是都起来了,不过在验证的时候,出现了问题:

http://localhost:50030打不开,目前没找到原因,有人说是不使用这个端口了,但是现在尚未看到官方的东西,不能下结论。

http://localhost:50070可以打开页面

4、看来靠这种方式验证不是很靠谱,于是查到用下列方式: jps 命令(建议启动后执行一次这个检查)

如果你执行jps提示没有,那是因为你的jdk替换了系统原有的jdk,路径变了,而这个变化没在PATH里维护,所以,不是想在哪都能执行成功的,两种使用方式:

1)、进到jdk安装目录下执行:jps

2)、配置PATH:PATH=“$PATH”/usr/lib/jvm/jdk1.8.0_60/bin

推荐这个,会麻烦一次,以后各种方便,其中$PATH 后的内容是我的jdk安装路径。

共有6个服务。

再次在master执行jps,得到以下结果:

3937 NameNode

4778 NodeManager

4300 SecondaryNameNode

5119 Jps

在slave1,和slave2分别执行jps,得到以下结果:

5158 DataNode5243 Jps

至此,折腾了好久好久的安装学习,终于大功告成,必须庆祝下,晚上去小酌一杯!

以下是安装过程验证中遇到的一个问题,仅作参考,不一定每个人都能遇到:

排查解决步骤:

1)http://localhost:50070 可以看到一些状态、日志

a.Overview:是dfs的健康状态。

b.Utilities下的Logs:查看Hadoop启动及运行的日志

2015-09-02 01:17:37,962 WARN org.apache.hadoop.hdfs.server.common.Storage: java.io.IOException: Incompatible clusterIDs in /usr/local/hadoop/data1: namenode clusterID = CID-c7970b3b-e127-4054-ba7b-7736183904d2; datanode clusterID = CID-4b42cd9e-35ec-4194-b516-d4de4055c35b

2015-09-02 01:17:37,977 INFO org.apache.hadoop.hdfs.server.common.Storage: Lock on /usr/local/hadoop/data2/in_use.lock acquired by nodename 6889@ubuntu

2015-09-02 01:17:37,978 WARN org.apache.hadoop.hdfs.server.common.Storage: org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /usr/local/hadoop/data2 is in an inconsistent state: cluster Id is incompatible with others.

2015-09-02 01:17:37,980 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to localhost/127.0.0.1:9000. Exiting. 

java.io.IOException: All specified directories are failed to load.

at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:477)

at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1387)

at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1352)

at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:316)

at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:228)

at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:852)

at java.lang.Thread.run(Thread.java:745)

提醒连个cid不一致,原因是Hadoop启动后,在使用格式化namenode,会导致datanode和namenode的clusterID不一致

这个ID的位置这么找:

先找到/etc/hadoop/hdfs-site.xml

里面有datanode的路径,在那个路径下找:/current/VERSION文件,即可修改clusterID

我是这样处理的,我把配置文件改为完全按教程的要求,如下,也消除了上面的错误:

<configuration>

<property> 

<name>dfs.replication</name> 

<value>1</value> 

</property> 

</configuration>

执行jps

显示正常了:

root@ubuntu:/usr/lib/jvm/jdk1.8.0_60/bin# jps

8736 NameNode

9141 ResourceManager

9926 DataNode

8983 SecondaryNameNode

10156 Jps

10125 GetConf

更详细的验证当前的各个服务的状态方法:

http://www.aboutyun.com/thread-7712-1-1.html





收藏 推荐 打印 | 录入:elainebo | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款