Centos7上Hadoop的安装和配置
来源:互联网 发布:幼儿园大班美工活动 编辑:程序博客网 时间:2024/05/21 09:20
背景介绍
Hadoop是一个能够让用户轻松架构和使用的分布式计算平台,用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。
Hadoop是由Apache基金会所开发的分布式系统基础架构,用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
Hadoop集群中不同主机扮演不同的角色,主要分下面几种:
Master
NameNode
NameNode用于管理文件系统HDFS ,维护文件系统树结构和文件元数据。当有新文件要写入系统时客户端会先向NameNode查询当前文件系统的状态,然后得知自己可以往哪里写入,最后实际写入文件系统,这中间NameNode就是管理主要信息的核心设备。
ResourceManager
ResourceManager用于管理和分配工作,它是所有工作的总调度程序。
Slave
DataNode
DataNode提供文件存储,它将自己的存储空间分块,然后向NameNode报告自己的存储状态并负责真正保存文件
NodeManager
NodeManager用于接受ResourceManager分配的工作并实际工作,是所有工作的实际执行者。
Hadoop安装
注意:Hadoop对JDK的版本要求,参考:https://wiki.apache.org/hadoop/HadoopJavaVersions
Hadoop有三种安装模式:单机模式,伪分布式,真正分布式。
单机模式standalone
单机模式是Hadoop的默认模式。这种模式在一台单机上运行,没有分布式文件系统,而是直接读写本地操作系统的文件系统。
当首次解压Hadoop的源码包时,Hadoop无法了解硬件安装环境,便保守地选择了最小配置。
在这种默认模式下所有3个XML文件均为空。当配置文件为空时,Hadoop会完全运行在本地。
因为不需要与其他节点交互,单机模式就不使用HDFS,也不加载任何Hadoop的守护进程。该模式主要用于开发调试MapReduce程序的应用逻辑。
伪分布模式
这种模式也是在一台单机上运行,但用不同的Java进程模仿分布式运行中的各类结点(NameNode,DataNode,JobTracker,TaskTracker,SecondaryNameNode)。
注意分布式运行中的这些结点的区别:
从分布式存储的角度来说,集群中的结点由一个NameNode和若干个DataNode组成,另有一个SecondaryNameNode作为NameNode的备份。
从分布式应用的角度来说,集群中的结点由一个JobTracker和若干个TaskTracker组成,JobTracker负责任务的调度,TaskTracker负责并行执行任务。
TaskTracker必须运行在DataNode上,这样便于数据的本地计算。JobTracker和NameNode则无须在同一台机器上。
一台机器即当NameNode,又当DataNode,或者说即是JobTracker,又是TaskTracker。没有所谓的在多台机器上进行真正的分布式计算,故称为"伪分布式"。
完全分布式模式
真正的分布式,由3个及以上的实体机或者虚拟机组件的机群。
>下载Hadoop安装包
Hadoop官方资料:http://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/SingleCluster.html
Hadoop官方下载镜像:http://www.apache.org/dyn/closer.cgi/hadoop/common/
我下载Hadoop-2.5.2:http://mirrors.cnnic.cn/apache/hadoop/common/hadoop-2.5.2/hadoop-2.5.2.tar.gz
>JDK安装
我选择java-1.7.0-openjdk-1.7.0.121
先看看系统是否已经默认安装了openjdk
# yum list installed | grep java
如果版本不符,先卸载自带安装的jdk
卸载JDK相关文件输入
# yum -y remove java-1.7.0-openjdk*
卸载tzdata-java输入
# yum -y remove tzdata-java.noarch
安装openjdk-1.7.0
# yum -y install java-1.7.0-openjdk*
查看java版本
# java -version
配置环境变量:
# vim /etc/profile
文件末尾,添加内容:
# for java
export JAVA_HOME=/lib/jvm/java
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
生效配置
# source /etc/profile
>添加hadoop用户
当然也可以直接使用root用户
# useradd hadoop
# passwd hadoop
我直接使用root用户,这里就不添加了。
>ssh免密匙登录
切换到hadoop用户执行.如果直使用root用户,不使用hadoop用户,则无需切换。配置ssh,生成密匙,使到ssh可以免密码连接(RSA算法,基于因数不对称加密:公钥加密私钥才能解密,私钥加密公钥才能解密)。提示输入时,三次直接回车,不输入。
# cd ~
# ssh-keygen -t rsa
# cd .ssh
# cp id_rsa.pub authorized_keys 覆盖公钥,就能免密码连接
测试免密登录,如果不提示输入密码,则配置成功
# ssh localhost
>Hadoop单机模式standalone安装
......
>Hadoop伪分布模式安装
解压
如果以hadoop用户安装,则在用户目录/home/hadoop/下执行解压,我用root用户,在/opt下进行
# cd /opt
# tar -zxvf hadoop-2.5.2.tar.gz
添加Hadoop环境变量
Hadoop 2.5.0后需要添加环境变量
如果用hadoop用户,则在当前hadoop用户下面编辑
$ vim ~/.bashrc 添加如下代码
export HADOOP_HOME=/home/hadoop/hadoop-2.5.2
export PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
生效环境变量
$ source ~/.bashrc
如果是用的root用户,则在当前root用户下面编辑
# vim /etc/profile
export HADOOP_HOME=/opt/hadoop-2.5.2
export PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
生效环境变量
# source /etc/profile
创建tmp目录
创建一个tmp目录,未来的查询都可以在这个目录下进行
# mkdir /opt/hadoop-2.5.2/tmp
修改Hadoop的配置文件
下面的配置文件都在hadoop安装目录的etc/hadoop目录下,注意先备份。
最开始的时候hadoop配置文件很少,不过随着项目越来越大配置文件也开始增加了。
到现在为止hadoop的代码大致分为了core,hdfs和map/reduce三部分,配置文件也被分成了三个。不过mapred-site.xml其实可以不配置。
1. hadoop-env.sh
为hadoop指定jdk。
这里真正要配置的其实就是配置JAVA_HOME这个参数,虽然配置了环境jdk的环境变量, 但如果没有修改该配置文件,在启动hadoop时,提示找不到jdk:localhost: Error: JAVA_HOME is not set and could not be found.
vim /opt/hadoop-2.5.2/etc/hadoop/hadoop-env.sh
#export JAVA_HOME=${JAVA_HOME} #修改之前
export JAVA_HOME=/lib/jvm/java #修改以后
......
#export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true" #修改之前
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_HOME/lib/native" #修改之后,如果不需改,可能会报错,后面提到的:遇到的错误和解决方法
hadoop可以在单节点上以伪分布式的方式运行,Hadoop进程以分离的Java进程来运行,节点即NameNode也是DataNode。需要修改2个配置文件:etc/hadoop/core-site.xml和etc/hadoop/hdfs-site.xml。
2. core-site.xml
配置HDFS节点名称和地址。指定接收Client连接的RPC端口,用于获取文件系统metadata信息。
按照下面的内容配置Master(NameNode/ResourceManager)的地址和端口号,进行下面的配置前一定要创建/opt/hadoop-2.5.2/tmp目录。
fs.defaultFS用来指定ResourceManager设备。
vim /opt/hadoop-2.5.2/etc/hadoop/core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-2.5.2/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
注意:这里如果要通过外部访问本机,localhost要改成IP地址(192.168.1.100,不能用127.0.0.1)或者是主机名,否则只能本机访问,无法通过其他机器访问。
Hadoop自升级到2.x版本之后,有很多属性的名称已经被遗弃了,虽然这些属性名称目前还可以用,但是还是建议用新的属性名。
主要遗弃的属性名称参考下面地址:http://www.iteblog.com/archives/923。
上面的fs.defaultFS在老版本中使用fs.default.name,现在还是可以用的,但是建议使用新的。
hadoop如果使用主机名,不支持特殊字符。
配置hdfs的指定URL路径,由于是伪分布模式,所以配置的是本机IP ,可为真实Ip、localhost。
注意:上面的hadoop.tmp.dir如果不配置的话默认就会用临时目录/tmp/hadoo-hadoop。
这个目录每次重启后都会被删掉,必须重新执行format才行(bin/hadoop namenode -format),否则会出错,namenode启动不起来。
所以建议更改默认的hadoop.tmp.dir路径。一定要先创建好tmp目录。
3. hdfs-site.xml
配置HDFS存储目录,复制数量。备份只有一份。
vim /opt/hadoop-2.5.2/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
我配置的伪单机,用的是该配置。
或
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop/tmp/dfs/data</value>
</property>
</configuration>
主要是对namenode和datanode存储路径的设置。
其实默认是存储是在file://${hadoop.tmp.dir}/dfs/name和data下的。由于我配置过hadoop.tmp.dir了,所以这里也不需配置的。
如果没有配置过hadoop.tmp.dir(默认/tmp),重启重启就没有了,那么这里建议设置专门的路径保存,使用后者配置。
如果已经配置过了hadoop.tmp.dir为非默认值/tmp,那么这里可以不用配置,使用前者配置。
4. mapred-site.xml
配置mapreduce的jobtracker地址。告诉hadoop,MapReduce是运行在yarn这个框架上。
cd /opt/hadoop-2.5.2/etc/hadoop/
mv mapred-site.xml.template mapred-site.xml 并添加下面内容:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
5. yarn-site.xml
vim /opt/hadoop-2.5.2/etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
Hadoop的启动和停止
切换到该安装目录下,首先格式化namenode
# cd /opt/hadoop-2.5.2
# bin/hdfs namenode -format
停止Hadoop
# cd /opt/hadoop-2.5.2
# sbin/stop-all.sh
重新格式化namenode节点
# cd /opt/hadoop-2.5.2
# bin/hadoop namenode -format
启动Hadoop
# cd /opt/hadoop-2.5.2
# sbin/start-all.sh
jps查看java的后台进程
# jps
7160 NameNode
11256 Jps
7695 ResourceManager
7315 DataNode
7792 NodeManager
7504 SecondaryNameNode
hadoop进程管理页面,Web查看NameNode运行状况:http://localhost:8088 ,
也可以 http://192.168.1.200:8088
hdfs管理页面,Web查看hdfs管理页面:http://localhost:50070 ,
也可以http://192.168.1.200:50070
简单hdfs命令测试:
mkdir -p /opt/hadoop-2.5.2/myinput/test
cd /opt/hadoop-2.5.2/myinput/test
echo "1;jack;testaaaa" > file01.txt
hdfs dfs -ls /
hdfs dfs -mkdir /test
hdfs dfs put file01.txt /test/file01.txt
hdfs dfs -cat /test/test1.txt
遇到的错误和解决方法:
1. WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
貌似是32位和64位的原因。首先确认系统是否64为系统,程序默认为32为程序。
解决:
下载native源码重新编译。也可以从下面的地址,直接下载对应的64位版本的hadoop-native:
http://http://dl.bintray.com/sequenceiq/sequenceiq-bin/
我下载了hadoop-native-64-2.5.2.tar。下载完以后,解压到hadoop的native目录下,覆盖原有文件即可。
rm -rf /opt/hadoop-2.5.2/lib/native/*
tar -xvf hadoop-native-64-2.5.2.tar -C /opt/hadoop-2.5.2/lib/native/
如果还是不行,尝试修改hadoop-env.sh中的HADOOP_OPTS:
vim /opt/hadoop-2.5.2/etc/hadoop/hadoop-env.sh
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_HOME/lib/native"
我的这个问题得到解决。
2. hadoop dfs -ls / 提示
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
原因:该版本hadoop目录已经换成了hdfs了,用hdfs代替。执行:hdfs dfs -ls / 就OK了。
Hadoop开启、关闭调试信息
开启:
export HADOOP_ROOT_LOGGER=DEBUG,console
关闭:
export HADOOP_ROOT_LOGGER=INFO,console
>Hadoop完全分布式模式安装
======待补充
- Centos7上Hadoop的安装和配置
- Centos7上HBase的安装和配置
- Hadoop之——CentOS7上Hadoop 2.6.0集群的安装与配置
- CentOS7上安装和配置VNC服务器
- centos7上安装gitlab,配置和汉化。
- CentOS7 上安装Hadoop 2.7.2 的安装 和 初步使用
- centOS7上Redis的安装配置
- eclipse上hadoop插件的安装和配置
- Linux上安装和配置Hadoop
- Centos7上Mesos和Marathon的安装
- centos7的vsftpd的安装和配置
- Hadoop的安装和配置
- centos7 iptables的安装和配置
- VMware虚拟机的配置和安装CentOS7
- centos7 iptables的安装和配置
- centos7 iptables的安装和配置
- centOS7下的MYSQL安装和配置
- centos7下tomcat的安装和配置
- Spring声明式事务原理分析
- 最全资料整理, 教你如何用HEXO搭建十分cool的属于自己的网站
- 调试botguard
- 使用七牛云存储markdown用的图片
- 434. Number of Segments in a String
- Centos7上Hadoop的安装和配置
- Vmware 的三种网络模式详解
- ffmpeg库音频解码示例(转载)
- 2017网易计算机视觉题目
- CentOS 6.5 LVS + KeepAlived 搭建 负载均衡 高可用 集群
- mongoDB 3.0 安全权限访问
- XML CDATA的作用
- Altium designer小技巧记录
- serializable 类 XXXX 未声明类型为 long 的静态终态 serialVersionUID 字段