最近公司准备升级spark环境,主要原因是生产环境的spark和hadoop版本都比较低,但是具体升级到何种版本还不确定,需要做进一步的测试分析。这个任务对于大数据开发环境配置有要求,这里记录一下配置过程,但是对于为什么要做这些配置还不是很了解,算是知其然不知其所以然,深入了解再写篇博文分析。

JDK配置

按照上一篇博文的配置,我发现centos7的 JDK已经安装好了,可以通过下面的代码进行检查,如下图,显示的1.8.0_121的openJDK

[kejun@localhost ~]$ java -version

openjdk version "1.8.0_121"

OpenJDK Runtime Environment (build 1.8.0_121-b13)

OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)

没有安装也不要紧,通过yum安装还是很方便的,可以通过下面的指令来安装JDK:

yum search java|grep jdk

yum install java-1.8.0-openjdk

下一步是配置JAVA的环境变量,因为是系统默认安装的JDK,所以要找到JDK的目录比较困难,需要通过下面两个语句来进行查询,第一个查询是获得/usr/bin/java的依赖连接,第二个查询是进一步获得依赖的依赖的:

[kejun@localhost ~]$ ll /usr/bin/java
lrwxrwxrwx. 1 root root 22 3月 16 17:11 /usr/bin/java -> /etc/alternatives/java
[kejun@localhost ~]$ ll /etc/alternatives/java
lrwxrwxrwx. 1 root root 73 3月 16 17:11 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64/jre/bin/java

通过这个办法得到的/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64就是系统默认的JDK目录。获得JDK目录后,配置环境变量的指令为:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH

有三种方法可以支持配置JAVA的环境变量:

在shell终端中通过上述命令直接执行,这种配置只对当前的shell有效,所以不推荐。

修改~/.bash_profile文件,在下面的两个语句中进行插入即可

PATH=$PATH:$HOME/.local/bin:$HOME/bin
#这里插入
export PATH

这个修改只针对当前的用户生效。但是hadoop配置中可能需要切换到另外一个用户hadoop进行配置,因此这个方法也不适合。

修改/etc/profile,这种配置方法适合于所有用户,但是这种修改比较适合单人的开发环境使用,我们选择这种方式。

vi /etc/profile
source /etc/profile

到此,我们完成了JDK的配置。下一步进入hadoop的安装。

hadoop安装

安装参考的文档是:CentOS 6.5 hadoop 2.7.3 集群环境搭建

Linux Hadoop2.7.3 安装(单机模式) 一

hadoop有三种安装模式:单机standlone模式,伪分布式模式,分布式模式。

因为没有多余的服务器资源供我测试,这里我选择了单机模式的安装。

  • 首先是安装hadoop,目前hadoop已经更新到3.0版本了,但是2.7.3肯定还是主流版本,我选择从清华的源下载了hadoop安装包:
cd /tmp
wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz
tar -zxvf hadoop-2.7.3.tar.gz
cp -R /tmp/hadoop-2.7.3 /usr/hadoop
  • 增加hadoop的环境变量
sudo -i
vim /etc/profile
HADOOP_HOME=/usr/hadoop
export JAVA_LIBRARY_PATH='/usr/hadoop/lib/native
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
  • 设置免密钥登陆。

    hadoop中客户端和服务器、计算节点之间通信都需要通过SSH,Hadoop并没有提供SSH输入密码的登录形式,因此为了保证可以顺利登录每台机器,需要将所有机器配置为namenode可以无密码登录它们。不配置免密钥有什么坏处我还没搞清楚,后续再补充。

    首先通过rpm -qa | grep ssh 检查ssh是否安装:
[root@localhost ~]# rpm -qa | grep ssh
openssh-clients-6.6.1p1-33.el7_3.x86_64
openssh-6.6.1p1-33.el7_3.x86_64
openssh-server-6.6.1p1-33.el7_3.x86_64
libssh2-1.4.3-10.el7_2.1.x86_64

如果没有发现ssh也不要紧,可以通过yum安装:

yum install openssh-clients
yum install openssh-server

接下来依次执行,下面的指令可以确保当前用户可以免密钥登陆:

ssh localhost
cd ~/.ssh/
ssh-keygen -t dsa
cat id_dsa.pub >> authorized_keys

通过root用户修改ssh的配置:

sudo -i
vim /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
service sshd restart

后续在配置hadoop的过程中,我们会发现会出现ssh的错误:The authenticity of host 0.0.0.0 can't be established.

解决方法可以通过下列命令解决:

ssh  -o StrictHostKeyChecking=no  0.0.0.0

配置hadoop

完成hadoop及ssh的安装步骤后,接下来是对hadoop的配置文件进行修改。

  • 修改/usr/hadoop/etc/hadoop/core-site.xml文件
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://0.0.0.0:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop/temp</value>
</property>
</configuration>
  • 修改/usr/hadoop/etc/hadoop/hdfs-site.xmll文件
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
  • 首次启动需要格式化namenode文件
/usr/hadoop/bin/hdfs namenode -format
  • 然后可以启动和停止hdfs
/usr/hadoop/sbin/start-dfs.sh
/usr/hadoop/sbin/stop-dfs.sh

启动后,访问 http://localhost:50070/dfshealth.html#tab-datanode 可以得到这个页面,就是配置成功了。



##Map-Reduce示例

为了验证单机版的hadoop配置是否正确,接下来做一个map-reduce的样例。对于一个文本的单词集进行计数

具体的配置如下:

  • 首先配置mapred-site.xml
cd /usr/hadoop/etc/hadoop
mv mapred-site.xml.template mapred-site.xml
vim mapred-site xml
===============================
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
===============================
</configuration>
  • 配置 yarn-site.xml:
vim mapred-site xml
===============================
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration
===============================
  • 准备数据words.txt,并将其导入hdfs:
[root@localhost hadoop]# cd /usr/hadoop
[root@localhost hadoop]# vi words.txt
[root@localhost hadoop]# cat words.txt
=============================
wo xiang shuo shen me
shen me dou bu jue de
yi qie yi qie dou shi xu huan de
hahaha
=============================
[root@localhost hadoop]# cd bin
[root@localhost bin]# hadoop fs -put /usr/hadoop/words.tx
  • 启动yarn,并执行wordcount任务:
[root@localhost bin]# start-yarn.sh
[root@localhost bin]# hadoop jar /usr/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount hdfs://localhost:9000/words.txt hdfs://localhost:9000/out3

接下来,打开链接就可以看到结果了http://localhost:50070/explorer.html#/







遇到的问题及解决

  • p1:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

    首先,启动在终端显示debug信息,然后再开始寻找原因:
export HADOOP_ROOT_LOGGER=DEBUG,console

网上也有人有类似的问题,但是原因并不总是一样的,我配置的出现这个问题是因为JAVA_LIBRARY_PATH没有配置,这个在配置我已经在上文的hadoop环境配置中增加上了(标粗体)

  • p2: data node没有启动

    这个问题出现的比较隐蔽,我打开页面http://localhost:50070/dfshealth.html#tab-datanode 发现没有data node在运行。

    首先name node、data node和namesecondary的运行文件都在/usr/hadoop/logs这个目录中

    然后检查logs文件目录中的hadoop-root-datanode-localhost.localdomain.log就可以发现问题了:
[root@localhost logs]# ls
hadoop-root-datanode-localhost.localdomain.log
hadoop-root-datanode-localhost.localdomain.out
hadoop-root-datanode-localhost.localdomain.out.1
hadoop-root-datanode-localhost.localdomain.out.2
hadoop-root-datanode-localhost.localdomain.out.3
hadoop-root-datanode-localhost.localdomain.out.4
hadoop-root-datanode-localhost.localdomain.out.5
hadoop-root-namenode-localhost.localdomain.log
hadoop-root-namenode-localhost.localdomain.out
hadoop-root-namenode-localhost.localdomain.out.1
hadoop-root-namenode-localhost.localdomain.out.2
hadoop-root-namenode-localhost.localdomain.out.3
hadoop-root-namenode-localhost.localdomain.out.4
hadoop-root-namenode-localhost.localdomain.out.5
hadoop-root-secondarynamenode-localhost.localdomain.log
hadoop-root-secondarynamenode-localhost.localdomain.out
hadoop-root-secondarynamenode-localhost.localdomain.out.1
hadoop-root-secondarynamenode-localhost.localdomain.out.2
hadoop-root-secondarynamenode-localhost.localdomain.out.3
hadoop-root-secondarynamenode-localhost.localdomain.out.4
hadoop-root-secondarynamenode-localhost.localdomain.out.5
SecurityAuth-root.audit
userlogs
yarn-root-nodemanager-localhost.localdomain.log
yarn-root-nodemanager-localhost.localdomain.out
yarn-root-nodemanager-localhost.localdomain.out.1
yarn-root-nodemanager-localhost.localdomain.out.2
yarn-root-nodemanager-localhost.localdomain.out.3
yarn-root-resourcemanager-localhost.localdomain.log
yarn-root-resourcemanager-localhost.localdomain.out
yarn-root-resourcemanager-localhost.localdomain.out.1
yarn-root-resourcemanager-localhost.localdomain.out.2
yarn-root-resourcemanager-localhost.localdomain.out.3

检查log后发现出现data node不启动的原因是使用了多次namenode format的操作,后台存储的clusterID为第一次format的ID,再次format后datanode的clusterID没有变化,导致匹配不上,具体的报错情况为:

java.io.IOException: Incompatible clusterIDs in /usr/hadoop/temp/dfs/data: namenode clusterID = CID-9754ec5b-c309-4b36-89ce-f00de7285927; datanode clusterID = CID-d05d2a3a-4fe7-4de4-a53a-6960403696cc

解决这个问题比较简单,到datanode目录下修改VISION即可:

[root@localhost hadoop]# cd /usr/hadoop/temp/dfs/data/current/
[root@localhost current]# ls
BP-1948380787-127.0.0.1-1490148702615 VERSION
BP-2135918609-127.0.0.1-1490082190396
[root@localhost current]# vim VERSION
=======================================
storageID=DS-34e30373-c8e1-4bfa-a5c7-84fd43ac99e2
clusterID=#在这里修改#
cTime=0
datanodeUuid=ae0dae79-7de1-4207-8151-af6a6b86079d
storageType=DATA_NODE
layoutVersion=-56
=======================================

搭建centos7的开发环境2-单机版Hadoop2.7.3配置的更多相关文章

  1. 搭建centos7的开发环境1-系统安装及Python配置

    在公司开发部干活的好处是可以再分配一台高性能的PC,有了新的工作电脑,原来分配的笔记本电脑就可以安装linux系统做开发了,主要有两方面的开发计划,一个是计划中要参与爬虫系统的开发,第二个是大数据环境 ...

  2. 搭建centos7的开发环境3-Spark安装配置

    说起大数据开发,必然就会提到Spark,在这片博文中,我们就介绍一下Spark的安装和配置. 这是Centos7开发环境系列的第三篇,本篇的安装会基于之前的配置进行,有需要的请回复搭建centos7的 ...

  3. Visual Studio Code搭建NodeJs的开发环境

    一.Visual Studio Code搭建NodeJs的开发环境 1.下载安装NodeJs并配置环境变量 可以参考:NodeJs的安装和环境变量配置 2.下载安装 VS Code编辑器 可以参考:V ...

  4. Windows下搭建Spark+Hadoop开发环境

    Windows下搭建Spark+Hadoop开发环境需要一些工具支持. 只需要确保您的电脑已装好Java环境,那么就可以开始了. 一. 准备工作 1. 下载Hadoop2.7.1版本(写Spark和H ...

  5. 用grunt搭建web前端开发环境

    1.前言 本文章旨在讲解grunt入门,以及讲解grunt最常用的几个插件的使用. 2.安装node.js Grunt和所有grunt插件都是基于nodejs来运行的,如果你的电脑上没有nodejs, ...

  6. windows和linux中搭建python集成开发环境IDE——如何设置多个python环境

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  7. 使用IntelliJ IDEA 13搭建Android集成开发环境(图文教程)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  8. 【转】windows和linux中搭建python集成开发环境IDE

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  9. 搭建Android底层开发环境

    为了开发linux驱动方便些,我们一般将linux作为Android的开发环境,那么就需要搭建Android的开发环境,下面是一些搭建Android底层时的心得: (1)安装JDK:除了普遍使用的下载 ...

随机推荐

  1. leetcode之 Palindrome Partitioning I&II

    1 Palindrome Partitioning 问题来源:Palindrome Partitioning 该问题简单来说就是给定一个字符串,将字符串分成多个部分,满足每一部分都是回文串,请输出所有 ...

  2. (NO.00003)iOS游戏简单的机器人投射游戏成形记(十一)

    机器人发射子弹已经完成了,下面看看怎么给玩家设置障碍. 大家从上篇的图可以看到,在机器和篮筐直接有若干障碍物.我们先看如何实现它们. 打开SpriteBuilder,在Sprites文件夹中新建Sma ...

  3. 认证模式之Spnego模式

    Spnego模式是一种由微软提出的使用GSS-API接口的认证模式,它扩展了Kerberos协议,在了解Spnego协议之前必须先了解Kerberos协议,Kerberos协议主要解决身份认证及通信密 ...

  4. MySql my.ini 中文详细说明

    [mysqld] port           = 3306 socket         = /tmp/mysql.sock # 设置mysql的安装目录 basedir=F:\\Hzq Soft\ ...

  5. Python学习笔记 - 生成器generator

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- # generator 生成器 L = [x * x for x in range(10)] print( ...

  6. eclipse 设置maven来自动下载源码与doc

    通常我们通过maven来使用各种库文件,想要真正了解别人的类实现方法,需要查看别人的源码,maven给我们提供了这个便利,它不仅可以下载各种库文件,还会下载对应的源码和doc文档. 一.在工具栏找到W ...

  7. 根据分析查看相关知识点分析iOS 三种录制视频方式

    这篇文章讨论了关于如何配置视频捕获管线 (pipeline) 和最大限度地利用硬件性能的一些不同选择. 这里有个使用了不同管线的样例 app,可以在 GitHub 查看. 第一种:UIImagePic ...

  8. 安卓笔记--intent传值不更新问题

    今天在学习安卓的过程中,遇到一个问题,就是用intent进行多次传值的话, 他永远是第一次的值 后来发现,intent接收数据被写到了onCreat();方法中,这时候finish();到上一个Act ...

  9. C++开发基础

    硬件配置: 586以上PC兼容机或品牌机,配有彩色显示器.鼠标.键盘,内存不小于20MB,硬 盘自由空间不少于60MB.推荐配置为内存32MB或64MB(或以上),硬盘自由空间500MB 以上. 软件 ...

  10. DTN学习,theONE模拟器网络相关资料整理

    下面是一个百度空间的: http://hi.baidu.com/jensenliao 博客园的一篇博客:theONE模拟器简介(主要讲述,软件配置,软件结构) http://www.cnblogs.c ...