zoukankan      html  css  js  c++  java
  • Hadoop学习4--安装Hadoop

    首先献上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编辑好累。

     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 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步起了作用,后续继续观察。

  • 相关阅读:
    Leetcode Substring with Concatenation of All Words
    Leetcode Divide Two Integers
    Leetcode Edit Distance
    Leetcode Longest Palindromic Substring
    Leetcode Longest Substring Without Repeating Characters
    Leetcode 4Sum
    Leetcode 3Sum Closest
    Leetcode 3Sum
    Leetcode Candy
    Leetcode jump Game II
  • 原文地址:https://www.cnblogs.com/xyang/p/4905355.html
Copyright © 2011-2022 走看看