美文网首页数据科学家成长之路程序员大数据
Hadoop部署实践:菜鸟级安装入门经验

Hadoop部署实践:菜鸟级安装入门经验

作者: 老树之见 | 来源:发表于2016-02-27 00:24 被阅读2895次
    hadoop部署实践.jpg

    文/胡晨川
    我是Linux外行,hadoop外行,java更外行,Scala听也没听过,在我脑海中,Spark一直只是我的英文名。但是,作为一名数据分析师,我怎么可以完全不了解大数据的应用呢?于是,完全是外行的我,不仅打算开始学习spark,还要将hive、pig、Hbase等都尝一尝。
    第一步,从hadoop开始!经过几天的尝试,配置好了虚拟机中的完全分布式hadoop,写成以下冗长的笔记。

    首先,是在自己的电脑上安装3个Linux系统的虚拟机

    我是Mac,装了vmware fusion。在另一台pc机上,装了vmware workstation。
    Linux我选择了ubuntu14。具体怎么把Linux装起来的不多说了,傻瓜式操作。

    配置Linux

    这部分分为三个部分:一是获得Linux的root权限;二是安装java;三是设置ssh设置。由于我是Linux文盲,所以将一些命令标注会择机写出来,便于我以后记忆。
    我配置的三台Linux机子分别命名为:master、slave1、slave2。未来hadoop中,master就是主节点,两台slave就是从节点。

    获取Linux中的root权限

    在ubuntu中打开命令终端窗口:control+alt+T
    自动补全命令:tab
    看帮助内容:--help

    先安装vim:sudo apt-get install vim
    然后输入:sudo vim /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf(vim需安装)
    在弹出的编辑框里输入:greeter-show-manual-login=true 保存关闭。
    为了给root设置密码,在终端中输入:sudo passwd root。
    关机重启在多出的登录框里输入root 和设置的密码!
    在刚修改完root权限自动登录后,发现开机出现以下提示:
    Error found when loading /root/.profile
    stdin:is not a tty
    …………
    解决方法:在终端中用命令gedit /root/.profile,打开文件后找到“mesg n”,
    将其更改为“tty -s && mesg n”。

    sudo:超级用户权限命令=root权限
    apt-get install:安装软件
    vim:vim是一个编辑器和gedit功能一样

    安装java

    创建安装java的文件夹:mkdir /usr/lib/java
    然后把下载好的java安装包放到这个目录里
    操作区域定位到java文件夹:cd /usr/lib/java
    解压安装包:tar -xvf jdk-8u73-linux-x64.gz
    修改环境变量:vim ~/.bashrc
    在bashrc文件中添加内容:
    export JAVA_HOME=/usr/lib/java/jdk1.8.0_73
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASS_PATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:$PATH
    执行生效命令:source ~/.bashrc
    查看java版本:java -version

    mkdir:创建文件夹命令
    cd:工作目录定位命令,经常与文件查看命令ls一起用
    tar -xvf:解压缩命令

    SSH设置

    安装ssh:apt-get install ssh
    安装rsync: apt-get install rsync
    创建ssh-key: ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
    将dsa.pub文件当中的内容追加到公钥中:cat ~/.ssh/id_dsa.pub >> /.ssh/authorized_keys
    authorized_keys得放在.ssh文件夹当中,并将id_dsa.pub里面的内容复制给authorized_keys
    启动ssh服务:ssh start
    验证服务是否正常启动:ps -e |grep ssh
    在slave机器下也要创建ssh-key: ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
    该命令执行后,会在root文件夹下出现.ssh文件夹,里面有key
    cat ~/.ssh/id_dsa.pub >> authorized_keys 这行代码至关重要,当输入ssh localhost 不需要密码时,说明免密码登录设置完成。

    完成master与slave之间的通信

    首先,要固定好master和slave的IP地址,千万不要选择动态匹配,你会奔溃的。
    接着,修改集群中的host配置文件
    打开命令:到文件夹中手动打开host文件或者输入:
    vim /etc/hosts
    添加:
    192.168.236.135 master
    192.168.236.134 slave1
    192.168.236.130 slave2
    关闭ubuntu的防火墙,使得ssh通讯能够进行:ufw allow ssh
    要使得master和slave之间实现免密码通信,还要把master机器中的id_dsa.pub 文件复制到slave机器的.ssh文件夹中,并命名为authorized_keys。我把slave的id_dsa.pub也互相加到了各自的authorized_keys当中。这样,在任何机器终端输入 ssh 机器名称,就能进入那台机器进行操作,比如:ssh slave1
    scp ~/.ssh/id_dsa.pub slave1@192.168.236.134:~/.ssh/authorized_keys
    scp ~/.ssh/id_dsa.pub slave2@192.168.236.130:~/.ssh/authorized_keys

    查看隐藏的文件,即以点开头的文件或文件夹:control+h
    scp:通过ssh进行跨机器间的复制命令
    cp:本地文件复制
    如何结束ping命令?control+c
    查看ip连接的属性:ifconfig或者nm-tool

    安装Hadoop

    提醒各位,不要去下载最新的hadoop-2.7.2等版本的进行安装,因为最新版本的中文参考文献不多,而且hadoop-2.x以后的版本和hadoop-1.x有很大不同。我开始安装了2.7.2版本,但是手头的资料都是机遇hadoop-1.2.1的,所以对于我这个菜鸟来说,配置单机版和伪分布式还勉强可以,但是完全分布式怎么都不成功,最后删了重新配置了1.2.1版本的。
    cd usr
    mkdir hadoop #在usr文件夹下创建Hadoop文件夹
    tar xzf hadoop-1.2.1.tar.gz #解压缩Hadoop安装文件
    cd /usr/hadoop/hadoop-1.2.1/conf
    vim hadoop-env.sh #将java的路径添加到Hadoop的配置文件当中
    文件中添加:export JAVA_HOME=/usr/lib/java/jdk1.8.0_73
    source hadoop-env.sh #使得文件修改生效
    vim ~/.bashrc #设置用户环境参数,使得Hadoop的命令和java命令能够在根目录下使用
    在文件中添加:
    export JAVA_HOME=/usr/lib/java/jdk1.8.0_73
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASS_PATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:/usr/hadoop/hadoop-1.2.1/bin:$PATH
    source ~/.bashrc #使修改生效
    hadoop version #查看hadoop的版本
    若能正确显示版本,则恭喜单机安装成功了!

    单机模式运行wordcount例子

    cp LICENSE.txt input #把license.txt复制到input文件夹当中
    cd .. #回到上一级目录
    hadoop jar hadoop-examples-1.2.1.jar wordcount input output #运行wordcount例子,结果放到output文件夹当中
    cat output/* #结果呈现
    单机模式的wordcount成功运行,第一个里程碑达成!~

    伪分布式Hadoop安装

    我们更进一步,来伪分布式架构。
    现在hadoop-1.2.1文件夹下创建一些文件夹:
    root@master:/usr/hadoop/hadoop-1.2.1# mkdir tmp
    root@master:/usr/hadoop/hadoop-1.2.1# mkdir hdfs
    root@master:/usr/hadoop/hadoop-1.2.1# mkdir hdfs/data
    root@master:/usr/hadoop/hadoop-1.2.1# mkdir hdfs/name
    root@master:/usr/hadoop/hadoop-1.2.1# ls

    对于伪分布式和完全分布式,都需要修改以下配置文件
    core-site.xml 主要是配置hdfs的地址和端口
    hdfs-site.xml 主要配置replication,理解为数据的备份
    mapred-site.xml 修改Hadoop的mapreduce的配置文件,主要是配置jobtracker的地址和端口

    cd conf #定位到conf文件夹下
    vim core-site.xml #进入编辑
    <configuration>
    <property>
    <name>fs.default.name</name>
    <value>hdfs://localhost:9000</value>
    </property>
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/usr/hadoop/hadoop-1.2.1/tmp</value>
    </property>
    </configuration>

    vim hdfs-site.xml
    <configuration>
    <property>
    <name>dfs.replication</name>
    <value>1</value>
    </property>
    <property>
    <name>dfs.name.dir</name>
    <value>/usr/hadoop/hadoop-1.2.1/hdfs/name</value>
    </property>
    <property>
    <name>dfs.data.dir</name>
    <value>/usr/hadoop/hadoop-1.2.1/hdfs/data</value>
    </property>
    </configuration>

    vim mapred-site.xml
    <configuration>
    <property>
    <name>mapred.job.tracker</name>
    <value>localhost:9001</value>
    </property>
    </configuration>
    通过以上配置完成了最简单的伪分布式配置。
    接下来做Hadoop的namenode格式化:
    root@master:/usr/hadoop/hadoop-1.2.1/conf# cd ~
    root@master:~# hadoop namenode -format

    启动Hadoop

    start-all.sh
    使用java自带的命令查询出所有的守护进程
    jps
    接下来使用Hadoop中的监控集群的web 页面查看运行情况:
    http://localhost:50030/jobtracker.jsp
    http://localhost:50060/tasktracker.jsp
    http://localhost:50070/dfshealth.jsp

    伪分布式平台下的wordcount例子

    在dfs中创建input文件夹
    root@master:~# hadoop dfs -mkdir input
    http://localhost:50070/dfshealth.jsp中点击browse the filesystem可以查看文件夹
    把文件复制到input中
    root@master:~# hadoop dfs -copyFromLocal /usr/hadoop/hadoop-1.2.1/LICENSE.txt input
    root@master:~# cd /usr/hadoop/hadoop-1.2.1
    root@master:/usr/hadoop/hadoop-1.2.1# ls
    运行word count
    root@master:/usr/hadoop/hadoop-1.2.1# hadoop jar hadoop-examples-1.2.1.jar wordcount input output
    查看下运行结果
    hadoop dfs -cat output/*
    查看Hadoop dfs中的文件列表
    hadoop dfs -ls
    hadoop有自己的一套命令规则,开头为hadoop dfs xx,详情:http://my.oschina.net/kevin701/blog/228684
    关闭hadoop服务
    stop-all.ssh
    好!第二个里程碑达成了!

    完全分布式hadoop搭建

    将hadoop复制到两台slave机器的/usr/hadoop/hadoop-1.2.1文件夹当中。先在master当中压缩hadoop-1.2.1文件夹下的内容,打包成tar.gz文件,然后复制过去。
    压缩包
    root@master:/usr/hadoop# tar zcvf hadoop.tar.gz hadoop-1.2.1
    复制hadoop.tar.gz到slave中
    scp -r hadoop.tar.gz root@slave1:/usr/
    解压缩要先进入slave
    ssh slave1
    cd /usr
    mkdir hadoop
    cp hadoop.tar.gz hadoop #将压缩包放到hadoop文件夹当中,最好是先在slave当中建好hadoop文件夹,然后把hadoop.tar.gz复制过去。
    tar xzf hadoop.tar.gz
    slave1 和slave2的操作方式相同。

    都复制过去后,要在slave当中设置环境变量,设置方式与之前相同。
    然后启动hadoop测试。
    查看localhost:50030/jobtracker.jsp测试成功后,开始配置完全分布式系统。

    修改master的core.site.xml配置文件
    root@master:/usr/hadoop/hadoop-1.2.1/conf# ls
    vim core-site.xml
    将里面的localhost替换为master,且在两台slave当中也做同样的修改。

    其次修改master和slave当中的mapred-site.xml文件,把域名localhost修改为master

    最后修改master、slave1、slave2上的hdfs-site.xml文件,将dfs.replication的value值改为3,这样我们的数据就会有3个副本。

    修改两台机器中hadoop配置文件的masters和slaves文件
    root@master:/usr/hadoop/hadoop-1.2.1/conf# vim masters
    将里面的localhost改为master
    root@master:/usr/hadoop/hadoop-1.2.1/conf# vim slaves
    将里面改为:
    master
    slave1
    slave2
    这样,master同时作为了数据节点和主节点。
    在两台slave上也要做相应的修改。

    测试hadoop分布式集群环境

    首先需要清除在hadoop-1.2.1文件夹中的tmp文件夹及其子目录下的内容清空,还要清除根目录下tmp文件夹中hadoop相关的内容。最后要把自定义的hdfs文件夹中的data和name文件夹中的内容清空。
    root@master:/usr/hadoop/hadoop-1.2.1# rm -rf tmp/*
    首先要清理在根目录下的tmp文件夹中,以hadoop相关的所有文件都删除掉
    root@master:rm /tmp/hadoop*
    然后需要清空hadoop-1.2.1文件夹中的tmp文件夹和hdfs文件夹下的内容。但不能盲目的将所有子目录都删除掉。我采用了手动进入每个文件夹,将里面的内容删除掉。
    之前用rm命令删除了文件夹下的所有内容,导致启动时没有namenode任务。而且在web观察上,live node只有1,理论上应该有3。但并不知道具体原因。后来回复了文件后,手动进入各个文件夹清楚里面的内容。
    在slave当中也要做相同的清空操作。
    在master节点格式化集群的文件系统
    hadoop namenode -format
    格式化后启动
    start-all.sh
    终于成功启动。输入jps查看进程:
    master上,显示:
    root@master:~# jps
    3200 TaskTracker
    2645 NameNode
    2793 DataNode
    3050 JobTracker
    2957 SecondaryNameNode
    3455 Jps
    在slave上显示:
    root@slave1:~# jps
    2658 DataNode
    2786 TaskTracker
    2918 Jps
    到此为止,完全分布式的hadoop就配置好了。接下去就要开始安装spark啦!另外,有了hadoop的基础,hive、pig、hbase等hadoop架构下的工具都可以开始安装部署。大数据之路由此打开!~
    最后,关机睡觉
    shutdown -h now

    相关文章

      网友评论

      本文标题:Hadoop部署实践:菜鸟级安装入门经验

      本文链接:https://www.haomeiwen.com/subject/knewkttx.html