Hadoop安装手记(ubuntu环境)

Ubuntu安装hadoop手记

大二那年买了本关于大数据系统搭建的指导书,刚刚开始尝试没多久就开学了,于是hadoop搭建到一半就停了。
过了几个学期,刚刚好遇上大数据技术的选修课,老师让我们帮忙在windows上安装hadoop,遇到的坑贼多,我和几个同学在实验室折腾了很久也还是有connection refuce的报错。才想起了之前在虚拟机上创建的废弃hadoop集群,于是又捡起了这几台机子,并慢慢摸索回之前的进度直到安装完成。

- 过程总览

ubuntu上完整分布式的安装过程比单机安装过程要稍微复杂一点,首先要准备三台机器(一台master,两台slave,这里使用VMware虚拟机),配置要在三台机子上都执行一遍。
在准备好机器之后,分为前期准备和正式安装两个步骤,最后是运行和检测阶段:
前期准备:
1.需要在各台机器上创建hadoop组和用户,并且给组和用户授予和原来用户一样的权限(用户运行sudo与修改/usr/或/etc/等路径下的文件
2.需要在各台机器上配置相同版本的jdk(为了方便,此处把jdk的安装路径都配置到相同的路径
3.在各台机器上修改配置文件,使机器被命名为master与slave01/02等语义化的名字,并能像localhost一样被访问到
4.配置ssh登陆的密匙支持登陆,并让master能够免密码访问两个slave节点
正式安装:
1.先在master下载hadoop
2.master下配置hadoop/etc/hadoop下的配置文件
3.将在master配置好的hadoop文件夹复制到slave中
运行和检测:
1.格式化
2.jps

前期准备

  • 创建hadoop用户和用户组
    1.命令$ sudo addgroup hadoop 可以用于创建hadoop用户组由于这一步在之前已经添加好了,输入命令后会提示the group hadoop already exist,可以通过cat /etc/group查看所有的用户,运行后可以在列表中看到hadoop:x:1001:的字样表示hadoop已经存在
    2.命令$ sudo adduser ingroup hadoop hadoop用于创建hadoop用户组下的hadoop用户同样由于我在之前的操作中已经完成了这一步,我得到的提示是The user hadoop already exists.如果想查看组hadoop下的用户的话可以用命令cat /etc/passwd来查询,此命令下会返回一堆的组和用户,这里,组hadoop下面的是hadoop:x:1001:1001::/home/hadoop:,根据网上的说法,这里每行用冒号隔开,然后1001 是组id,后面可以看到hadoop用户在home文件夹下面 )
    3.给hadoop用户添加权限此处通过修改/etc/sudoers文件来修改hadoop用户的权限:$ sudo gedit /etc/sudoers可以用于打开文件/etc/sudoers,打开了文件之后,直接在root ALL=(ALL:ALL) ALL下面添加一行hadoop ALL=(ALL:ALL) ALL就可以让用户hadoop拥有和root一样的权限了)
    在运行sudo输入密码后,如果遇到授权不成功的情况可以参考以下解决方案:此时若遇到hadoop is not in the sudoers file. This incident will be reported.则是hadoop用户权限不够的问题,可以先进入su用户,再修改sudoers文件:先通过gedit /etc/sudoers去sudoers中hadoop的权限。如果还是遇到su: Authentication failure报错的话就将用户切换会原来的非hadoop用户,在那里修改sudoers文件(即在里面root下面加hadoop ALL=(ALL:ALL) ALL)之后再切换回hadoop用户
  • 安装配置java
    首先来说一下怎么测试java是否安装成功吧,如果打开命令行输入java -version能够看到jdk的版本,那么电脑上已经安装好了java,可以跳过这一步。
    如果还没有安装好java,那么根据下面的步骤,就可以逐步安装了:
    1.首先是下载jdk,jdk很容易可以从官网下载,只要对应到电脑版本就好了( * 通过命令echo $JAVA_HOME可以找到jdk的摆放路径* )
    2.在usr下面创建一个放置jdk的目录,此处用sudo mkdir /usr/lib/java
    在usr的lib下创建java文件夹(sudo rm -rf+路径,可用于删除文件夹)
    3.将解压后的jdk文件夹移到新创建的java文件夹下面:先进入Downloads目录,然后用$ sudo mv jdk-8u161-linux-x64-demos.tar.gz /usr/lib/java
    移动压缩文件到新创建的java文件夹下。
    4.进入创建的java文件夹,一般用命令tar -zxvf+压缩包名可以解压文件,但是此处已经把压缩包放到了usr文件夹下,需要添加sudo才有权限解压(这里将jdk 用mv命令改名为jdk(当不存在jdk文件夹的时候才能达到改名效果) )
    5.接下来就是配置环境变量:其中一种环境变量的配法是将jdk的位置记录在/etc/profile文件下面,所以我们用sudo gedit /etc/profile打开并修改profile文件(将环境变量记录在profile有一个不好的地方:可能会遇到每次新开一个命令行都要重新source /etc/profile 激活|解决方法是在~/.bashrc里面加一句source /etc/profile,然后记得source ~/.bashrc),在文件中添加
    export JAVA_HOME=/usr/lib/java/jdk
    export JRE_HOME=$JAVA_HOME/jre
    export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
    export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
    其中JAVA_HOME后面的是jdk放置的位置,后面的JRE_HOME是jdk文件夹下面的jre文件夹路径,剩下两个基本上复制粘贴的就好了。
    6.最后就是用source /etc/profile让profile中的配置生效,java -version查看是否安装成功(此时echo $JAVA_HOME可以看到jdk安装的位置)
    三台机子的java版本要一样,若有一台机子java版本不一样可以参考一下解决方法:
    1.首先需要去除原本的JAVA_HOME: 百度到,这一变量暂时知道有三个可能的地方(1. ~/.bashrc 2./etc/profile 3. /etc/environment),通过echo $JAVA_HOME可以看到之前记录的JAVA_HOME的记录。所以第一步,我们需要进入这三个文件排查之前的JAVA_HOME到底写在了哪一个里面(另外,如果之前是用yum装的,那么应该就在~/.bashrc里面)。找到所在文件上之后,我们把之前写的JAVA_HOME变量注释掉或者删除掉。推出之后记得要用source+文件名的命令激活修改后的内容
    2.删除了之前配置的环境变量和jdk的文件夹之后,便可以按照以上步骤重新安装jdk
  • 机器名和地址(一台master,两台slave)
    1.储存机器名的文件也在/etc/中,利用$ sudo gedit /etc/hostname就可以修改名字了(其中一台改名为master另外两台改成slave0和slave1),重启生效
    2.在机器中记录其他两台机子的ip地址(关于ip地址,一般都是记录在/etc/hosts文件中,平时之所以在浏览器上输入“localhost”可以转到127.0.0.1也是因为被记录在了这个文件里面,所以得将另外两台机子的ip加在这个文件里面),此前先到其他两台机器里面利用$ ifconfig查看本机的ip地址inet addr:后面的就是IP地址。
    记录下master,slave0,slave1的ip地址,输入$ sudo gedit /etc/hosts进入hosts文件,添加三台机器的ip地址,如下
    这里写图片描述
    网上下载的示意图(namenode对应的是master,datanode1/2分别对应slave01/02)
  • *安装ssh服务
    在安装ssh之前要先安装openssh$ sudo apt-get install openssh-server(由于是在之前装过的此处还没有验证过)
    ssh密匙的创建有两种算法,一种是dsa一种是rsa,它们之间的区别可以到百度搜一下,具体的也没有考究过,此处采用dsa:
    1.创建dsa密匙:$ ssh-keygen -t dsa -P ""(创建rsa的命令为$ ssh-keygen -t rsa -P ""),回车运行后会在 ~/.ssh/文件夹下同时生成id_dsa和id_dsa.pub文件也就是说cd进入 ~/.ssh/文件夹就可以看到这两个文件
    2.利用dsa密匙创建授权文件authorized_keys:$ cp ~/.ssh/id_dsa.pub ~/.ssh/authorized_keys将 id_dsa.pub复制给authorized_keys得到授权文件
    (1)此处插入单机ssh测试,看看ssh能不能登陆本机,代码为:$ ssh localhost,输入$ exit即可退出。
    此时已经可以通过ssh登陆其他机子了,方法如下:进入~/.ssh/,利用命令ssh masterslave01/02已经在/etc/hosts中记录过,输入密码后即可登陆(exit退出)
    3.让master节点能够免密码登陆两台slave:此处需要让两台slave都有master的密匙,此处先进入~/.ssh,然后用scp master:~/.ssh/id_dsa.pub ./master_dsa.pub将master中的id_dsa.pub密匙复制到slave01/02中的~/.ssh/文件夹下。通过cat master_dsa.pub >> authorized_keys将复制过来的master_dsa.pub写到authorized_keys中。
    回到master,打开命令行就可以免密码用ssh slave01登陆slave01了(exit退出)

正式安装

  • 下载hadoop
    之前已经下载好了hadooop-2.7.1.tar.gz(虚拟机好像不支持从一台机器把文件复制去另一台虚拟机,我采取的办法是:先将压缩包copy到本机,再从本机复制去另一台虚拟机。
  • 移动及解压
    用命令$ sudo cp hadoop-2.7.1.tar.gz /usr/local/把压缩包移到/usr/local/下面,进入/usr/local/
    $ sudo tar -zxvf hadoop-2.7.1.tar.gz解压hadoop压缩包
    用命令$ sudo mv hadoop-2.7.1 hadoop将文件夹的名字改成hadoop*不改也行,只不过这样看起来比较简介*
    $ sudo chown -R hadoop:hadoop hadoop将该hadoop文件夹的属主用户设为hadoop
  • 修改配置文件
    此版本的hadoop配置文件在hadoop/etc/hadoop文件夹下,进入:

    • gedit hadoop-env.sh 打开并修改文件内的内容:
      找到export JAVA_HOME=${JAVA_HOME}${JAVA_HOME}改成本机jdk路径(通过echo $JAVA_HOME即可看到
    • $ gedit core-site.xml打开文件并作修改:
      在configuration标签中间添加
      <property>
      <name>fs.default.name</name>
      <value>hdfs://master:9000</value>
      </property>
    • $ gedit mapred-site.xml.template打开文件:
      在configuration标签中添加
      <property>
      <name>mapred.job.tracker</name>
      <value>hdfs://master:9001</value>
      </property>
    • $ gedit hdfs-site.xml打开文件:
      在/usr/local/hadoop/下创建hdfs文件夹,在hdfs下面创建两个文件夹data和name
      在configuration标签中添加
      <property>
      <name>dfs.namenode.name.dir</name>
      <value>/usr/local/hadoop/hdfs/name</value>
      </property>
      <property>
      <name>dfs.datanode.data.dir</name>
      <value>/usr/local/hadoop/hdfs/data</value>
      </property>
      <property>
      <name>dfs.replication</name>
      <value>3</value>
      </property>
      <property>
      <name>dfs.namenode.secondary.http-address</name>
      <value>master:9001</value>
      </property>
      <property>
      <name>dfs.webhdfs.enabled</name>
      <value>true</value>
      </property>
    • $ gedit slaves打开文件:
      添加两行slave01与slave02,slave01与slave02的地址已经在/etc/hosts中记录
  • 将配置好的hadoop文件复制到slave机器上
    在scp的过程中遇到了报错,暂时没有解决,所以暂时采取压缩后先拉到本机再复制去虚拟机的解决方案(移动到相同的位置$ sudo mv hadoop /usr/local
    $ sudo chown -R hadoop:hadoop hadoop修改权限

开启工作

  • 格式化namenode
    在master节点上打开命令行,进入/usr/local/hadoop/ 输入命令$ bin/hadoop namenode -format

    在2.7版本提示说Use of this script to execute hdfs command is deprecated.
    Instead use the hdfs command for it.
    所以如果是2.7版本的话就进入bin目录 用hdfs namenode -format来格式化namenode

  • 启动hadoop
    在master节点上进入hadoop的sbin运行$ start-all.sh
    -检验
    master命令行输入jps,返回
    10160 NameNode
    10296 DataNode
    10907 Jps
    10510 SecondaryNameNode
    slave输入jps,返回
    5651 NodeManager
    5558 DataNode
    5863 Jps
    或者在http://master:50070/上看看有没有Hadoop页面
    同样2.7版本也是提示This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
    所以这里也改成在sbin下用./start-dfs.sh启动hadoop

  • 关闭hadoop
    关闭的话在2.7版本也用stop-dfs.sh


参考网址https://jingyan.baidu.com/article/e75057f2a62c8aebc91a89b3.html
参考网址http://blog.csdn.net/zstu_zlj/article/details/51027053
参考网址http://blog.csdn.net/antgan/article/details/52067441

猜你喜欢

转载自blog.csdn.net/konroy/article/details/79590641