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

  • 相关阅读:
    小程序登陆流程解析
    小程序连续点击bug解决
    小程序开发文本空格的添加
    微信小程序转支付宝小程序
    支付宝小程序开发入门
    微信小程序开发入门
    text属性
    小程序横向滚动
    will-change
    Docker 系列二(操作镜像).
  • 原文地址:https://www.cnblogs.com/xyang/p/4905355.html
Copyright © 2011-2022 走看看