美文网首页我爱编程
Centos7下搭建hadoop

Centos7下搭建hadoop

作者: pandaAnthony | 来源:发表于2017-10-25 10:31 被阅读0次

    具体可以参考Hadoop官网 http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/SingleCluster.htmlhttp://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ClusterSetup.html

    1. 安装前准备

    需要安装对应的java和ssh及sshd

    Centos7下已经安装好了ssh及sshd,这里就不描述了。

    java安装详见:http://www.jianshu.com/p/5d3ecf3b30f6

    下面的例子都是安装的oracle的jdk8演示的。 

    java -version 查看是否配置安装成功:

    2. 安装hadoop

    从官网下载需要的版本,这里用的是当前最新的2.8.1。

    用 tar -zxvf 进行解压。

    在解压的目录下修改etc/hadoop/hadoop-env.sh,只需要修改对应的JAVA_HOME:

    可以看到一bin/hadoop目录的一些用法:

    然后官网给出了3种安装方式(本地,伪分布式,分布式):

    2.1 Local(Standalone) 本地模式

    在安装hadoop的根目录运行:mkdir input

    复制etc/hadoop下的xml文件到input文件夹:cp etc/hadoop/*.xml input

    运行hadoop的example,这里根据具体的hadoop版本来看(这里用的是2.8.1):bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.1.jar grep input output 'dfs[a-z.]+'

    这个例子应该是统计对应的文件夹下xml中有多少个'dfs[a-z.]+',然后输出结果到output。再次验证这个例子时需要用不同的输出文件夹,这里方便测试删除了output,运行bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.1.jar grep input output 'xml+':

    在output文件加下有2个文件:

    其中part-r-00000记录了 ‘13    xml’。

    2.2 Pseudo-Distributed 伪分布式

    2.2.1 按照官网的说明进行配置修改:

    修改etc/hadoop/core-site.xml文件(根据自己的域名进行修改,不一定是localhost,可能修改过了):vim etc/hadoop/core-site.xml

    <configuration>

    <property>

    <name>fs.defaultFS</name>

    <value>hdfs://localhost:9000</value>

    </property>

    <property>

    <name>hadoop.tmp.dir</name>

    <value>/usr/local/hadoop/hdfs/tmp</value>

    </property>

    <property>

    <name>fs.trash.interval</name>

    <value>4320</value>

    </property>

    </configuration>

    修改etc/hadoop/hdfs-site.xml文件:vim etc/hadoop/hdfs-site.xml

    <configuration>

    <property>

    <name>dfs.replication</name>

    <value>3</value>

    </property>

    <property>

    <name>dfs.namenode.name.dir</name>

    <value>/usr/local/src/hadoop-2.8.1/hdfs/name</value>

    </property>

    <property>

    <name>dfs.datanode.data.dir</name>

    <value>/usr/local/src/hadoop-2.8.1/hdfs/data</value>

    </property>

    <property>

    <name>dfs.webhdfs.enabled</name>

    <value>true</value>

    </property>

    <property>

    <name>dfs.permissions.superusergroup</name>

    <value>staff</value>

    </property>

    <property>

    <name>dfs.permissions.enabled</name>

    <value>false</value>

    </property>

    </configuration>

    2.2.2 按照官网的配置设置免密码登录:

    一般情况下是需要进行设置的(还是根据具体的域名和用户来进行设置):

    $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

    $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

    $ chmod 0600 ~/.ssh/authorized_keys

    运行完上面的命令后进行检测:ssh localhost,发现不需要设置密码了。

    2.2.3 运行mapreduce

    参考官网进行配置:

    首先格式化文件系统:bin/hdfs namenode -format

    确定NameNode和DataNode的守护进程:sbin/start-dfs.sh

    查看是否启动成功: jps

    在web页面访问安装hadoop机器的ip(hadoop2.8.1的默认端口是50070,上图中的是3.X版本的文档,写的是默认端口9870):http://hadoopIp:50070

    创建HDFS文件夹来运行mapreduce任务

    $ bin/hdfs dfs -mkdir /user

    $ bin/hdfs dfs -mkdir /user/<username>

    复制输入文件到分布式文件系统hdfs(这里创建的input不是当前hadoop根目录下的input)

    $ bin/hdfs dfs -mkdir input

    $ bin/hdfs dfs -put etc/hadoop/*.xml input

    运行提供的例子(不是很明白这里和前面的操作有什么不同):bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.1.jar grep input output 'dfs[a-z.]+'

    检查输出文件:bin/hdfs dfs -cat output/*

    测试完成,关闭守护进程:sbin/stop-dfs.sh

    2.2.4 运行YARN

    参考官网进行配置:

    修改mapred-site.xml:vim etc/hadoop/mapred-site.xml

    <configuration>

    <property>

    <name>mapreduce.framework.name</name>

    <value>yarn</value>

    </property>

    </configuration>

    修改yarn-site.xml(这里配置一个环节变量的白名单):vim etc/hadoop/yarn-site.xml

    <configuration>

    <property>

    <name>yarn.nodemanager.aux-services</name>

    <value>mapreduce_shuffle</value>

    </property>

    <property>

    <name>yarn.nodemanager.env-whitelist</name>

    <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>

    </property>

    </configuration>

    这里要修改环境变量设置,在末尾添加:

    export HADOOP_HOME=/usr/local/src/hadoop-2.8.1/

    export HADOOP_PREFIX=$HADOOP_HOME

    export HADOOP_COMMON_HOME=$HADOOP_PREFIX

    export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop

    export HADOOP_HDFS_HOME=$HADOOP_PREFIX

    export HADOOP_MAPRED_HOME=$HADOOP_PREFIX

    export HADOOP_YARN_HOME=$HADOOP_PREFIX

    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:

    启动ResourceManager和NodeManager守护进程:sbin/start-yarn.sh

    在浏览器中查看ResourceManager的web页面:http://hadoopIp:8088

    运行一个mapreduce的任务:

    先启动dfs:bin/start-dfs.sh,

    然后还是继续运行hadoop的example:bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.1.jar grep input output 'dfs[a-z.]+' (这里暂时不知道运行结果是否正确,卡在这里没动;这是因为liunx的硬盘空间超过了90%,需要清理)

    再次刷新检查ResourceManager的web页面,可以看到下方多了上图中运行的任务

    测试完成,关闭Yarn的守护进程: sbin/stop-yarn.sh

    2.3 集群配置

    集群配置详见(根据对应的版本去查找,这里给的是最新的地址)http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ClusterSetup.html 。这里简单地介绍下基于前面搭建好的伪分布式进行搭建。

    我们先按照1master,3个slave的方式来搭建;首先将搭建伪分布式hadoop的虚拟机复制3份,将机器的域名改成master, slave1, slave2和slave3.

    下面提到的要修改的文件都是在hadoop根目录下的etc/hadoop下。

    在所有的机器上修改core-site.xml (只要将原来的localhost全部改成master):

    在master节点上修改hdfs-site.xml(只要添加dfs.namenode.secondary.http-address):

    在所有节点上修改mapred-site.xml(只要添加mapreduce.jobhistory.address和mapreduce.jobhistory.webapp.address):

    jobhistory是 Hadoop自带了一个历史服务器,用于记录 Mapreduce历史作业。默认情况下, jobhistory没有启动,可用手动通过命令启动。

    这里用的2.8.1的命令是:mapred historyserver。其他版本的需要查看相关文档。

    所有节点修改yarn-site.xml(按照下图标红的添加):

    master节点修改slaves文件(每个slave域名都需要是独立的一行):

    不难发现集群配置的修改主要是把默认配置的localhost域名指向了master。

    这里要重新运行格式化文件系统(如果hadoop根目录的hdfs/data下有内容,需要清理,避免造成前面搭建环境引起的问题):hdfs namenode -format

    在master上运行start-dfs.sh:

    在web页面进行查看:

    在所有节点上运行jps查看:

    可以发现master上只启动了NameNode和SecondaryNameNode,其他slave节点上只有DataNode启动。

    在master上运行start-yarn.sh:

    在web页面查看cluster信息:

    可以发现3个Node的信息了,在所有节点上运行jps:

    发现master上多了ResourceManager,其他slave上多了NodeManager。

    最后在master上运行官网的例子,需要重新创建hdfs目录:

    $ hdfs dfs -mkdir /user

    $ hdfs dfs -mkdir /user/root

    复制输入文件到分布式文件系统hdfs(这里创建的input不是当前hadoop根目录下的input)

    $ hdfs dfs -mkdir input

    $ hdfs dfs -put etc/hadoop/*.xml input

    在hadoop根目录运行:bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.1.jar grep input output 'dfs[a-z.]+'

    查看输出结果:hdfs dfs -cat output/*

    在集群的web页面查看:

    要查看history需要先运行mapred historyserver:

    点击集群web页面下的history链接,可以看具体的信息:

    到这里应该表示集群都已经搭建好了,也可以通过web页面进行查看。

    相关文章

      网友评论

        本文标题:Centos7下搭建hadoop

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