安装 Hadoop 2.7.3

配置ssh免密码登陆

cd ~/.ssh                       # 若没有该目录,请先执行一次ssh localhost

ssh-keygen -t rsa               # 会有提示,都按回车就可以

cat id_rsa.pub >> authorized_keys # 加入授权

chmod 600 ./authorized_keys # 修改文件权限

1.此处我们选择二进制安装包

http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz



解压:

tar -zxf hadoop-2.7.3.tar.gz

我们解压到了/data/yunva/hadoop-2.7.3目录



输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息

cd /data/yunva/hadoop-2.7.3

# bin/hadoop version

Hadoop 2.7.3

Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r baa91f7c6bc9cb92be5982de4719c1c8af91ccff

Compiled by root on 2016-08-18T01:41Z

Compiled with protoc 2.5.0

From source with checksum 2e4ce5f957ea4db193bce3734ff29ff4

This command was run using /data/yunva/hadoop-2.7.3/share/hadoop/common/hadoop-common-2.7.3.jar

2.Hadoop单机配置(非分布式)

修改 hosts 文件,为你的主机名增加IP映射

vim /etc/hosts

10.10.33.84 ha01

Hadoop 默认模式为非分布式模式,无需进行其他配置即可运行。非分布式即单 Java 进程,方便进行调试。

现在我们可以执行例子来感受下 Hadoop 的运行。Hadoop 附带了丰富的例子(运行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jarr 可以看到所有例子),包括 wordcount、terasort、join、grep 等。



在此我们选择运行 grep 例子,我们将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 dfs[a-z.]+ 的单词并统计出现的次数,最后输出结果到 output 文件夹中。

cd /data/yunva/hadoop-2.7.3/

mkdir input

cp etc/hadoop/*.xml input   # 将配置文件作为输入文件

# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep ./input ./output 'dfs[a-z.]+' 

# cat ./output/*

1 dfsadmin



通过命令 cat ./output/* 查看结果,符合正则的单词 dfsadmin 出现了1次:



注意:Hadoop 默认不会覆盖结果文件,如需要再次运行上面实例需要先将 output 删除。

3.Hadoop伪分布式配置

Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。



在设置 Hadoop 伪分布式配置前,我们还需要设置 HADOOP 环境变量,执行如下命令在 /etc/profile 中设置:



export HADOOP_HOME=/data/yunva/hadoop-2.7.3

export HADOOP_INSTALL=$HADOOP_HOME

export HADOOP_MAPRED_HOME=$HADOOP_HOME

export HADOOP_COMMON_HOME=$HADOOP_HOME

export HADOOP_HDFS_HOME=$HADOOP_HOME

export YARN_HOME=$HADOOP_HOME

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

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



保存后,执行如下命令使配置生效

source /etc/profile



这些变量在启动 Hadoop 进程时需要用到,不设置的话可能会报错(这些变量也可以通过修改 ./etc/hadoop/hadoop-env.sh 实现)。



Hadoop 的配置文件位于 /data/yunva/hadoop-2.7.3 中,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml 。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。

①修改配置文件 core-site.xml (/etc/hadoop/core-site.xml)

修改为下面配置:

<configuration>

    <property>

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

        <value>file:/data/yunva/hadoop-2.7.3/tmp</value>

        <description>Abase for other temporary directories.</description>

    </property>

    <property>

        <name>fs.defaultFS</name>

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

    </property>

    <property>  

    <name>dfs.namenode.rpc-bind-host</name>  

    <value>0.0.0.0</value>  

</property>



</configuration>

②同样的,修改配置文件 hdfs-site.xml:

<configuration>

    <property>

        <name>dfs.replication</name>

        <value>1</value>

    </property>

    <property>

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

        <value>file:/data/yunva/hadoop-2.7.3/tmp/dfs/name</value>

    </property>

    <property>

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

        <value>file:/data/yunva/hadoop-2.7.3/tmp/dfs/data</value>

    </property>

</configuration>

③配置完成后,执行 NameNode 的格式化:

./bin/hdfs namenode -format



成功的话,会看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若为 “Exitting with status 1” 则是出错。



④接着开启 NaneNode 和 DataNode 守护进程:

./sbin/start-dfs.sh



若出现如下 SSH 的提示 “Are you sure you want to continue connecting”,输入 yes 即可



报错:

# ./sbin/start-dfs.sh

17/03/21 15:36:00 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

Starting namenodes on [localhost]

localhost: Error: JAVA_HOME is not set and could not be found.

解决办法:

hadoop-env.sh 和  yarn-env.sh 添加如下变量



# egrep -v "#|^$" hadoop-env.sh 

export JAVA_HOME=/usr/java/jdk1.8.0_111

export HADOOP_SSH_OPTS="-p 2222"  # ssh端口非默认22端口

export HADOOP_HOME=/data/yunva/hadoop-2.7.3

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

export  HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export  HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"



# egrep -v "#|^$" yarn-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_111

export HADOOP_HOME=/data/yunva/hadoop-2.7.3

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

export  HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export  HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"



成功启动后,可以访问 Web 界面 http://ip:50070 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。

4.运行Hadoop伪分布式实例

上面的单机模式,grep 例子读取的是本地数据,伪分布式读取的则是 HDFS 上的数据。要使用 HDFS,首先需要在 HDFS 中创建用户目录:



./bin/hdfs dfs -mkdir -p /user/admin



接着将 ./etc/hadoop 中的 xml 文件作为输入文件复制到分布式文件系统中,即将 /usr/local/hadoop/etc/hadoop 复制到分布式文件系统中的 /user/admin/input 中。我们使用的是 admin 用户,并且已创建相应的用户目录 /user/admin ,因此在命令中就可以使用相对路径如 input,其对应的绝对路径就是 /user/admin/input:



./bin/hdfs dfs -mkdir /user/admin/input

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



复制完成后,可以通过如下命令查看 HDFS 中的文件列表:

# bin/hdfs dfs -ls /user/admin/input

Found 8 items

-rw-r--r--   1 root supergroup       4436 2017-03-21 15:58 /user/admin/input/capacity-scheduler.xml

-rw-r--r--   1 root supergroup       1082 2017-03-21 15:58 /user/admin/input/core-site.xml

-rw-r--r--   1 root supergroup       9683 2017-03-21 15:58 /user/admin/input/hadoop-policy.xml

-rw-r--r--   1 root supergroup       1180 2017-03-21 15:58 /user/admin/input/hdfs-site.xml

-rw-r--r--   1 root supergroup        620 2017-03-21 15:58 /user/admin/input/httpfs-site.xml

-rw-r--r--   1 root supergroup       3518 2017-03-21 15:58 /user/admin/input/kms-acls.xml

-rw-r--r--   1 root supergroup       5511 2017-03-21 15:58 /user/admin/input/kms-site.xml

-rw-r--r--   1 root supergroup        690 2017-03-21 15:58 /user/admin/input/yarn-site.xml



若要关闭 Hadoop,则运行



./sbin/stop-dfs.sh



注意

下次启动 hadoop 时,无需进行 NameNode 的初始化,只需要运行 ./sbin/start-dfs.sh 就可以!



启动YARN

(伪分布式不启动 YARN 也可以,一般不会影响程序执行)

有的读者可能会疑惑,怎么启动 Hadoop 后,见不到书上所说的 JobTracker 和 TaskTracker,这是因为新版的 Hadoop 使用了新的 MapReduce 框架(MapReduce V2,也称为 YARN,Yet Another Resource Negotiator)。



YARN 是从 MapReduce 中分离出来的,负责资源管理与任务调度。YARN 运行于 MapReduce 之上,提供了高可用性、高扩展性,YARN 的更多介绍在此不展开,有兴趣的可查阅相关资料。



上述通过 ./sbin/start-dfs.sh 启动 Hadoop,仅仅是启动了 MapReduce 环境,我们可以启动 YARN ,让 YARN 来负责资源管理与任务调度。



首先修改配置文件 mapred-site.xml,这边需要先进行重命名:

mv mapred-site.xml.template mapred-site.xml



进行编辑

<configuration>

    <property>

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

        <value>yarn</value>

    </property>

</configuration>



接着修改配置文件 yarn-site.xml:



<configuration>

    <property>

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

        <value>mapreduce_shuffle</value>

        </property>

</configuration>



然后就可以启动 YARN 了(需要先执行过 ./sbin/start-dfs.sh):



./sbin/start-yarn.sh      $ 启动YARN

./sbin/mr-jobhistory-daemon.sh start historyserver  # 开启历史服务器,才能在Web中查看任务运行情况



http://1.1.1.1:8088/cluster



执行jps报错:



最近hadoop系统在升级后发现一个诡异的问题: jps命令返回的都是process information unavailable, jstack, jmap等所有使用attach api的命令都有类似问题.

# jps

8848 -- process information unavailable

8395 -- process information unavailable

8748 -- process information unavailable

8270 -- process information unavailable



解决方法:

# chmod 755 -R /tmp



网上资料

以为是Jps有问题, 查看Jps源代码, 得知使用 jps -J-Djps.debug=true -J-Djps.printStackTrace=true 可以获得Jps错误详细信息, 如下:



16373 -- process information unavailable

    Could not attach to 16373

sun.jvmstat.monitor.MonitorException: Could not attach to 16373

    at sun.jvmstat.perfdata.monitor.protocol.local.PerfDataBuffer.<init>(PerfDataBuffer.Java:91)

    at sun.jvmstat.perfdata.monitor.protocol.local.LocalMonitoredVm.<init>(LocalMonitoredVm.java:68)

    at sun.jvmstat.perfdata.monitor.protocol.local.MonitoredHostProvider.getMonitoredVm(MonitoredHostProvider.java:77)

    at sun.tools.jps.Jps.main(Jps.java:92)

Caused by: java.io.IOException: Operation not permitted

    at sun.misc.Perf.attach(Native Method)

    at sun.misc.Perf.attachImpl(Perf.java:270)

    at sun.misc.Perf.attach(Perf.java:200)

    at sun.jvmstat.perfdata.monitor.protocol.local.PerfDataBuffer.<init>(PerfDataBuffer.java:64)

    ... 3 more



static bool is_directory_secure(const char* path) {  

  struct stat statbuf;  

  int result = 0;   

  

  RESTARTABLE(::lstat(path, &statbuf), result);  

  if (result == OS_ERR) {  

    return false;  

  }  

  

  // the path exists, now check it's mode  

  if (S_ISLNK(statbuf.st_mode) || !S_ISDIR(statbuf.st_mode)) {  

    // the path represents a link or some non-directory file type,  

    // which is not what we expected. declare it insecure.  

    //     

    return false;  

  }  

  else {  

    // we have an existing directory, check if the permissions are safe.  

    //     

    if ((statbuf.st_mode & (S_IWGRP|S_IWOTH)) != 0) {   

      // the directory is open for writing and could be subjected  

      // to a symlnk attack. declare it insecure.  

      //     

      return false;  

    }      

  }  

  return true;  

}  



确定问题是权限问题, 可抛出异常的却是native code.无奈只有下载openjdk源代码(native code部分在src.zip的jdk类库中没有源代码), 在@RednaxelaFX 的帮助下,找到了罪魁祸首:

hotspot/src/os/Linux/vm/perfMemory_linux.cpp

[root@ha01 ~]# chmod 755 -R /tmp



原来目录权限是S_IWGRP | S_IWOTH都会有问题.查看/tmp/hsperfdata_mapred发现权限被人修改成了777. 修改回755后, 问题解决.



最后,交代一下关于jps的基础知识, jps, jstack等都是通过/tmp/hsperfdata_${user_name} 来确定正在运行的java进程pid等信息. 如果启动java进程时使用-Djava.io.tmpdir 后, jps等可能会由于找不到对应的数据而有问题. 这次遇到的是该目录的权限问题.

centos6.8系统安装 Hadoop 2.7.3伪分布式集群的更多相关文章

  1. Hadoop伪分布式集群环境搭建

    本教程讲述在单机环境下搭建Hadoop伪分布式集群环境,帮助初学者方便学习Hadoop相关知识. 首先安装Hadoop之前需要准备安装环境. 安装Centos6.5(64位).(操作系统再次不做过多描 ...

  2. hadoop搭建伪分布式集群(centos7+hadoop-3.1.0/2.7.7)

    目录: Hadoop三种安装模式 搭建伪分布式集群准备条件 第一部分 安装前部署 1.查看虚拟机版本2.查看IP地址3.修改主机名为hadoop4.修改 /etc/hosts5.关闭防火墙6.关闭SE ...

  3. Hadoop伪分布式集群

    一.HDFS伪分布式环境搭建 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时, ...

  4. hadoop伪分布式集群的搭建

    集群配置: jdk1.8.0_161 hadoop-2.6.1 linux系统环境:Centos6.5 创建普通用户  dummy 设置静态IP地址 Hadoop伪分布式集群搭建: 为普通用户添加su ...

  5. hadoop伪分布式集群搭建与安装(ubuntu系统)

    1:Vmware虚拟软件里面安装好Ubuntu操作系统之后使用ifconfig命令查看一下ip; 2:使用Xsheel软件远程链接自己的虚拟机,方便操作.输入自己ubuntu操作系统的账号密码之后就链 ...

  6. hadoop(二)搭建伪分布式集群

    前言 前面只是大概介绍了一下Hadoop,现在就开始搭建集群了.我们下尝试一下搭建一个最简单的集群.之后为什么要这样搭建会慢慢的分享,先要看一下效果吧! 一.Hadoop的三种运行模式(启动模式) 1 ...

  7. Hadoop学习---CentOS中hadoop伪分布式集群安装

    注意:此次搭建是在ssh无密码配置.jdk环境已经配置好的情况下进行的 可以参考: Hadoop完全分布式安装教程 CentOS环境下搭建hadoop伪分布式集群 1.更改主机名 执行命令:vi  / ...

  8. Hadoop单机/伪分布式集群搭建(新手向)

    此文已由作者朱笑笑授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 本文主要参照官网的安装步骤实现了Hadoop伪分布式集群的搭建,希望能够为初识Hadoop的小伙伴带来借鉴意 ...

  9. 基于Hadoop伪分布式集群搭建Spark

    一.前置安装 1)JDK 2)Hadoop伪分布式集群 二.Scala安装 1)解压Scala安装包 2)环境变量 SCALA_HOME = C:\ProgramData\scala-2.10.6 P ...

随机推荐

  1. 在Sqlite中通过Replace来实现插入和更新

      你可能在批量处理一个事务的时候,想要批量插入一系列的数据,但是这些数据当添加完一次之后,重新添加的时候,你不想要重新添加,只是想将原有的数据进行更新,例如:我想要通过Excel将一系列的图书导入到 ...

  2. django---APIView源码分析

    django---APIView源码分析 前言:APIView基于View 看这部分内容一定要懂django-CBV里的内容 在django-CBV源码分析中,我们是分析的from django.vi ...

  3. mockery expectation 覆盖

    public function testOverrideExpectation() { // 如果没有指定 expectation 调用次数, 那么每次调用 mock 的 expectation 方法 ...

  4. ngrep 比 tcpdump 更方便查看的抓包显示工具

    ngrep 是grep(在文本中搜索字符串的工具)的网络版,他力求更多的grep特征,用于搜寻指定的数据包 一: ngrep的安装 CentOS6.2 64位 wget http://nchc.dl. ...

  5. 即将上线的Kafka 集群(用CM部署的)无法使用“--bootstrap-server”进行消费,怎么破?

    即将上线的Kafka 集群(用CM部署的)无法使用“--bootstrap-server”进行消费,怎么破? 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.报错:org.a ...

  6. 使用sed替换指定文件指定行的指定文本

    下面是将85行的127.0.0.1替换为192.168.10.108 sed -i '85{s/127.0.0.1/192.168.10.108/}' /etc/zabbix/zabbix_agent ...

  7. 函数和常用模块【day06】:xml模块(六)

    本节内容 1.简述 2.xml格式 3.xml节点操作 4.创建新的xml文件 一.简述 xml是实现不同语言或者程序之间进行数据交换的协议,跟json差不多,但是json使用起来更简单,不过,古时候 ...

  8. Hbase记录-client访问zookeeper大量断开以及参数调优分析(转载)

    1.hbase client配置参数 超时时间.重试次数.重试时间间隔的配置也比较重要,因为默认的配置的值都较大,如果出现hbase集群或者RegionServer以及ZK关掉,则对应用程序是灾难性的 ...

  9. poi-对于word的操作(一)

    2017-03-02 15:17:30 使用的jar包是poi 3.13 实现对word的存入,字体.颜色.大小的控制 测试类: package poi.test; public class Word ...

  10. python执行centos命令

    import os improt sys import re import commands a = commands.getoutput("ls -al /") print a