前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hadoop学习4--安装Hadoop

Hadoop学习4--安装Hadoop

作者头像
小端
发布2018-04-16 10:50:12
1.1K0
发布2018-04-16 10:50:12
举报
文章被收录于专栏:java架构师java架构师

首先献上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

二、创建工作文件夹

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

附命令:

cd ~/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编辑好累。

代码语言:javascript
复制
 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>

tip:

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

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

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

代码语言:javascript
复制
 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>

tip:

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

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

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

代码语言:javascript
复制
 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>

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

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

代码语言:javascript
复制
 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>

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 DataNode 5243 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

tip:

重新格式化重启后,发现namenode启动失败

再次格式化,再次重启,发现所有datanode启动失败

解决办法:

1、删除了步骤二创建的文件夹里产生的内容,具体是dfs/data里的内容

2、删除了日志文件

不清楚原因,初步估计是第1步起了作用,后续继续观察。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-10-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档