centos7下hadoop环境搭建

来源:互联网 发布:飞科剃须刀怎么样 知乎 编辑:程序博客网 时间:2024/05/22 10:24

centos7下hadoop环境搭建

实验目的:

为5台主机搭建hadoop平台,为之后hbase做准备。

实验步骤:

0x01硬件条件:

5台centos7主机,IP地址:x.x.x.46~50。机器的名称分别为lk,node1,node2,node3,node4。
实验条件默认使用root账户,有需要切回普通用户的情况我会提到。

0x02材料准备

  • hadoop安装包
    官网下载地址:http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.7.3/hadoop-2.7.3-src.tar.gz
  • JAVA环境
    由于centos7自带java环境,所以只需要配置JAVA_HOME即可。

    1. 首先输入命令[root@lk ~]# which java
      返回:/usr/bin/java
    2. 之后输入[root@lk ~]# ls -lrt /usr/bin/java
      返回:lrwxrwxrwx. 1 root root 22 4月 29 2015 /usr/bin/java -> /etc/alternatives/java
    3. 之后输入:[root@lk ~]# ls -lrt /etc/alternatives/java
      返回lrwxrwxrwx. 1 root root 74 4月 29 2015 /etc/alternatives/java -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.79-2.5.5.1.el7_1.x86_64/jre/bin/java
    4. 之后编辑:[root@lk ~]# vim /etc/profile
      添加如下内容:
    export PATH=$PATH:$HADOOP_HOME/bin    export PATH=$PATH:$HADOOP_HOME/bin    export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.79-2.5.5.1.el7_1.x86_64    export JRE_HOME=$JAVA_HOME/jre    export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH    export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH:$HADOOP_HOME/bin
  1. 使之生效:[root@lk ~]# source /etc/profile
  2. 以后可以验证一下:[root@lk ~]# echo $JAVA_HOME
    返回:/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.79-2.5.5.1.el7_1.x86_64
    代表成功生效

以上配置对本实验失效了。。。原因是openjdk的结构和普通的jdk包结构不太一样,导致有些hadoop有些地方找不到路径
正确配置如下:

  • 在jdk的官网上找一款下载:http://www.oracle.com/technetwork/java/javase/downloads/index.html
  • 解压到/usr/jdk-9.0.1。
  • 配置环境变量:vim /etc/profile
    add:
export JAVA_HOME=/usr/jdk-9.0.1/export CLASSPATH=$JAVA_HOME/lib:$CLASSPATHexport PATH=$JAVA_HOME/bin:$PATH:$HADOOP_HOME/bin
  • 使之生效:source /etc/profile

0x03环境搭建

  • 将下载的hadoop包解压缩在/usr/hadoop-2.7.3目录下。
    解压后目录为/usr/hadoop-2.7.3/hadoop/
  • 创建如下文件夹
mkdir  /usr/hadoop-2.7.3/tmp  mkdir  /usr/hadoop-2.7.3/var  mkdir  /usr/hadoop-2.7.3/dfs  mkdir  /usr/hadoop-2.7.3/dfs/name  mkdir  /usr/hadoop-2.7.3/dfs/data  
  • 设置环境变量:vim /etc/profile
  • 写入:
    export HADOOP_HOME=/usr/hadoop-2.7.3/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin (可能需要和java的PATH合并)
  • 使之生效:source /etc/profile
  • hadoop配置
  • 进入$HADOOP_HOME/etc/hadoop目录,配置 hadoop-env.sh等。涉及的配置文件如下:
hadoop/etc/hadoop/hadoop-env.sh hadoop/etc/hadoop/yarn-env.sh hadoop/etc/hadoop/core-site.xml hadoop/etc/hadoop/hdfs-site.xml hadoop/etc/hadoop/mapred-site.xml hadoop/etc/hadoop/yarn-site.xmlhadoop/etc/hadoop/slaves

具体修改如下:
配置hadoop-env.sh

# The java implementation to use.#export JAVA_HOME=/home/graph/Desktop/javaexport JAVA_HOME=${JAVA_HOME}
  • 配置yarn-env.sh
    需要修改JAVA_HOME的路径不能直接用$JAVA_HOME需要把具体路径敲上去。
# some Java parameters# export JAVA_HOME=/home/y/libexec/jdk1.6.0/export JAVA_HOME=/usr/jdk-9.0.1/
  • 配置core-site.xml
    add:
  <configuration>        <property>        <name>hadoop.tmp.dir</name>        <value>/usr/hadoop-2.7.3/tmp</value>        <description>Abase for other temporary directories.</description>   </property>   <property>        <name>fs.default.name</name>        <value>hdfs://lk:9000</value>   </property></configuration>

注意修改路径和地址。

  • 配置hdfs-site.xml
    add:
<property>   <name>dfs.name.dir</name>   <value>/usr/hadoop-2.7.3/dfs/name</value>   <description>Path on the local filesystem where theNameNode stores the namespace and transactions logs persistently.</description></property><property>   <name>dfs.data.dir</name>   <value>/usr/hadoop-2.7.3/dfs/data</value>   <description>Comma separated list of paths on the localfilesystem of a DataNode where it should store its blocks.</description></property><property>   <name>dfs.replication</name>   <value>2</value></property><property>      <name>dfs.permissions</name>      <value>false</value>      <description>need not permissions</description></property></configuration>
  • 配置mapred-site.xml
    add:
<configuration><property>    <name>mapred.job.tracker</name>    <value>lk:49001</value></property><property>      <name>mapred.local.dir</name>       <value>/usr/hadoop-2.7.3/var</value></property><property>       <name>mapreduce.framework.name</name>       <value>yarn</value></property></configuration>
  • 配置yarn-site.xml
    add:
<configuration><!-- Site specific YARN configuration properties --><property>        <name>yarn.nodemanager.aux-services</name>        <value>mapreduce_shuffle</value></property><property>        <name>yarn.resourcemanager.webapp.address</name>        <value>10.113.10.46:8099</value></property><property>        <name>yarn.resourcemanager.hostname</name>        <value>lk</value>   </property>   <property>        <description>The https adddress of the RM web application.</description>        <name>yarn.resourcemanager.webapp.https.address</name>        <value>${yarn.resourcemanager.hostname}:8090</value>   </property>   <property>        <name>yarn.resourcemanager.resource-tracker.address</name>        <value>${yarn.resourcemanager.hostname}:8031</value>   </property>   <property>        <description>The address of the RM admin interface.</description>        <name>yarn.resourcemanager.admin.address</name>        <value>${yarn.resourcemanager.hostname}:8033</value>   </property>   <property>        <name>yarn.nodemanager.aux-services</name>        <value>mapreduce_shuffle</value>   </property>   <property>        <name>yarn.scheduler.maximum-allocation-mb</name>        <value>1537</value>        <discription>每个节点可用内存,单位MB,默认8182MB</discription>   </property>   <property>        <name>yarn.nodemanager.vmem-pmem-ratio</name>        <value>2.1</value>   </property>   <property>        <name>yarn.nodemanager.vmem-check-enabled</name>        <value>false</value></property></configuration>
  • 配置slaves文件:vim slaves

    node1node2node3node4
  • 配置其他所有节点机器:由于lk是namenode,其余4台为datanode,所以除了最后一步配置slaves,其余完全相同,可以使用scp -r /usr/hadoop-2.7.3/ xxx@x.x.x.x:~/完全复制过来。注意台机器还需要配置java环境。

  • 最后调整权限,我们是在root权限下进行修改操作,之后需要退回到普通用户权限,但是普通用户默认是不可以修改usr文件夹内容的,所以将hadoop-2.7.3文件夹整体提权.

    具体权限如下:sudo chown xxx:xxx -R hadoop-2.7.3/对每台机器都操作一次。

0x04 Hadoop 启动测试

x.x.x.47~50的机器是datanode,不需要进行其他操作,以下在namenode下进行:

  • 进入bin目录,初始化:./hadoop namenode -format

    如果如图所示,没有报错,就说明初始化成功
    这里写图片描述

  • 退出bin目录,进入sbin,执行:./start-all.sh

    • 如果是首次启动,系统会问yes/no,回答yes即可。
      这里写图片描述
    • 之后输入jps查看,主节点:
      24816 ResourceManager24387 NameNode27619 Jps24635 SecondaryNameNode

    slaves节点:

    27955 NodeManager30564 Jps27816 DataNode
    • 如果结果如上所示,说明成功。
  • 进入网页:x.x.x.46:8088查看工作节点
    这里写图片描述

  • 进入网页:x.x.x.46:50070查看概述
    这里写图片描述

0x05错误提示:

  • 首先如果jps 其他节点发现没有datanode的话说明配置有问题,可以去子节点的目录下logs文件夹里hadoop-qsb-datanode-xxx.log查看出错原因。我这里出现过2次错误,如果有相同问题的话可以直接参照修改。
    首先是复制过去的时候新建的那几个文件夹里要空的,如果有东西的话需要手动删除。
    其次是权限问题,如果遇到如无法访问的报错的话试着重新执行一遍指令:sudo chown xxx:xxx -R hadoop-2.7.3/
  • 诶还有实例需要跑呀,那随便跑一下吧,然后boom,,,运行一个search的实例,具体命令如下:
hadoop dfs -mkdir input //创建input文件夹有的童鞋可能需要加上-phadoop dfs -put /usr/hadoop-2.7.3/hadoop/etc/hadoop/*.xml input //倒入一些文件进去 hadoop dfs -ls input //查看一下文件hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep input output 'dfs[a-z.]+' //筛选出格式为dfs*的字符串hadoop dfs -ls outputhadoop dfs -cat output/part-r-00000 //查看输出文件 

然后第一次报这个错误:

17/11/17 09:10:24 INFO mapreduce.Job:  map 0% reduce 0%17/11/17 09:10:35 INFO mapreduce.Job:  map 20% reduce 0%17/11/17 09:10:36 INFO mapreduce.Job:  map 60% reduce 0%17/11/17 09:10:38 INFO mapreduce.Job:  map 80% reduce 0%17/11/17 09:10:43 INFO mapreduce.Job:  map 100% reduce 0%17/11/17 09:10:48 INFO mapreduce.Job:  map 100% reduce 7%17/11/17 09:13:40 INFO mapreduce.Job: Task Id : attempt_1510879394295_0002_r_000000_0, Status : FAILEDError: org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error in shuffle in fetcher#2

可以看到啊,哪个map应该是没啥毛病,然后reduce在7%卡住了,然后过一会报下面的错误,百度一下发现是内存爆炸,结合我当时在yarn-site.xml里的配置:

  <property>        <name>yarn.scheduler.maximum-allocation-mb</name>        <value>2048</value>        <discription>每个节点可用内存,单位MB,默认8182MB</discription>   </property>   <property>        <name>yarn.nodemanager.resource.memory-mb</name>        <value>2048</value></property>

好吧是我的虚拟机太渣了,把第一段去掉,第二段的2048改成1537(最小1536),再试一次成功。
输出应该如下:

17/11/17 20:58:37 INFO mapreduce.Job:  map 0% reduce 0%17/11/17 20:59:15 INFO mapreduce.Job:  map 67% reduce 0%17/11/17 20:59:37 INFO mapreduce.Job:  map 100% reduce 0%17/11/17 20:59:40 INFO mapreduce.Job:  map 100% reduce 100%17/11/17 20:59:42 INFO mapreduce.Job: Job job_1510923270204_0002 completed successfully17/11/17 20:59:43 INFO mapreduce.Job: Counters: 50...下面是一些统计信息...

实例跑起来应该没什么问题了吧,之后又问题再改。
对输出如下:

2   dfs.replication1   dfsadmin1   dfs.permissions1   dfs.name.dir1   dfs.data.dir
原创粉丝点击